Merge remote-tracking branch 'origin/7.0-features' into 7.0-features

This commit is contained in:
epowerj
2022-02-15 00:51:56 -05:00
17 changed files with 794 additions and 364 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,7 @@ gameover.waiting = [accent]Sonraki Harita Bekleniyor...
highscore = [accent]Yeni rekor! highscore = [accent]Yeni rekor!
copied = Panoya Kopyalandı. copied = Panoya Kopyalandı.
indev.notready = Oyunun bu kısmı henüz hazır değil. indev.notready = Oyunun bu kısmı henüz hazır değil.
indev.campaign = [accent]Congratulations! You've reached the end of the campaign![]\n\nThis is as far as the content goes right now. Interplanetary travel will be added in future updates. indev.campaign = [accent]Tebrikler! Mücadelenin sonuna ulaştın![]\n\nİçerikler bir sonraki sürüme kadar bu kadar.. Gezegenler arası ulaşım gelecek güncellemelerde eklenicek.
load.sound = Sesler load.sound = Sesler
load.map = Haritalar load.map = Haritalar
@@ -78,7 +78,7 @@ schematic.tagexists = Böyle bir Etiket zaten var.
stats = İstatistikler stats = İstatistikler
stat.wave = Bozguna Uğratılan Dalgalar:[accent] {0} stat.wave = Bozguna Uğratılan Dalgalar:[accent] {0}
stat.unitsCreated = Units Created:[accent] {0} stat.unitsCreated = Üretilen Birimler:[accent] {0}
stat.enemiesDestroyed = Yok Edilen Düşmanlar:[accent] {0} stat.enemiesDestroyed = Yok Edilen Düşmanlar:[accent] {0}
stat.built = İnşa Edilen Yapılar:[accent] {0} stat.built = İnşa Edilen Yapılar:[accent] {0}
stat.destroyed = Yok Edilen Yapılar:[accent] {0} stat.destroyed = Yok Edilen Yapılar:[accent] {0}
@@ -93,7 +93,7 @@ level.mode = Oyun Modu:
coreattack = < Merkez saldırı altında! > coreattack = < Merkez saldırı altında! >
nearpoint = [[ [scarlet]İNİŞ PİSTİNDEN AYRIL[] ]\nimha tehlikesi nearpoint = [[ [scarlet]İNİŞ PİSTİNDEN AYRIL[] ]\nimha tehlikesi
database = Çekirdek Veritabanı database = Çekirdek Veritabanı
database.button = Database database.button = Veritabanı
savegame = Oyunu Kaydet savegame = Oyunu Kaydet
loadgame = Oyunu Yükle loadgame = Oyunu Yükle
joingame = Oyuna Katıl joingame = Oyuna Katıl
@@ -319,7 +319,7 @@ data.invalid = Bu oyun verisi geçerli değil.
data.import.confirm = Dışarıdan içeri veri aktarmak şu anki verilerinizin [scarlet]tamamını[] silecektir.[accent]Bu işlem geri alınamaz![]\n\nVeri içeri aktarıldığında oyundan çıkacaksınız. data.import.confirm = Dışarıdan içeri veri aktarmak şu anki verilerinizin [scarlet]tamamını[] silecektir.[accent]Bu işlem geri alınamaz![]\n\nVeri içeri aktarıldığında oyundan çıkacaksınız.
quit.confirm = Çıkmak istediğinize emin misiniz? quit.confirm = Çıkmak istediğinize emin misiniz?
loading = [accent]Yükleniyor... loading = [accent]Yükleniyor...
downloading = [accent]Downloading... downloading = [accent]İndiriliyor...
saving = [accent]Kayıt ediliyor... saving = [accent]Kayıt ediliyor...
respawn = [accent][[{0}][] Çekirdekte yeniden doğ respawn = [accent][[{0}][] Çekirdekte yeniden doğ
cancelbuilding = [accent][[{0}][] Planı temizle cancelbuilding = [accent][[{0}][] Planı temizle
@@ -551,7 +551,7 @@ requirement.produce = {0} üret
requirement.capture = {0} sektörünü ele geçir requirement.capture = {0} sektörünü ele geçir
launch.text = Kalkış launch.text = Kalkış
research.multiplayer = Sadece kurucu araştırma yapabilir. research.multiplayer = Sadece kurucu araştırma yapabilir.
map.multiplayer = Only the host can view sectors. map.multiplayer = Sadece sunucu sahibi sektörleri görebilir.
uncover = uncover =
configure = Ekipmanı Yapılandır configure = Ekipmanı Yapılandır
@@ -697,7 +697,7 @@ settings.clearcampaignsaves.confirm = Mücadele modundaki oynadığınız tüm s
paused = [accent]<Durduruldu> paused = [accent]<Durduruldu>
clear = Temizle clear = Temizle
banned = [scarlet]Yasaklı banned = [scarlet]Yasaklı
unsupported.environment = [scarlet]Unsupported Environment unsupported.environment = [scarlet]Desteklenmeyen Ortam
yes = Evet yes = Evet
no = Hayır no = Hayır
info.title = Bilgi info.title = Bilgi
@@ -783,7 +783,7 @@ stat.speedmultiplier = Hız Çarpanı
stat.reloadmultiplier = Yeniden Yükleme Çarpanı stat.reloadmultiplier = Yeniden Yükleme Çarpanı
stat.buildspeedmultiplier = İnşa Hızı Çarpanı stat.buildspeedmultiplier = İnşa Hızı Çarpanı
stat.reactive = Tepki Verir stat.reactive = Tepki Verir
stat.healing = İyileştirir stat.healing = Tamir Eder
ability.forcefield = Güç Kalkanı ability.forcefield = Güç Kalkanı
ability.repairfield = Onarma Alanı ability.repairfield = Onarma Alanı
@@ -793,13 +793,13 @@ ability.shieldregenfield = Kalkan Yenileme Alanı
ability.movelightning = Hareket Enerjisi ability.movelightning = Hareket Enerjisi
ability.energyfield = Güç Kalkanı: [accent]{0}[] hasar ~ [accent]{1}[] blok / [accent]{2}[] hedef ability.energyfield = Güç Kalkanı: [accent]{0}[] hasar ~ [accent]{1}[] blok / [accent]{2}[] hedef
bar.drilltierreq = Daha İyi Matkap Gerekli bar.drilltierreq = Daha Güçlü Matkap Gerekli
bar.noresources = Eksik Kaynaklar bar.noresources = Kaynak Yetersiz
bar.corereq = Çekirdek Tabanı Gerekli bar.corereq = Çekirdek Tabanı Gerekli
bar.drillspeed = Matkap Hızı: {0}/s bar.drillspeed = Matkap Hızı: {0}/s
bar.pumpspeed = Pompa Hızı: {0}/s bar.pumpspeed = Pompa Hızı: {0}/s
bar.efficiency = Verim: {0}% bar.efficiency = Verim: {0}%
bar.boost = Boost: +{0}% bar.boost = Hızlanış: +{0}%
bar.powerbalance = Enerji: {0}/sn bar.powerbalance = Enerji: {0}/sn
bar.powerstored = Depolanan: {0}/{1} bar.powerstored = Depolanan: {0}/{1}
bar.poweramount = Enerji: {0} bar.poweramount = Enerji: {0}
@@ -822,13 +822,13 @@ bullet.damage = [stat]{0} [lightgray]hasar
bullet.splashdamage = [stat]{0} [lightgray]alan hasarı ~[stat] {1} [lightgray]kare bullet.splashdamage = [stat]{0} [lightgray]alan hasarı ~[stat] {1} [lightgray]kare
bullet.incendiary = [stat]yakıcı bullet.incendiary = [stat]yakıcı
bullet.homing = [stat]güdümlü bullet.homing = [stat]güdümlü
bullet.frags = [stat]{0}[lightgray]x frag bullets: bullet.frags = [stat]{0}[lightgray]x parçalı mermiler:
bullet.lightning = [stat]{0}[lightgray]x lightning ~ [stat]{1}[lightgray] damage bullet.lightning = [stat]{0}[lightgray]x elektrik ~ [stat]{1}[lightgray] hasarı
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] inşaa hasarı
bullet.knockback = [stat]{0} [lightgray]savurma bullet.knockback = [stat]{0} [lightgray]savurma
bullet.pierce = [stat]{0}[lightgray]x delme bullet.pierce = [stat]{0}[lightgray]x delme
bullet.infinitepierce = [stat]delme bullet.infinitepierce = [stat]delme
bullet.healpercent = [stat]{0}[lightgray]% healing bullet.healpercent = [stat]{0}[lightgray]% ototamir
bullet.multiplier = [stat]{0}[lightgray]x mermi çarpanı bullet.multiplier = [stat]{0}[lightgray]x mermi çarpanı
bullet.reload = [stat]{0}[lightgray]x atış hızı bullet.reload = [stat]{0}[lightgray]x atış hızı
@@ -861,7 +861,7 @@ category.items = Eşyalar
category.crafting = Üretim category.crafting = Üretim
category.function = Fonksiyon category.function = Fonksiyon
category.optional = İsteğe Bağlı Geliştirmeler category.optional = İsteğe Bağlı Geliştirmeler
setting.skipcoreanimation.name = Skip Core Launch/Land Animation setting.skipcoreanimation.name = Çekirdek Fırlatma/İnme Animasyonunu Atla
setting.landscape.name = Yatayda sabitle setting.landscape.name = Yatayda sabitle
setting.shadows.name = Gölgeler setting.shadows.name = Gölgeler
setting.blockreplace.name = Otomatik Blok önerileri setting.blockreplace.name = Otomatik Blok önerileri
@@ -883,7 +883,7 @@ setting.fpscap.name = Maksimum FPS
setting.fpscap.none = Limitsiz setting.fpscap.none = Limitsiz
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = Arayüz Ölçeği [lightgray](yeniden başlatma gerekebilir)[] setting.uiscale.name = Arayüz Ölçeği [lightgray](yeniden başlatma gerekebilir)[]
setting.uiscale.description = Restart required to apply changes. setting.uiscale.description = Değişikleri uygulamak için yeniden başlatma gerekli.
setting.swapdiagonal.name = Her Zaman Çapraz Yerleştirme setting.swapdiagonal.name = Her Zaman Çapraz Yerleştirme
setting.difficulty.training = Eğitim setting.difficulty.training = Eğitim
setting.difficulty.easy = Kolay setting.difficulty.easy = Kolay
@@ -891,7 +891,7 @@ setting.difficulty.normal = Normal
setting.difficulty.hard = Zor setting.difficulty.hard = Zor
setting.difficulty.insane = İmkansız setting.difficulty.insane = İmkansız
setting.difficulty.name = Zorluk: setting.difficulty.name = Zorluk:
setting.screenshake.name = Ekranı Salla setting.screenshake.name = Ekranı Sars
setting.effects.name = Efektleri Görüntüle setting.effects.name = Efektleri Görüntüle
setting.destroyedblocks.name = Kırılmış Blokları Göster setting.destroyedblocks.name = Kırılmış Blokları Göster
setting.blockstatus.name = Blok Durumunu Göster setting.blockstatus.name = Blok Durumunu Göster
@@ -1010,7 +1010,7 @@ mode.help.title = Modların açıklamaları
mode.survival.name = Hayatta Kalma mode.survival.name = Hayatta Kalma
mode.survival.description = Normal oyun oyun modu. Kaynak sınırlı ve dalgalar otomatik olarak gönderilir.\n[gray]Oynamak için haritada düşman doğma noktaları olması gerekir. mode.survival.description = Normal oyun oyun modu. Kaynak sınırlı ve dalgalar otomatik olarak gönderilir.\n[gray]Oynamak için haritada düşman doğma noktaları olması gerekir.
mode.sandbox.name = Yaratıcı mode.sandbox.name = Yaratıcı
mode.sandbox.description = Sonsuz kaynaklar ve dalgalar için zamanlayıcı yok. mode.sandbox.description = Sonsuz kaynak bulunur ve dalgalar için zamanlayıcı yok.
mode.editor.name = Düzenleyici mode.editor.name = Düzenleyici
mode.pvp.name = PvP mode.pvp.name = PvP
mode.pvp.description = Yerel olarak başkaları ile savaş.\n[gray]Oynamak için haritada en az iki farklı renkli çekirdek olması gerekir. mode.pvp.description = Yerel olarak başkaları ile savaş.\n[gray]Oynamak için haritada en az iki farklı renkli çekirdek olması gerekir.
@@ -1021,7 +1021,7 @@ mode.custom = Özel Kurallar
rules.infiniteresources = Sınırsız Kaynaklar rules.infiniteresources = Sınırsız Kaynaklar
rules.reactorexplosions = Reaktör Patlamaları rules.reactorexplosions = Reaktör Patlamaları
rules.coreincinerates = Çekirdek Taşanları Eritir rules.coreincinerates = Çekirdek Taşanları Eritir
rules.schematic = Schematics Allowed rules.schematic = Şema Kullanılabilir
rules.wavetimer = Dalga Zamanlayıcısı rules.wavetimer = Dalga Zamanlayıcısı
rules.waves = Dalgalar rules.waves = Dalgalar
rules.attack = Saldırı Modu rules.attack = Saldırı Modu
@@ -1173,7 +1173,7 @@ block.core-nucleus.name = Merkez: Çekirdek
block.deep-water.name = Derin Su block.deep-water.name = Derin Su
block.shallow-water.name = Su block.shallow-water.name = Su
block.tainted-water.name = Kirli Su block.tainted-water.name = Kirli Su
block.deep-tainted-water.name = Deep Tainted Water block.deep-tainted-water.name = Derin Kirli Su
block.darksand-tainted-water.name = Kara Kumlu Kirli Su block.darksand-tainted-water.name = Kara Kumlu Kirli Su
block.tar.name = Katran block.tar.name = Katran
block.stone.name = Taş block.stone.name = Taş
@@ -1715,7 +1715,7 @@ lenum.rand = [0 ile Sayı) arasında rastgele bir sayı.
lenum.log = Logaritma lenum.log = Logaritma
lenum.log10 = Logaritma 10 lenum.log10 = Logaritma 10
lenum.noise = 2D Noise lenum.noise = 2D Noise
lenum.abs = Absulute lenum.abs = Mutlak
lenum.sqrt = KareKök lenum.sqrt = KareKök
lenum.any = Herhangi bir Birim. lenum.any = Herhangi bir Birim.

View File

@@ -152,16 +152,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
} }
mods.eachClass(Mod::init); mods.eachClass(Mod::init);
finished = true; finished = true;
var event = new ClientLoadEvent(); Events.fire(new ClientLoadEvent());
//a temporary measure for compatibility with certain mods
Events.fireWrap(event.getClass(), event, listener -> {
try{
listener.get(event);
}catch(NoSuchFieldError | NoSuchMethodError | NoClassDefFoundError error){
Log.err(error);
}
});
clientLoaded = true; clientLoaded = true;
super.resize(graphics.getWidth(), graphics.getHeight()); super.resize(graphics.getWidth(), graphics.getHeight());
app.post(() -> app.post(() -> app.post(() -> app.post(() -> { app.post(() -> app.post(() -> app.post(() -> app.post(() -> {

View File

@@ -3260,7 +3260,7 @@ public class Blocks{
ammo( ammo(
//TODO 1 more ammo type, decide on base type //TODO 1 more ammo type, decide on base type
Items.carbide, new ArtilleryBulletType(2.5f, 300, "shell"){{ Items.thorium, new ArtilleryBulletType(2.5f, 300, "shell"){{
hitEffect = new MultiEffect(Fx.titanExplosion, Fx.titanSmoke); hitEffect = new MultiEffect(Fx.titanExplosion, Fx.titanSmoke);
despawnEffect = Fx.none; despawnEffect = Fx.none;
knockback = 2f; knockback = 2f;
@@ -3292,6 +3292,8 @@ public class Blocks{
}} }}
); );
ammoPerShot = 8;
maxAmmo = ammoPerShot * 3;
targetAir = false; targetAir = false;
shootShake = 4f; shootShake = 4f;
recoilAmount = 1f; recoilAmount = 1f;
@@ -3612,12 +3614,13 @@ public class Blocks{
//TODO requirements //TODO requirements
mechAssembler = new UnitAssembler("mech-assembler"){{ mechAssembler = new UnitAssembler("mech-assembler"){{
requirements(Category.units, with(Items.graphite, 500, Items.carbide, 600, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 900)); requirements(Category.units, with(Items.graphite, 500, Items.thorium, 600, Items.oxide, 200, Items.tungsten, 500, Items.silicon, 900));
size = 5; size = 5;
//TODO different reqs //TODO different reqs
plans.add(new AssemblerUnitPlan(UnitTypes.bulwark, 60f * 60f, BlockStack.list(Blocks.tungstenWallLarge, 12, Blocks.primeControlCore, 2))); plans.add(new AssemblerUnitPlan(UnitTypes.bulwark, 60f * 60f, BlockStack.list(Blocks.tungstenWallLarge, 12, Blocks.primeControlCore, 2)));
consumes.power(3f); consumes.power(3f);
areaSize = 13; areaSize = 13;
researchCostMultiplier = 0.4f;
consumes.liquid(Liquids.nitrogen, 24f / 60f); consumes.liquid(Liquids.nitrogen, 24f / 60f);
}}; }};

View File

@@ -2257,6 +2257,7 @@ public class UnitTypes{
backColor = Pal.heal; backColor = Pal.heal;
frontColor = Color.white; frontColor = Color.white;
width = height = 12f; width = height = 12f;
shrinkY = 0f;
speed = 5f; speed = 5f;
trailLength = 20; trailLength = 20;
trailWidth = 6f; trailWidth = 6f;
@@ -2833,7 +2834,7 @@ public class UnitTypes{
velocityRnd = 0.1f; velocityRnd = 0.1f;
heatColor = Color.red; heatColor = Color.red;
for(int i = 0; i < 3; i++){ for(int i = 0; i < 6; i++){
int fi = i; int fi = i;
parts.add(new RegionPart("-blade"){{ parts.add(new RegionPart("-blade"){{
under = true; under = true;

View File

@@ -79,9 +79,10 @@ public interface Platform{
} }
default Context getScriptContext(){ default Context getScriptContext(){
Context c = Context.enter(); Context context = Context.getCurrentContext();
c.setOptimizationLevel(9); if(context == null) context = Context.enter();
return c; context.setOptimizationLevel(9);
return context;
} }
/** Update discord RPC. */ /** Update discord RPC. */

View File

@@ -1765,6 +1765,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
//TODO atrocious method and should be squished //TODO atrocious method and should be squished
@Final @Final
@Replace
@Override @Override
public void update(){ public void update(){
//TODO should just avoid updating buildings instead //TODO should just avoid updating buildings instead

View File

@@ -7,6 +7,432 @@ public class ClassMap{
public static final ObjectMap<String, Class<?>> classes = new ObjectMap<>(); public static final ObjectMap<String, Class<?>> classes = new ObjectMap<>();
static{ static{
classes.put("AssemblerAI", mindustry.ai.types.AssemblerAI.class);
classes.put("BuilderAI", mindustry.ai.types.BuilderAI.class);
classes.put("CargoAI", mindustry.ai.types.CargoAI.class);
classes.put("CommandAI", mindustry.ai.types.CommandAI.class);
classes.put("DefenderAI", mindustry.ai.types.DefenderAI.class);
classes.put("FlyingAI", mindustry.ai.types.FlyingAI.class);
classes.put("FlyingFollowAI", mindustry.ai.types.FlyingFollowAI.class);
classes.put("FormationAI", mindustry.ai.types.FormationAI.class);
classes.put("GroundAI", mindustry.ai.types.GroundAI.class);
classes.put("HugAI", mindustry.ai.types.HugAI.class);
classes.put("LogicAI", mindustry.ai.types.LogicAI.class);
classes.put("MinerAI", mindustry.ai.types.MinerAI.class);
classes.put("MissileAI", mindustry.ai.types.MissileAI.class);
classes.put("RepairAI", mindustry.ai.types.RepairAI.class);
classes.put("SuicideAI", mindustry.ai.types.SuicideAI.class);
classes.put("Ability", mindustry.entities.abilities.Ability.class);
classes.put("ArmorPlateAbility", mindustry.entities.abilities.ArmorPlateAbility.class);
classes.put("EnergyFieldAbility", mindustry.entities.abilities.EnergyFieldAbility.class);
classes.put("ForceFieldAbility", mindustry.entities.abilities.ForceFieldAbility.class);
classes.put("LiquidExplodeAbility", mindustry.entities.abilities.LiquidExplodeAbility.class);
classes.put("LiquidRegenAbility", mindustry.entities.abilities.LiquidRegenAbility.class);
classes.put("MoveLightningAbility", mindustry.entities.abilities.MoveLightningAbility.class);
classes.put("RegenAbility", mindustry.entities.abilities.RegenAbility.class);
classes.put("RepairFieldAbility", mindustry.entities.abilities.RepairFieldAbility.class);
classes.put("ShieldArcAbility", mindustry.entities.abilities.ShieldArcAbility.class);
classes.put("ShieldRegenFieldAbility", mindustry.entities.abilities.ShieldRegenFieldAbility.class);
classes.put("StatusFieldAbility", mindustry.entities.abilities.StatusFieldAbility.class);
classes.put("SuppressionFieldAbility", mindustry.entities.abilities.SuppressionFieldAbility.class);
classes.put("UnitSpawnAbility", mindustry.entities.abilities.UnitSpawnAbility.class);
classes.put("ArtilleryBulletType", mindustry.entities.bullet.ArtilleryBulletType.class);
classes.put("BasicBulletType", mindustry.entities.bullet.BasicBulletType.class);
classes.put("BombBulletType", mindustry.entities.bullet.BombBulletType.class);
classes.put("BulletType", mindustry.entities.bullet.BulletType.class);
classes.put("ContinuousBulletType", mindustry.entities.bullet.ContinuousBulletType.class);
classes.put("ContinuousFlameBulletType", mindustry.entities.bullet.ContinuousFlameBulletType.class);
classes.put("ContinuousLaserBulletType", mindustry.entities.bullet.ContinuousLaserBulletType.class);
classes.put("EmpBulletType", mindustry.entities.bullet.EmpBulletType.class);
classes.put("ExplosionBulletType", mindustry.entities.bullet.ExplosionBulletType.class);
classes.put("FireBulletType", mindustry.entities.bullet.FireBulletType.class);
classes.put("FlakBulletType", mindustry.entities.bullet.FlakBulletType.class);
classes.put("LaserBoltBulletType", mindustry.entities.bullet.LaserBoltBulletType.class);
classes.put("LaserBulletType", mindustry.entities.bullet.LaserBulletType.class);
classes.put("LightningBulletType", mindustry.entities.bullet.LightningBulletType.class);
classes.put("LiquidBulletType", mindustry.entities.bullet.LiquidBulletType.class);
classes.put("MassDriverBolt", mindustry.entities.bullet.MassDriverBolt.class);
classes.put("MissileBulletType", mindustry.entities.bullet.MissileBulletType.class);
classes.put("PointBulletType", mindustry.entities.bullet.PointBulletType.class);
classes.put("RailBulletType", mindustry.entities.bullet.RailBulletType.class);
classes.put("SapBulletType", mindustry.entities.bullet.SapBulletType.class);
classes.put("ShrapnelBulletType", mindustry.entities.bullet.ShrapnelBulletType.class);
classes.put("SpaceLiquidBulletType", mindustry.entities.bullet.SpaceLiquidBulletType.class);
classes.put("ExplosionEffect", mindustry.entities.effect.ExplosionEffect.class);
classes.put("MultiEffect", mindustry.entities.effect.MultiEffect.class);
classes.put("ParticleEffect", mindustry.entities.effect.ParticleEffect.class);
classes.put("RadialEffect", mindustry.entities.effect.RadialEffect.class);
classes.put("SeqEffect", mindustry.entities.effect.SeqEffect.class);
classes.put("WaveEffect", mindustry.entities.effect.WaveEffect.class);
classes.put("WrapEffect", mindustry.entities.effect.WrapEffect.class);
classes.put("Objectives", mindustry.game.Objectives.class);
classes.put("Objective", mindustry.game.Objectives.Objective.class);
classes.put("OnPlanet", mindustry.game.Objectives.OnPlanet.class);
classes.put("OnSector", mindustry.game.Objectives.OnSector.class);
classes.put("Produce", mindustry.game.Objectives.Produce.class);
classes.put("Research", mindustry.game.Objectives.Research.class);
classes.put("SectorComplete", mindustry.game.Objectives.SectorComplete.class);
classes.put("AmmoType", mindustry.type.AmmoType.class);
classes.put("BlockSeq", mindustry.type.BlockSeq.class);
classes.put("BlockStack", mindustry.type.BlockStack.class);
classes.put("Category", mindustry.type.Category.class);
classes.put("CellLiquid", mindustry.type.CellLiquid.class);
classes.put("ErrorContent", mindustry.type.ErrorContent.class);
classes.put("Item", mindustry.type.Item.class);
classes.put("ItemSeq", mindustry.type.ItemSeq.class);
classes.put("ItemStack", mindustry.type.ItemStack.class);
classes.put("Liquid", mindustry.type.Liquid.class);
classes.put("LiquidStack", mindustry.type.LiquidStack.class);
classes.put("Planet", mindustry.type.Planet.class);
classes.put("Publishable", mindustry.type.Publishable.class);
classes.put("Satellite", mindustry.type.Satellite.class);
classes.put("Sector", mindustry.type.Sector.class);
classes.put("SectorRect", mindustry.type.Sector.SectorRect.class);
classes.put("SectorPreset", mindustry.type.SectorPreset.class);
classes.put("StatusEffect", mindustry.type.StatusEffect.class);
classes.put("TransitionHandler", mindustry.type.StatusEffect.TransitionHandler.class);
classes.put("TeamEntry", mindustry.type.TeamEntry.class);
classes.put("UnitType", mindustry.type.UnitType.class);
classes.put("UnitEngine", mindustry.type.UnitType.UnitEngine.class);
classes.put("Weapon", mindustry.type.Weapon.class);
classes.put("Weather", mindustry.type.Weather.class);
classes.put("WeatherEntry", mindustry.type.Weather.WeatherEntry.class);
classes.put("ItemAmmoType", mindustry.type.ammo.ItemAmmoType.class);
classes.put("PowerAmmoType", mindustry.type.ammo.PowerAmmoType.class);
classes.put("ErekirUnitType", mindustry.type.unit.ErekirUnitType.class);
classes.put("MissileUnitType", mindustry.type.unit.MissileUnitType.class);
classes.put("NeoplasmUnitType", mindustry.type.unit.NeoplasmUnitType.class);
classes.put("TankUnitType", mindustry.type.unit.TankUnitType.class);
classes.put("BuildWeapon", mindustry.type.weapons.BuildWeapon.class);
classes.put("PointDefenseWeapon", mindustry.type.weapons.PointDefenseWeapon.class);
classes.put("RepairBeamWeapon", mindustry.type.weapons.RepairBeamWeapon.class);
classes.put("HealBeamMount", mindustry.type.weapons.RepairBeamWeapon.HealBeamMount.class);
classes.put("MagneticStorm", mindustry.type.weather.MagneticStorm.class);
classes.put("ParticleWeather", mindustry.type.weather.ParticleWeather.class);
classes.put("RainWeather", mindustry.type.weather.RainWeather.class);
classes.put("SolarFlare", mindustry.type.weather.SolarFlare.class);
classes.put("Attributes", mindustry.world.blocks.Attributes.class);
classes.put("Autotiler", mindustry.world.blocks.Autotiler.class);
classes.put("AutotilerHolder", mindustry.world.blocks.Autotiler.AutotilerHolder.class);
classes.put("SliceMode", mindustry.world.blocks.Autotiler.SliceMode.class);
classes.put("ConstructBlock", mindustry.world.blocks.ConstructBlock.class);
classes.put("ConstructBuild", mindustry.world.blocks.ConstructBlock.ConstructBuild.class);
classes.put("ControlBlock", mindustry.world.blocks.ControlBlock.class);
classes.put("ItemSelection", mindustry.world.blocks.ItemSelection.class);
classes.put("Accelerator", mindustry.world.blocks.campaign.Accelerator.class);
classes.put("AcceleratorBuild", mindustry.world.blocks.campaign.Accelerator.AcceleratorBuild.class);
classes.put("LaunchPad", mindustry.world.blocks.campaign.LaunchPad.class);
classes.put("LaunchPadBuild", mindustry.world.blocks.campaign.LaunchPad.LaunchPadBuild.class);
classes.put("BaseShield", mindustry.world.blocks.defense.BaseShield.class);
classes.put("BaseShieldBuild", mindustry.world.blocks.defense.BaseShield.BaseShieldBuild.class);
classes.put("BuildTurret", mindustry.world.blocks.defense.BuildTurret.class);
classes.put("BuildTurretBuild", mindustry.world.blocks.defense.BuildTurret.BuildTurretBuild.class);
classes.put("DirectionalForceProjector", mindustry.world.blocks.defense.DirectionalForceProjector.class);
classes.put("DirectionalForceProjectorBuild", mindustry.world.blocks.defense.DirectionalForceProjector.DirectionalForceProjectorBuild.class);
classes.put("Door", mindustry.world.blocks.defense.Door.class);
classes.put("DoorBuild", mindustry.world.blocks.defense.Door.DoorBuild.class);
classes.put("ForceProjector", mindustry.world.blocks.defense.ForceProjector.class);
classes.put("ForceBuild", mindustry.world.blocks.defense.ForceProjector.ForceBuild.class);
classes.put("MendProjector", mindustry.world.blocks.defense.MendProjector.class);
classes.put("MendBuild", mindustry.world.blocks.defense.MendProjector.MendBuild.class);
classes.put("OverdriveProjector", mindustry.world.blocks.defense.OverdriveProjector.class);
classes.put("OverdriveBuild", mindustry.world.blocks.defense.OverdriveProjector.OverdriveBuild.class);
classes.put("RegenProjector", mindustry.world.blocks.defense.RegenProjector.class);
classes.put("RegenProjectorBuild", mindustry.world.blocks.defense.RegenProjector.RegenProjectorBuild.class);
classes.put("ShockMine", mindustry.world.blocks.defense.ShockMine.class);
classes.put("ShockMineBuild", mindustry.world.blocks.defense.ShockMine.ShockMineBuild.class);
classes.put("Thruster", mindustry.world.blocks.defense.Thruster.class);
classes.put("ThrusterBuild", mindustry.world.blocks.defense.Thruster.ThrusterBuild.class);
classes.put("Wall", mindustry.world.blocks.defense.Wall.class);
classes.put("WallBuild", mindustry.world.blocks.defense.Wall.WallBuild.class);
classes.put("BaseTurret", mindustry.world.blocks.defense.turrets.BaseTurret.class);
classes.put("BaseTurretBuild", mindustry.world.blocks.defense.turrets.BaseTurret.BaseTurretBuild.class);
classes.put("ContinuousLiquidTurret", mindustry.world.blocks.defense.turrets.ContinuousLiquidTurret.class);
classes.put("LiquidTurretBuild", mindustry.world.blocks.defense.turrets.ContinuousLiquidTurret.LiquidTurretBuild.class);
classes.put("ContinuousTurret", mindustry.world.blocks.defense.turrets.ContinuousTurret.class);
classes.put("ContinuousTurretBuild", mindustry.world.blocks.defense.turrets.ContinuousTurret.ContinuousTurretBuild.class);
classes.put("ItemTurret", mindustry.world.blocks.defense.turrets.ItemTurret.class);
classes.put("ItemEntry", mindustry.world.blocks.defense.turrets.ItemTurret.ItemEntry.class);
classes.put("ItemTurretBuild", mindustry.world.blocks.defense.turrets.ItemTurret.ItemTurretBuild.class);
classes.put("LaserTurret", mindustry.world.blocks.defense.turrets.LaserTurret.class);
classes.put("LaserTurretBuild", mindustry.world.blocks.defense.turrets.LaserTurret.LaserTurretBuild.class);
classes.put("LiquidTurret", mindustry.world.blocks.defense.turrets.LiquidTurret.class);
classes.put("LiquidTurretBuild", mindustry.world.blocks.defense.turrets.LiquidTurret.LiquidTurretBuild.class);
classes.put("PayloadTurret", mindustry.world.blocks.defense.turrets.PayloadTurret.class);
classes.put("PayloadTurretBuild", mindustry.world.blocks.defense.turrets.PayloadTurret.PayloadTurretBuild.class);
classes.put("PointDefenseTurret", mindustry.world.blocks.defense.turrets.PointDefenseTurret.class);
classes.put("PointDefenseBuild", mindustry.world.blocks.defense.turrets.PointDefenseTurret.PointDefenseBuild.class);
classes.put("PowerTurret", mindustry.world.blocks.defense.turrets.PowerTurret.class);
classes.put("PowerTurretBuild", mindustry.world.blocks.defense.turrets.PowerTurret.PowerTurretBuild.class);
classes.put("ReloadTurret", mindustry.world.blocks.defense.turrets.ReloadTurret.class);
classes.put("ReloadTurretBuild", mindustry.world.blocks.defense.turrets.ReloadTurret.ReloadTurretBuild.class);
classes.put("TractorBeamTurret", mindustry.world.blocks.defense.turrets.TractorBeamTurret.class);
classes.put("TractorBeamBuild", mindustry.world.blocks.defense.turrets.TractorBeamTurret.TractorBeamBuild.class);
classes.put("Turret", mindustry.world.blocks.defense.turrets.Turret.class);
classes.put("AmmoEntry", mindustry.world.blocks.defense.turrets.Turret.AmmoEntry.class);
classes.put("TurretBuild", mindustry.world.blocks.defense.turrets.Turret.TurretBuild.class);
classes.put("ArmoredConveyor", mindustry.world.blocks.distribution.ArmoredConveyor.class);
classes.put("ArmoredConveyorBuild", mindustry.world.blocks.distribution.ArmoredConveyor.ArmoredConveyorBuild.class);
classes.put("BufferedItemBridge", mindustry.world.blocks.distribution.BufferedItemBridge.class);
classes.put("BufferedItemBridgeBuild", mindustry.world.blocks.distribution.BufferedItemBridge.BufferedItemBridgeBuild.class);
classes.put("ChainedBuilding", mindustry.world.blocks.distribution.ChainedBuilding.class);
classes.put("Conveyor", mindustry.world.blocks.distribution.Conveyor.class);
classes.put("ConveyorBuild", mindustry.world.blocks.distribution.Conveyor.ConveyorBuild.class);
classes.put("DirectionBridge", mindustry.world.blocks.distribution.DirectionBridge.class);
classes.put("DirectionBridgeBuild", mindustry.world.blocks.distribution.DirectionBridge.DirectionBridgeBuild.class);
classes.put("DirectionLiquidBridge", mindustry.world.blocks.distribution.DirectionLiquidBridge.class);
classes.put("DuctBridgeBuild", mindustry.world.blocks.distribution.DirectionLiquidBridge.DuctBridgeBuild.class);
classes.put("DirectionalUnloader", mindustry.world.blocks.distribution.DirectionalUnloader.class);
classes.put("DirectionalUnloaderBuild", mindustry.world.blocks.distribution.DirectionalUnloader.DirectionalUnloaderBuild.class);
classes.put("Duct", mindustry.world.blocks.distribution.Duct.class);
classes.put("DuctBuild", mindustry.world.blocks.distribution.Duct.DuctBuild.class);
classes.put("DuctBridge", mindustry.world.blocks.distribution.DuctBridge.class);
classes.put("DuctBridgeBuild", mindustry.world.blocks.distribution.DuctBridge.DuctBridgeBuild.class);
classes.put("DuctRouter", mindustry.world.blocks.distribution.DuctRouter.class);
classes.put("DuctRouterBuild", mindustry.world.blocks.distribution.DuctRouter.DuctRouterBuild.class);
classes.put("ItemBridge", mindustry.world.blocks.distribution.ItemBridge.class);
classes.put("ItemBridgeBuild", mindustry.world.blocks.distribution.ItemBridge.ItemBridgeBuild.class);
classes.put("Junction", mindustry.world.blocks.distribution.Junction.class);
classes.put("JunctionBuild", mindustry.world.blocks.distribution.Junction.JunctionBuild.class);
classes.put("MassDriver", mindustry.world.blocks.distribution.MassDriver.class);
classes.put("DriverBulletData", mindustry.world.blocks.distribution.MassDriver.DriverBulletData.class);
classes.put("DriverState", mindustry.world.blocks.distribution.MassDriver.DriverState.class);
classes.put("MassDriverBuild", mindustry.world.blocks.distribution.MassDriver.MassDriverBuild.class);
classes.put("OverflowDuct", mindustry.world.blocks.distribution.OverflowDuct.class);
classes.put("DuctRouterBuild", mindustry.world.blocks.distribution.OverflowDuct.DuctRouterBuild.class);
classes.put("OverflowGate", mindustry.world.blocks.distribution.OverflowGate.class);
classes.put("OverflowGateBuild", mindustry.world.blocks.distribution.OverflowGate.OverflowGateBuild.class);
classes.put("Router", mindustry.world.blocks.distribution.Router.class);
classes.put("RouterBuild", mindustry.world.blocks.distribution.Router.RouterBuild.class);
classes.put("Sorter", mindustry.world.blocks.distribution.Sorter.class);
classes.put("SorterBuild", mindustry.world.blocks.distribution.Sorter.SorterBuild.class);
classes.put("StackConveyor", mindustry.world.blocks.distribution.StackConveyor.class);
classes.put("StackConveyorBuild", mindustry.world.blocks.distribution.StackConveyor.StackConveyorBuild.class);
classes.put("StackRouter", mindustry.world.blocks.distribution.StackRouter.class);
classes.put("StackRouterBuild", mindustry.world.blocks.distribution.StackRouter.StackRouterBuild.class);
classes.put("AirBlock", mindustry.world.blocks.environment.AirBlock.class);
classes.put("Cliff", mindustry.world.blocks.environment.Cliff.class);
classes.put("EmptyFloor", mindustry.world.blocks.environment.EmptyFloor.class);
classes.put("Floor", mindustry.world.blocks.environment.Floor.class);
classes.put("UpdateRenderState", mindustry.world.blocks.environment.Floor.UpdateRenderState.class);
classes.put("OreBlock", mindustry.world.blocks.environment.OreBlock.class);
classes.put("OverlayFloor", mindustry.world.blocks.environment.OverlayFloor.class);
classes.put("Prop", mindustry.world.blocks.environment.Prop.class);
classes.put("SeaBush", mindustry.world.blocks.environment.SeaBush.class);
classes.put("Seaweed", mindustry.world.blocks.environment.Seaweed.class);
classes.put("ShallowLiquid", mindustry.world.blocks.environment.ShallowLiquid.class);
classes.put("SpawnBlock", mindustry.world.blocks.environment.SpawnBlock.class);
classes.put("StaticTree", mindustry.world.blocks.environment.StaticTree.class);
classes.put("StaticWall", mindustry.world.blocks.environment.StaticWall.class);
classes.put("SteamVent", mindustry.world.blocks.environment.SteamVent.class);
classes.put("TallBlock", mindustry.world.blocks.environment.TallBlock.class);
classes.put("TreeBlock", mindustry.world.blocks.environment.TreeBlock.class);
classes.put("WobbleProp", mindustry.world.blocks.environment.WobbleProp.class);
classes.put("HeatBlock", mindustry.world.blocks.heat.HeatBlock.class);
classes.put("HeatConductor", mindustry.world.blocks.heat.HeatConductor.class);
classes.put("HeatConductorBuild", mindustry.world.blocks.heat.HeatConductor.HeatConductorBuild.class);
classes.put("HeatConsumer", mindustry.world.blocks.heat.HeatConsumer.class);
classes.put("HeatProducer", mindustry.world.blocks.heat.HeatProducer.class);
classes.put("HeatProducerBuild", mindustry.world.blocks.heat.HeatProducer.HeatProducerBuild.class);
classes.put("LegacyBlock", mindustry.world.blocks.legacy.LegacyBlock.class);
classes.put("LegacyMechPad", mindustry.world.blocks.legacy.LegacyMechPad.class);
classes.put("LegacyMechPadBuild", mindustry.world.blocks.legacy.LegacyMechPad.LegacyMechPadBuild.class);
classes.put("LegacyUnitFactory", mindustry.world.blocks.legacy.LegacyUnitFactory.class);
classes.put("LegacyUnitFactoryBuild", mindustry.world.blocks.legacy.LegacyUnitFactory.LegacyUnitFactoryBuild.class);
classes.put("ArmoredConduit", mindustry.world.blocks.liquid.ArmoredConduit.class);
classes.put("ArmoredConduitBuild", mindustry.world.blocks.liquid.ArmoredConduit.ArmoredConduitBuild.class);
classes.put("Conduit", mindustry.world.blocks.liquid.Conduit.class);
classes.put("ConduitBuild", mindustry.world.blocks.liquid.Conduit.ConduitBuild.class);
classes.put("LiquidBlock", mindustry.world.blocks.liquid.LiquidBlock.class);
classes.put("LiquidBuild", mindustry.world.blocks.liquid.LiquidBlock.LiquidBuild.class);
classes.put("LiquidBridge", mindustry.world.blocks.liquid.LiquidBridge.class);
classes.put("LiquidBridgeBuild", mindustry.world.blocks.liquid.LiquidBridge.LiquidBridgeBuild.class);
classes.put("LiquidJunction", mindustry.world.blocks.liquid.LiquidJunction.class);
classes.put("LiquidJunctionBuild", mindustry.world.blocks.liquid.LiquidJunction.LiquidJunctionBuild.class);
classes.put("LiquidRouter", mindustry.world.blocks.liquid.LiquidRouter.class);
classes.put("LiquidRouterBuild", mindustry.world.blocks.liquid.LiquidRouter.LiquidRouterBuild.class);
classes.put("LogicBlock", mindustry.world.blocks.logic.LogicBlock.class);
classes.put("LogicBuild", mindustry.world.blocks.logic.LogicBlock.LogicBuild.class);
classes.put("LogicLink", mindustry.world.blocks.logic.LogicBlock.LogicLink.class);
classes.put("LogicDisplay", mindustry.world.blocks.logic.LogicDisplay.class);
classes.put("GraphicsType", mindustry.world.blocks.logic.LogicDisplay.GraphicsType.class);
classes.put("LogicDisplayBuild", mindustry.world.blocks.logic.LogicDisplay.LogicDisplayBuild.class);
classes.put("MemoryBlock", mindustry.world.blocks.logic.MemoryBlock.class);
classes.put("MemoryBuild", mindustry.world.blocks.logic.MemoryBlock.MemoryBuild.class);
classes.put("MessageBlock", mindustry.world.blocks.logic.MessageBlock.class);
classes.put("MessageBuild", mindustry.world.blocks.logic.MessageBlock.MessageBuild.class);
classes.put("SwitchBlock", mindustry.world.blocks.logic.SwitchBlock.class);
classes.put("SwitchBuild", mindustry.world.blocks.logic.SwitchBlock.SwitchBuild.class);
classes.put("BlockProducer", mindustry.world.blocks.payloads.BlockProducer.class);
classes.put("BlockProducerBuild", mindustry.world.blocks.payloads.BlockProducer.BlockProducerBuild.class);
classes.put("BuildPayload", mindustry.world.blocks.payloads.BuildPayload.class);
classes.put("Constructor", mindustry.world.blocks.payloads.Constructor.class);
classes.put("ConstructorBuild", mindustry.world.blocks.payloads.Constructor.ConstructorBuild.class);
classes.put("Payload", mindustry.world.blocks.payloads.Payload.class);
classes.put("PayloadBlock", mindustry.world.blocks.payloads.PayloadBlock.class);
classes.put("PayloadBlockBuild", mindustry.world.blocks.payloads.PayloadBlock.PayloadBlockBuild.class);
classes.put("PayloadConveyor", mindustry.world.blocks.payloads.PayloadConveyor.class);
classes.put("PayloadConveyorBuild", mindustry.world.blocks.payloads.PayloadConveyor.PayloadConveyorBuild.class);
classes.put("PayloadDeconstructor", mindustry.world.blocks.payloads.PayloadDeconstructor.class);
classes.put("PayloadDeconstructorBuild", mindustry.world.blocks.payloads.PayloadDeconstructor.PayloadDeconstructorBuild.class);
classes.put("PayloadLoader", mindustry.world.blocks.payloads.PayloadLoader.class);
classes.put("PayloadLoaderBuild", mindustry.world.blocks.payloads.PayloadLoader.PayloadLoaderBuild.class);
classes.put("PayloadMassDriver", mindustry.world.blocks.payloads.PayloadMassDriver.class);
classes.put("PayloadDriverBuild", mindustry.world.blocks.payloads.PayloadMassDriver.PayloadDriverBuild.class);
classes.put("PayloadDriverState", mindustry.world.blocks.payloads.PayloadMassDriver.PayloadDriverState.class);
classes.put("PayloadMassDriverData", mindustry.world.blocks.payloads.PayloadMassDriver.PayloadMassDriverData.class);
classes.put("PayloadRouter", mindustry.world.blocks.payloads.PayloadRouter.class);
classes.put("PayloadRouterBuild", mindustry.world.blocks.payloads.PayloadRouter.PayloadRouterBuild.class);
classes.put("PayloadSource", mindustry.world.blocks.payloads.PayloadSource.class);
classes.put("PayloadSourceBuild", mindustry.world.blocks.payloads.PayloadSource.PayloadSourceBuild.class);
classes.put("PayloadUnloader", mindustry.world.blocks.payloads.PayloadUnloader.class);
classes.put("PayloadUnloaderBuild", mindustry.world.blocks.payloads.PayloadUnloader.PayloadUnloaderBuild.class);
classes.put("PayloadVoid", mindustry.world.blocks.payloads.PayloadVoid.class);
classes.put("PayloadVoidBuild", mindustry.world.blocks.payloads.PayloadVoid.PayloadVoidBuild.class);
classes.put("UnitPayload", mindustry.world.blocks.payloads.UnitPayload.class);
classes.put("Battery", mindustry.world.blocks.power.Battery.class);
classes.put("BatteryBuild", mindustry.world.blocks.power.Battery.BatteryBuild.class);
classes.put("BeamNode", mindustry.world.blocks.power.BeamNode.class);
classes.put("BeamNodeBuild", mindustry.world.blocks.power.BeamNode.BeamNodeBuild.class);
classes.put("BurnerGenerator", mindustry.world.blocks.power.BurnerGenerator.class);
classes.put("BurnerGeneratorBuild", mindustry.world.blocks.power.BurnerGenerator.BurnerGeneratorBuild.class);
classes.put("ConditionalConsumePower", mindustry.world.blocks.power.ConditionalConsumePower.class);
classes.put("ConsumeGenerator", mindustry.world.blocks.power.ConsumeGenerator.class);
classes.put("ConsumeGeneratorBuild", mindustry.world.blocks.power.ConsumeGenerator.ConsumeGeneratorBuild.class);
classes.put("DecayGenerator", mindustry.world.blocks.power.DecayGenerator.class);
classes.put("DynamicConsumePower", mindustry.world.blocks.power.DynamicConsumePower.class);
classes.put("ImpactReactor", mindustry.world.blocks.power.ImpactReactor.class);
classes.put("ImpactReactorBuild", mindustry.world.blocks.power.ImpactReactor.ImpactReactorBuild.class);
classes.put("ItemLiquidGenerator", mindustry.world.blocks.power.ItemLiquidGenerator.class);
classes.put("ItemLiquidGeneratorBuild", mindustry.world.blocks.power.ItemLiquidGenerator.ItemLiquidGeneratorBuild.class);
classes.put("LightBlock", mindustry.world.blocks.power.LightBlock.class);
classes.put("LightBuild", mindustry.world.blocks.power.LightBlock.LightBuild.class);
classes.put("LongPowerNode", mindustry.world.blocks.power.LongPowerNode.class);
classes.put("LongPowerNodeBuild", mindustry.world.blocks.power.LongPowerNode.LongPowerNodeBuild.class);
classes.put("NuclearReactor", mindustry.world.blocks.power.NuclearReactor.class);
classes.put("NuclearReactorBuild", mindustry.world.blocks.power.NuclearReactor.NuclearReactorBuild.class);
classes.put("PowerBlock", mindustry.world.blocks.power.PowerBlock.class);
classes.put("PowerDiode", mindustry.world.blocks.power.PowerDiode.class);
classes.put("PowerDiodeBuild", mindustry.world.blocks.power.PowerDiode.PowerDiodeBuild.class);
classes.put("PowerDistributor", mindustry.world.blocks.power.PowerDistributor.class);
classes.put("PowerGenerator", mindustry.world.blocks.power.PowerGenerator.class);
classes.put("GeneratorBuild", mindustry.world.blocks.power.PowerGenerator.GeneratorBuild.class);
classes.put("PowerGraph", mindustry.world.blocks.power.PowerGraph.class);
classes.put("PowerNode", mindustry.world.blocks.power.PowerNode.class);
classes.put("PowerNodeBuild", mindustry.world.blocks.power.PowerNode.PowerNodeBuild.class);
classes.put("SolarGenerator", mindustry.world.blocks.power.SolarGenerator.class);
classes.put("SolarGeneratorBuild", mindustry.world.blocks.power.SolarGenerator.SolarGeneratorBuild.class);
classes.put("ThermalGenerator", mindustry.world.blocks.power.ThermalGenerator.class);
classes.put("ThermalGeneratorBuild", mindustry.world.blocks.power.ThermalGenerator.ThermalGeneratorBuild.class);
classes.put("AttributeCrafter", mindustry.world.blocks.production.AttributeCrafter.class);
classes.put("AttributeCrafterBuild", mindustry.world.blocks.production.AttributeCrafter.AttributeCrafterBuild.class);
classes.put("BeamDrill", mindustry.world.blocks.production.BeamDrill.class);
classes.put("BeamDrillBuild", mindustry.world.blocks.production.BeamDrill.BeamDrillBuild.class);
classes.put("BurstDrill", mindustry.world.blocks.production.BurstDrill.class);
classes.put("BurstDrillBuild", mindustry.world.blocks.production.BurstDrill.BurstDrillBuild.class);
classes.put("Drill", mindustry.world.blocks.production.Drill.class);
classes.put("DrillBuild", mindustry.world.blocks.production.Drill.DrillBuild.class);
classes.put("Fracker", mindustry.world.blocks.production.Fracker.class);
classes.put("FrackerBuild", mindustry.world.blocks.production.Fracker.FrackerBuild.class);
classes.put("GenericCrafter", mindustry.world.blocks.production.GenericCrafter.class);
classes.put("GenericCrafterBuild", mindustry.world.blocks.production.GenericCrafter.GenericCrafterBuild.class);
classes.put("HeatCrafter", mindustry.world.blocks.production.HeatCrafter.class);
classes.put("HeatCrafterBuild", mindustry.world.blocks.production.HeatCrafter.HeatCrafterBuild.class);
classes.put("Incinerator", mindustry.world.blocks.production.Incinerator.class);
classes.put("IncineratorBuild", mindustry.world.blocks.production.Incinerator.IncineratorBuild.class);
classes.put("ItemIncinerator", mindustry.world.blocks.production.ItemIncinerator.class);
classes.put("ItemIncineratorBuild", mindustry.world.blocks.production.ItemIncinerator.ItemIncineratorBuild.class);
classes.put("LiquidConverter", mindustry.world.blocks.production.LiquidConverter.class);
classes.put("LiquidConverterBuild", mindustry.world.blocks.production.LiquidConverter.LiquidConverterBuild.class);
classes.put("Pump", mindustry.world.blocks.production.Pump.class);
classes.put("PumpBuild", mindustry.world.blocks.production.Pump.PumpBuild.class);
classes.put("Separator", mindustry.world.blocks.production.Separator.class);
classes.put("SeparatorBuild", mindustry.world.blocks.production.Separator.SeparatorBuild.class);
classes.put("SingleBlockProducer", mindustry.world.blocks.production.SingleBlockProducer.class);
classes.put("SingleBlockProducerBuild", mindustry.world.blocks.production.SingleBlockProducer.SingleBlockProducerBuild.class);
classes.put("SolidPump", mindustry.world.blocks.production.SolidPump.class);
classes.put("SolidPumpBuild", mindustry.world.blocks.production.SolidPump.SolidPumpBuild.class);
classes.put("WallCrafter", mindustry.world.blocks.production.WallCrafter.class);
classes.put("WallCrafterBuild", mindustry.world.blocks.production.WallCrafter.WallCrafterBuild.class);
classes.put("ItemSource", mindustry.world.blocks.sandbox.ItemSource.class);
classes.put("ItemSourceBuild", mindustry.world.blocks.sandbox.ItemSource.ItemSourceBuild.class);
classes.put("ItemVoid", mindustry.world.blocks.sandbox.ItemVoid.class);
classes.put("ItemVoidBuild", mindustry.world.blocks.sandbox.ItemVoid.ItemVoidBuild.class);
classes.put("LiquidSource", mindustry.world.blocks.sandbox.LiquidSource.class);
classes.put("LiquidSourceBuild", mindustry.world.blocks.sandbox.LiquidSource.LiquidSourceBuild.class);
classes.put("LiquidVoid", mindustry.world.blocks.sandbox.LiquidVoid.class);
classes.put("LiquidVoidBuild", mindustry.world.blocks.sandbox.LiquidVoid.LiquidVoidBuild.class);
classes.put("PowerSource", mindustry.world.blocks.sandbox.PowerSource.class);
classes.put("PowerSourceBuild", mindustry.world.blocks.sandbox.PowerSource.PowerSourceBuild.class);
classes.put("PowerVoid", mindustry.world.blocks.sandbox.PowerVoid.class);
classes.put("CoreBlock", mindustry.world.blocks.storage.CoreBlock.class);
classes.put("CoreBuild", mindustry.world.blocks.storage.CoreBlock.CoreBuild.class);
classes.put("StorageBlock", mindustry.world.blocks.storage.StorageBlock.class);
classes.put("StorageBuild", mindustry.world.blocks.storage.StorageBlock.StorageBuild.class);
classes.put("Unloader", mindustry.world.blocks.storage.Unloader.class);
classes.put("ContainerStat", mindustry.world.blocks.storage.Unloader.ContainerStat.class);
classes.put("UnloaderBuild", mindustry.world.blocks.storage.Unloader.UnloaderBuild.class);
classes.put("CommandCenter", mindustry.world.blocks.units.CommandCenter.class);
classes.put("CommandBuild", mindustry.world.blocks.units.CommandCenter.CommandBuild.class);
classes.put("ControlCore", mindustry.world.blocks.units.ControlCore.class);
classes.put("DroneCenter", mindustry.world.blocks.units.DroneCenter.class);
classes.put("DroneCenterBuild", mindustry.world.blocks.units.DroneCenter.DroneCenterBuild.class);
classes.put("EffectDroneAI", mindustry.world.blocks.units.DroneCenter.EffectDroneAI.class);
classes.put("Reconstructor", mindustry.world.blocks.units.Reconstructor.class);
classes.put("ReconstructorBuild", mindustry.world.blocks.units.Reconstructor.ReconstructorBuild.class);
classes.put("RepairPoint", mindustry.world.blocks.units.RepairPoint.class);
classes.put("RepairPointBuild", mindustry.world.blocks.units.RepairPoint.RepairPointBuild.class);
classes.put("UnitAssembler", mindustry.world.blocks.units.UnitAssembler.class);
classes.put("AssemblerUnitPlan", mindustry.world.blocks.units.UnitAssembler.AssemblerUnitPlan.class);
classes.put("UnitAssemblerBuild", mindustry.world.blocks.units.UnitAssembler.UnitAssemblerBuild.class);
classes.put("YeetData", mindustry.world.blocks.units.UnitAssembler.YeetData.class);
classes.put("UnitAssemblerModule", mindustry.world.blocks.units.UnitAssemblerModule.class);
classes.put("UnitAssemblerModuleBuild", mindustry.world.blocks.units.UnitAssemblerModule.UnitAssemblerModuleBuild.class);
classes.put("UnitBlock", mindustry.world.blocks.units.UnitBlock.class);
classes.put("UnitBuild", mindustry.world.blocks.units.UnitBlock.UnitBuild.class);
classes.put("UnitCargoLoader", mindustry.world.blocks.units.UnitCargoLoader.class);
classes.put("UnitTransportSourceBuild", mindustry.world.blocks.units.UnitCargoLoader.UnitTransportSourceBuild.class);
classes.put("UnitCargoUnloadPoint", mindustry.world.blocks.units.UnitCargoUnloadPoint.class);
classes.put("UnitCargoUnloadPointBuild", mindustry.world.blocks.units.UnitCargoUnloadPoint.UnitCargoUnloadPointBuild.class);
classes.put("UnitFactory", mindustry.world.blocks.units.UnitFactory.class);
classes.put("UnitFactoryBuild", mindustry.world.blocks.units.UnitFactory.UnitFactoryBuild.class);
classes.put("UnitPlan", mindustry.world.blocks.units.UnitFactory.UnitPlan.class);
classes.put("DrawAnimation", mindustry.world.draw.DrawAnimation.class);
classes.put("DrawArcSmelter", mindustry.world.draw.DrawArcSmelter.class);
classes.put("DrawBlock", mindustry.world.draw.DrawBlock.class);
classes.put("DrawBlurSpin", mindustry.world.draw.DrawBlurSpin.class);
classes.put("DrawBubbles", mindustry.world.draw.DrawBubbles.class);
classes.put("DrawCells", mindustry.world.draw.DrawCells.class);
classes.put("DrawCircles", mindustry.world.draw.DrawCircles.class);
classes.put("DrawCrucibleFlame", mindustry.world.draw.DrawCrucibleFlame.class);
classes.put("DrawCultivator", mindustry.world.draw.DrawCultivator.class);
classes.put("DrawGlow", mindustry.world.draw.DrawGlow.class);
classes.put("DrawGlowRegion", mindustry.world.draw.DrawGlowRegion.class);
classes.put("DrawHeatInput", mindustry.world.draw.DrawHeatInput.class);
classes.put("DrawHeatOutput", mindustry.world.draw.DrawHeatOutput.class);
classes.put("DrawHeatRegion", mindustry.world.draw.DrawHeatRegion.class);
classes.put("DrawLiquid", mindustry.world.draw.DrawLiquid.class);
classes.put("DrawLiquidOutputs", mindustry.world.draw.DrawLiquidOutputs.class);
classes.put("DrawLiquidRegion", mindustry.world.draw.DrawLiquidRegion.class);
classes.put("DrawLiquidTile", mindustry.world.draw.DrawLiquidTile.class);
classes.put("DrawMixer", mindustry.world.draw.DrawMixer.class);
classes.put("DrawMulti", mindustry.world.draw.DrawMulti.class);
classes.put("DrawMultiWeave", mindustry.world.draw.DrawMultiWeave.class);
classes.put("DrawPartial", mindustry.world.draw.DrawPartial.class);
classes.put("DrawParticles", mindustry.world.draw.DrawParticles.class);
classes.put("DrawPistons", mindustry.world.draw.DrawPistons.class);
classes.put("DrawPulseShape", mindustry.world.draw.DrawPulseShape.class);
classes.put("DrawPump", mindustry.world.draw.DrawPump.class);
classes.put("DrawRegion", mindustry.world.draw.DrawRegion.class);
classes.put("DrawRotator", mindustry.world.draw.DrawRotator.class);
classes.put("DrawShape", mindustry.world.draw.DrawShape.class);
classes.put("DrawSideRegion", mindustry.world.draw.DrawSideRegion.class);
classes.put("DrawSmelter", mindustry.world.draw.DrawSmelter.class);
classes.put("DrawSpikes", mindustry.world.draw.DrawSpikes.class);
classes.put("DrawTurbines", mindustry.world.draw.DrawTurbines.class);
classes.put("DrawTurret", mindustry.world.draw.DrawTurret.class);
classes.put("DrawWarmupRegion", mindustry.world.draw.DrawWarmupRegion.class);
classes.put("DrawWeave", mindustry.world.draw.DrawWeave.class);
classes.put("Block", mindustry.world.Block.class);
} }
} }

View File

@@ -89,6 +89,19 @@ public class ContentParser{
} }
}); });
put(Color.class, (type, data) -> Color.valueOf(data.asString())); put(Color.class, (type, data) -> Color.valueOf(data.asString()));
put(StatusEffect.class, (type, data) -> {
if(data.isString()){
StatusEffect result = locate(ContentType.status, data.asString());
if(result != null) return result;
result = (StatusEffect)fieldOpt(StatusEffects.class, data);
if(result != null) return result;
throw new IllegalArgumentException("Unknown status effect: '" + data.asString() + "'");
}
StatusEffect effect = new StatusEffect(currentMod.name + "-" + data.getString("name"));
effect.minfo.mod = currentMod;
readFields(effect, data);
return effect;
});
put(BulletType.class, (type, data) -> { put(BulletType.class, (type, data) -> {
if(data.isString()){ if(data.isString()){
return field(Bullets.class, data); return field(Bullets.class, data);
@@ -508,19 +521,6 @@ public class ContentParser{
currentContent = planet; currentContent = planet;
read(() -> readFields(planet, value)); read(() -> readFields(planet, value));
return planet; return planet;
},
ContentType.status, (TypeParser<StatusEffect>)(mod, name, value) -> {
if(value.isString()){
StatusEffect result = locate(ContentType.status, value.asString());
if(result != null) return result;
result = (StatusEffect)fieldOpt(StatusEffects.class, value);
if(result != null) return result;
throw new IllegalArgumentException("Unknown status effect: '" + value.asString() + "'");
}
StatusEffect effect = new StatusEffect(currentMod.name + "-" + value.getString("name"));
currentContent = effect;
readFields(effect, value);
return effect;
} }
); );

View File

@@ -35,7 +35,7 @@ public class TractorBeamTurret extends BaseTurret{
public Sound shootSound = Sounds.tractorbeam; public Sound shootSound = Sounds.tractorbeam;
public float shootSoundVolume = 0.9f; public float shootSoundVolume = 0.9f;
public @Load("block-@size") TextureRegion baseRegion; public @Load(value = "@-base", fallback = "block-@size") TextureRegion baseRegion;
public @Load("@-laser") TextureRegion laser; public @Load("@-laser") TextureRegion laser;
public @Load(value = "@-laser-start", fallback = "@-laser-end") TextureRegion laserStart; public @Load(value = "@-laser-start", fallback = "@-laser-end") TextureRegion laserStart;
public @Load("@-laser-end") TextureRegion laserEnd; public @Load("@-laser-end") TextureRegion laserEnd;

View File

@@ -31,6 +31,7 @@ public class LogicDisplay extends Block{
public int maxSides = 25; public int maxSides = 25;
public int displaySize = 64; public int displaySize = 64;
public float scaleFactor = 1f;
public LogicDisplay(String name){ public LogicDisplay(String name){
super(name); super(name);
@@ -104,7 +105,7 @@ public class LogicDisplay extends Block{
Draw.blend(Blending.disabled); Draw.blend(Blending.disabled);
Draw.draw(Draw.z(), () -> { Draw.draw(Draw.z(), () -> {
if(buffer != null){ if(buffer != null){
Draw.rect(Draw.wrap(buffer.getTexture()), x, y, buffer.getWidth() * Draw.scl, -buffer.getHeight() * Draw.scl); Draw.rect(Draw.wrap(buffer.getTexture()), x, y, buffer.getWidth() * scaleFactor * Draw.scl, -buffer.getHeight() * scaleFactor * Draw.scl);
} }
}); });
Draw.blend(); Draw.blend();

View File

@@ -1,6 +1,5 @@
package mindustry.world.blocks.power; package mindustry.world.blocks.power;
import arc.*;
import arc.func.*; import arc.func.*;
import arc.graphics.*; import arc.graphics.*;
import arc.math.*; import arc.math.*;
@@ -145,10 +144,8 @@ public class ItemLiquidGenerator extends PowerGenerator{
if(randomlyExplode && state.rules.reactorExplosions && Mathf.chance(delta() * 0.06 * Mathf.clamp(explosiveness - 0.5f))){ if(randomlyExplode && state.rules.reactorExplosions && Mathf.chance(delta() * 0.06 * Mathf.clamp(explosiveness - 0.5f))){
//this block is run last so that in the event of a block destruction, no code relies on the block type //this block is run last so that in the event of a block destruction, no code relies on the block type
Core.app.post(() -> { damage(Mathf.random(11f));
damage(Mathf.random(11f)); explodeEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f));
explodeEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f));
});
} }
}else{ }else{
productionEfficiency = 0.0f; productionEfficiency = 0.0f;

View File

@@ -5,7 +5,7 @@
}, },
{ {
"name": "Yeet Hosting", "name": "Yeet Hosting",
"address": ["omegam.mindustry.me:5004", "omegav.mindustry.me:4009", "omegav.mindustry.me:5123"] "address": ["omegam.mindustry.me:5004", "omegav.mindustry.me:25574", "omegav.mindustry.me:25568"]
}, },
{ {
"name": "RCM", "name": "RCM",
@@ -117,7 +117,7 @@
}, },
{ {
"name": "MindustryBR", "name": "MindustryBR",
"address": ["mindustryptbr.ddns.net", "mindustryptbr.myddns.me", "n2.mindustry.me:4002", "n2.mindustry.me:4007"] "address": ["mindustryptbr.ddns.net:25579"]
}, },
{ {
"name": "Conservatory", "name": "Conservatory",

View File

@@ -9,7 +9,7 @@
}, },
{ {
"name": "SMokeOfAnarchy", "name": "SMokeOfAnarchy",
"address": "SMokeOfAnarchy.duckdns.org" "address": "SMokeOfAnarchy.ddns.net"
}, },
{ {
"name": "hexpvp.ml", "name": "hexpvp.ml",
@@ -65,7 +65,7 @@
}, },
{ {
"name": "MindustryBR", "name": "MindustryBR",
"address": ["n2.mindustry.me:4003", "n2.mindustry.me:4005", "n2.mindustry.me:4008", "panel.mindustry.me:2005", "n2.mindustry.me:4010"] "address": ["mindustryptbr.myddns.me"]
}, },
{ {
"name": "LostDustry", "name": "LostDustry",

View File

@@ -16,6 +16,9 @@ public class ModTestBM extends GenericModTest{
@Test @Test
public void begin(){ public void begin(){
//TODO broken as of 136+
if(true) return;
grabMod("https://github.com/sk7725/BetaMindy/releases/download/v0.955/BetaMindy.jar"); grabMod("https://github.com/sk7725/BetaMindy/releases/download/v0.955/BetaMindy.jar");
checkExistence("betamindy"); checkExistence("betamindy");

View File

@@ -17,6 +17,9 @@ public class ModTestExotic extends GenericModTest{
@Test @Test
public void begin(){ public void begin(){
//TODO broken as of 136+
if(true) return;
grabMod("https://github.com/BlueWolf3682/Exotic-Mod/archive/08c861398ac9c3d1292132f9a110e17e06294a90.zip"); grabMod("https://github.com/BlueWolf3682/Exotic-Mod/archive/08c861398ac9c3d1292132f9a110e17e06294a90.zip");
checkExistence("exotic-mod"); checkExistence("exotic-mod");

View File

@@ -16,6 +16,9 @@ public class ModTestHAI extends GenericModTest{
@Test @Test
public void begin(){ public void begin(){
//TODO broken as of 136+
if(true) return;
grabMod("https://github.com/Eschatologue/Heavy-Armaments-Industries/archive/d996e92dcf9a30a6acb7b3bfdfb6522dddc3804c.zip"); grabMod("https://github.com/Eschatologue/Heavy-Armaments-Industries/archive/d996e92dcf9a30a6acb7b3bfdfb6522dddc3804c.zip");
checkExistence("heavy-armaments"); checkExistence("heavy-armaments");