From fb176ef6338badea2f90b85c7daeaf01b99b9b33 Mon Sep 17 00:00:00 2001 From: Doctor17-git <60807716+Doctor17-git@users.noreply.github.com> Date: Sun, 26 Nov 2023 21:07:24 +0300 Subject: [PATCH 01/10] Updated ru_RU.lang updated russian localization --- src/main/resources/assets/hbm/lang/ru_RU.lang | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index a8749d0b1..1a1d85a8d 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1434,10 +1434,29 @@ hadron.noresult_wrong_mode=Неверный режим! hadron.stats=Предыдущие результаты: hadron.stats_coord=Ошибка: %s / %s / %s hadron.stats_momentum=Ускорение: %s + radar.detectMissiles=Обнаружение ракет radar.detectPlayers=Обнаружение игроков radar.smartMode=Умный режим$Выход редстоуна игнорирует восходящие ракеты radar.redMode=Режим красного камня$Включён: Сигнал редстоуна базируется на дальности$Выключен: Сигнал редстоуна базируется на уровне +radar.clearMap=Очистить карту +radar.detectShells=Обнаружение снарядов +radar.showMap=Показать карту +radar.toggleGui=Переключить интерфейс + +radar.target.abm=Антибаллистическая ракета +radar.target.custom10=Ракета 10 размера +radar.target.custom1015=Ракета 10/15 размера +radar.target.custom15=Ракета 15 размера +radar.target.custom1520=Ракета 15/20 размера +radar.target.custom20=Ракета 20 размера +radar.target.doomsday=Ракета судного дня +radar.target.shuttle=Космический шаттл Reliant Robin +radar.target.tier0=Ракета 0-го уровня +radar.target.tier1=Ракета 1-го уровня +radar.target.tier2=Ракета 2-го уровня +radar.target.tier3=Ракета 3-го уровня +radar.target.tier4=Ракета 4-го уровня chem.TEST=Тест chem.FP_HEAVYOIL=Переработка тяжелой нефти @@ -2585,6 +2604,8 @@ item.ingot_gh336.name=Слиток гиорсия-336 item.ingot_gh336.desc=Коллега Сиборгиума. item.niter.name=Селитра +item.nitra.name=Нитра +item.nitra_small.name=Кучка нитры item.ingot_copper.name=Слиток промышленной меди item.ingot_red_copper.name=Слиток красной меди item.ingot_tungsten.name=Вольфрамовый слиток @@ -2696,6 +2717,7 @@ item.plate_paa.name=Пластина сплава PaA item.ingot_dura_steel.name=Высокоскоростная сталь item.ingot_polymer.name=Полимер item.ingot_rubber.name=Резина +item.ingot_biorubber.name=Брусок латекса item.ingot_polonium.name=Слиток полония-210 item.bolt_dura_steel.name=Высокоскоростной стальной стержень item.pipes_steel.name=Стальные трубы @@ -3139,7 +3161,7 @@ item.ore.malachite=Малахитовая item.ore.niobium=Ниобиевая item.ore.titanium=Титановая item.ore.tungsten=Вольфрамовая -item.ore.thorium=Ториевая +item.ore.thorium232=Ториевая item.ore.uranium=Урановая item.ore_bedrock.name=%s бедроковая руда item.ore_centrifuged.name=Центрифугированная %s бедроковая руда @@ -4598,6 +4620,7 @@ item.ball_dynamite.name=Динамит item.ball_tnt.name=ТНТ item.ball_tatb.name=TATB item.ball_fireclay.name=Шамотная глина +item.ball_resin.name=Латекс item.plate_kevlar.name=Кевларо-керамический состав item.weaponized_starblaster_cell.name=§cСмонтированная энергетическая ячейка Звездного бластера§r @@ -4888,7 +4911,7 @@ item.designator_arty_range.name=Артиллерийский целеуказа item.missile_assembly.name=Сборка малой ракеты item.assembly_nuke.name=Оболочка ядерного минизаряда item.missile_generic.name=Фугасная ракета -item.missile_anti_ballistic.name=Антибаллистическая ракета (WIP) +item.missile_anti_ballistic.name=Антибаллистическая ракета item.missile_incendiary.name=Зажигательная ракета item.missile_cluster.name=Кластерная ракета item.missile_buster.name=Противобункерная ракета From f8e9cff64b1ab64a685a0612eba6a6e3027b5829 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 2 Dec 2023 20:44:34 +0100 Subject: [PATCH 02/10] tweaks, exposure chamber recipes --- changelog | 7 +- .../container/ContainerMachineExcavator.java | 4 +- .../ContainerMachineExposureChamber.java | 86 ++++++++++++++++++ .../gui/GUIMachineExposureChamber.java | 47 ++++++++++ .../inventory/recipes/AssemblerRecipes.java | 16 ++-- .../recipes/ExposureChamberRecipes.java | 83 +++++++++++++++++ .../recipes/loader/SerializableRecipe.java | 1 + .../java/com/hbm/main/CraftingManager.java | 4 - .../tileentity/RenderExposureChamber.java | 21 +++-- .../TileEntityMachineExposureChamber.java | 74 ++++++++++++++- .../gui/processing/gui_exposure_chamber.png | Bin 3129 -> 3134 bytes .../models/doors/qe_containment_decal.png | Bin 314 -> 7096 bytes 12 files changed, 319 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineExposureChamber.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineExposureChamber.java create mode 100644 src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java diff --git a/changelog b/changelog index 596d87512..c9bd68389 100644 --- a/changelog +++ b/changelog @@ -7,6 +7,9 @@ * A much less jankier alternative to the vanilla boat. Rotations are silky smooth and done via the strafe keys instead of based on the player's orientation * Won't break from ramming into blocks * Faster than a regular boat, but will decelerate quicker when there's nobody sitting in it, preventing the boat from drifting off too far when empty +* Exposure chamber + * Now performs the particle transmutation recipes that were previously done in the crafting table + * Stylish as hell ## Changed * Reduced the blast resistance of the large doors from absurdly high to still very but not quite as high @@ -20,6 +23,7 @@ * Non-custom missiles have been slightly buffed * Explosions are now slightly larger and they use the new cross-detection entity damage code which still affects entities behind small hills that would otherwise be shielded * Explosions now have a 2x larger entity damage radius +* Updated the digiminer recipe for mekanism cocmpat ## Fixed * Fixed ancient bug where custom missiles launched using the launch table would not use the accuracy calculation and always be pin-point accurate @@ -28,4 +32,5 @@ * Fixed the ballistic gauntlet spawning a client-side ghost bullet that doesn't move or despawn * Fixed bug where different custom machine cores would merge in a stack when picked up, turning them into the same type * Fixed radar screen blips being visible through the back of the model -* Fixed desh crate's last half of slots preventing radiation entirely \ No newline at end of file +* Fixed desh crate's last half of slots preventing radiation entirely +* Fixed large mining drill shift-clicking \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineExcavator.java b/src/main/java/com/hbm/inventory/container/ContainerMachineExcavator.java index a7caab502..c55fd5400 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineExcavator.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineExcavator.java @@ -54,8 +54,8 @@ public class ContainerMachineExcavator extends Container { ItemStack var5 = var4.getStack(); var3 = var5.copy(); - if(par2 <= 4) { - if(!this.mergeItemStack(var5, 5, this.inventorySlots.size(), true)) { + if(par2 <= 13) { + if(!this.mergeItemStack(var5, 14, this.inventorySlots.size(), true)) { return null; } } else { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineExposureChamber.java b/src/main/java/com/hbm/inventory/container/ContainerMachineExposureChamber.java new file mode 100644 index 000000000..b9e839468 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineExposureChamber.java @@ -0,0 +1,86 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotTakeOnly; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.tileentity.machine.TileEntityMachineExposureChamber; + +import api.hbm.energy.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineExposureChamber extends Container { + + private TileEntityMachineExposureChamber chamber; + + public ContainerMachineExposureChamber(InventoryPlayer invPlayer, TileEntityMachineExposureChamber tedf) { + this.chamber = tedf; + + this.addSlotToContainer(new Slot(tedf, 0, 8, 18)); + this.addSlotToContainer(new SlotTakeOnly(tedf, 2, 8, 54)); + this.addSlotToContainer(new Slot(tedf, 3, 80, 36)); + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 4, 116, 36)); + this.addSlotToContainer(new Slot(tedf, 5, 152, 54)); + this.addSlotToContainer(new Slot(tedf, 6, 44, 54)); + this.addSlotToContainer(new Slot(tedf, 7, 62, 54)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 104 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 162)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(par2 <= 6) { + if(!this.mergeItemStack(var5, 7, this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(var3.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(var5, 5, 7, false)) { + return null; + } + } else if(var3.getItem() instanceof IBatteryItem || var3.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(var5, 4, 5, false)) { + return null; + } + } else { + if(!this.mergeItemStack(var5, 0, 2, false)) { + return null; + } + } + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return chamber.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineExposureChamber.java b/src/main/java/com/hbm/inventory/gui/GUIMachineExposureChamber.java new file mode 100644 index 000000000..351a3642d --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineExposureChamber.java @@ -0,0 +1,47 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineExposureChamber; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineExposureChamber; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineExposureChamber extends GuiInfoContainer { + + public static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_exposure_chamber.png"); + private TileEntityMachineExposureChamber chamber; + + public GUIMachineExposureChamber(InventoryPlayer invPlayer, TileEntityMachineExposureChamber chamber) { + super(new ContainerMachineExposureChamber(invPlayer, chamber)); + this.chamber = chamber; + + this.xSize = 176; + this.ySize = 186; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 52, chamber.power, chamber.maxPower); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.chamber.hasCustomInventoryName() ? this.chamber.getInventoryName() : I18n.format(this.chamber.getInventoryName()); + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 82e17f216..fb559fa5d 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -1230,17 +1230,17 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(mb, 1, 4), new AStack[] { new OreDictStack(DURA.ingot(), 16), - new OreDictStack(DESH.ingot(), 8), - new OreDictStack(STEEL.plate(), 48), - new OreDictStack(CU.plate(), 24), + new OreDictStack(DESH.ingot(), 16), + new OreDictStack(STEEL.plateWelded(), 32), + new OreDictStack(CU.plateWelded(), 24), new ComparableStack(ModItems.pipes_steel, 8), - new ComparableStack(ModItems.circuit_gold, 8), - new ComparableStack(ModItems.wire_advanced_alloy, 24), + new OreDictStack(KEY_CIRCUIT_BISMUTH, 4), + new ComparableStack(ModItems.wire_dense, 32, Mats.MAT_ALLOY.id), new ComparableStack(ModBlocks.fusion_conductor, 12), - new ComparableStack(ModBlocks.machine_lithium_battery, 3), - new ComparableStack(ModItems.crystal_redstone, 12), + new ComparableStack(ModBlocks.capacitor_tantalium, 53), + new ComparableStack(ModItems.crystal_redstone, 16), new ComparableStack(ModItems.crystal_diamond, 8), - new ComparableStack(ModItems.motor_desh, 16) + new ComparableStack(ModItems.motor_bismuth, 4) }, 15 * 60 * 20); } } diff --git a/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java b/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java new file mode 100644 index 000000000..53e69569f --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java @@ -0,0 +1,83 @@ +package com.hbm.inventory.recipes; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; +import static com.hbm.inventory.OreDictManager.*; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.items.ModItems; + +import net.minecraft.item.ItemStack; + +public class ExposureChamberRecipes extends SerializableRecipe { + + public static List recipes = new ArrayList(); + + @Override + public void registerDefaults() { + recipes.add(new ExposureChamberRecipe(new ComparableStack(ModItems.particle_higgs), new OreDictStack(U.ingot()), new ItemStack(ModItems.ingot_schraranium))); + recipes.add(new ExposureChamberRecipe(new ComparableStack(ModItems.particle_higgs), new OreDictStack(U238.ingot()), new ItemStack(ModItems.ingot_schrabidium))); + recipes.add(new ExposureChamberRecipe(new ComparableStack(ModItems.particle_dark), new OreDictStack(PU.ingot()), new ItemStack(ModItems.ingot_euphemium))); + recipes.add(new ExposureChamberRecipe(new ComparableStack(ModItems.particle_sparkticle), new OreDictStack(SBD.ingot()), new ItemStack(ModItems.ingot_dineutronium))); + } + + @Override + public String getFileName() { + return "hbmExposureChamber.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } + + @Override + public void readRecipe(JsonElement recipe) { + + JsonObject obj = (JsonObject) recipe; + + AStack particle = this.readAStack(obj.get("particle").getAsJsonArray()); + AStack ingredient = this.readAStack(obj.get("ingredient").getAsJsonArray()); + ItemStack output = this.readItemStack(obj.get("output").getAsJsonArray()); + + ExposureChamberRecipe rec = new ExposureChamberRecipe(particle, ingredient, output); + recipes.add(rec); + } + + @Override + public void writeRecipe(Object o, JsonWriter writer) throws IOException { + ExposureChamberRecipe recipe = (ExposureChamberRecipe) o; + + writer.name("particle"); + this.writeAStack(recipe.particle, writer); + writer.name("ingredient"); + this.writeAStack(recipe.ingredient, writer); + writer.name("output"); + this.writeItemStack(recipe.output, writer); + } + + public static class ExposureChamberRecipe { + + public AStack particle; + public AStack ingredient; + public ItemStack output; + + public ExposureChamberRecipe(AStack particle, AStack ingredient, ItemStack output) { + this.particle = particle; + this.ingredient = ingredient; + this.output = output; + } + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 8149dfaba..f54138b0f 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -65,6 +65,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(new ElectrolyserFluidRecipes()); recipeHandlers.add(new ElectrolyserMetalRecipes()); recipeHandlers.add(new ArcWelderRecipes()); + recipeHandlers.add(new ExposureChamberRecipes()); recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 5e0cc59e9..386706b30 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -862,10 +862,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.hadron_cooler, 1, 0), new Object[] { "PCP", "CHC", "PCP", 'P', ANY_RESISTANTALLOY.plateCast(), 'C', ModItems.circuit_gold, 'H', Fluids.HELIUM4.getDict(16_000) }); addRecipeAuto(new ItemStack(ModBlocks.hadron_cooler, 1, 1), new Object[] { "PCP", "CHC", "PCP", 'P', GOLD.plateCast(), 'C', ModItems.motor_bismuth, 'H', new ItemStack(ModBlocks.hadron_cooler, 1, 0) }); - addRecipeAuto(new ItemStack(ModItems.ingot_schrabidium, 8), new Object[] { "UUU", "UPU", "UUU", 'U', U.ingot(), 'P', new ItemStack(ModItems.particle_higgs).setStackDisplayName("Higgs Boson (Temporary Recipe)") }); - addRecipeAuto(new ItemStack(ModItems.ingot_euphemium, 8), new Object[] { "UUU", "UPU", "UUU", 'U', PU.ingot(), 'P', new ItemStack(ModItems.particle_dark).setStackDisplayName("Dark Matter (Temporary Recipe)") }); - addRecipeAuto(new ItemStack(ModItems.ingot_dineutronium, 8), new Object[] { "UUU", "UPU", "UUU", 'U', SBD.ingot(), 'P', new ItemStack(ModItems.particle_sparkticle).setStackDisplayName("Sparkticle (Temporary Recipe)") }); - addRecipeAuto(new ItemStack(ModBlocks.fireworks, 1), new Object[] { "PPP", "PPP", "WIW", 'P', Items.paper, 'W', KEY_PLANKS, 'I', IRON.ingot() }); addRecipeAuto(new ItemStack(ModItems.safety_fuse, 8), new Object[] { "SSS", "SGS", "SSS", 'S', Items.string, 'G', Items.gunpowder }); diff --git a/src/main/java/com/hbm/render/tileentity/RenderExposureChamber.java b/src/main/java/com/hbm/render/tileentity/RenderExposureChamber.java index 539cb72a1..7fc7528da 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderExposureChamber.java +++ b/src/main/java/com/hbm/render/tileentity/RenderExposureChamber.java @@ -4,6 +4,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.TileEntityMachineExposureChamber; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; @@ -11,7 +12,7 @@ import net.minecraft.tileentity.TileEntity; public class RenderExposureChamber extends TileEntitySpecialRenderer { @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y, z + 0.5D); @@ -25,18 +26,24 @@ public class RenderExposureChamber extends TileEntitySpecialRenderer { case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; } + TileEntityMachineExposureChamber chamber = (TileEntityMachineExposureChamber) tileEntity; + GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.exposure_chamber_tex); ResourceManager.exposure_chamber.renderPart("Chamber"); - GL11.glPushMatrix(); - GL11.glRotated((tileEntity.getWorldObj().getTotalWorldTime() % 360D + f) * 5, 0, 1, 0); - GL11.glTranslated(0, Math.sin((tileEntity.getWorldObj().getTotalWorldTime() % (Math.PI * 16D) + f) * 0.125) * 0.0625, 0); - ResourceManager.exposure_chamber.renderPart("Core"); - GL11.glPopMatrix(); + double rotation = chamber.prevRotation + (chamber.rotation - chamber.prevRotation) * interp; + + if(chamber.isOn) { + GL11.glPushMatrix(); + GL11.glRotated(rotation / 2D, 0, 1, 0); + GL11.glTranslated(0, Math.sin((tileEntity.getWorldObj().getTotalWorldTime() % (Math.PI * 16D) + interp) * 0.125) * 0.0625, 0); + ResourceManager.exposure_chamber.renderPart("Core"); + GL11.glPopMatrix(); + } GL11.glPushMatrix(); - GL11.glRotated((tileEntity.getWorldObj().getTotalWorldTime() % 360D + f) * 10, 0, 1, 0); + GL11.glRotated(rotation, 0, 1, 0); ResourceManager.exposure_chamber.renderPart("Magnets"); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java index dbe3dc5fa..d45fbe8cd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java @@ -1,15 +1,42 @@ package com.hbm.tileentity.machine; +import com.hbm.inventory.container.ContainerMachineExposureChamber; +import com.hbm.inventory.gui.GUIMachineExposureChamber; +import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; -public class TileEntityMachineExposureChamber extends TileEntityMachineBase { +public class TileEntityMachineExposureChamber extends TileEntityMachineBase implements IGUIProvider { + + public long power; + public static final long maxPower = 1_000_000; + + public int progress; + public static final int processTimeBase = 200; + public int processTime = processTimeBase; + public boolean isOn = false; + public float rotation; + public float prevRotation; public TileEntityMachineExposureChamber() { - super(7); + /* + * 0: Particle + * 1: Particle internal + * 2: Particle container + * 3: Ingredient + * 4: Output + * 5: Battery + * 6-7: Upgrades + */ + super(8); } @Override @@ -20,6 +47,38 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase { @Override public void updateEntity() { + if(!worldObj.isRemote) { + + this.isOn = false; + this.networkPackNT(50); + } else { + + this.prevRotation = this.rotation; + + if(this.isOn) { + + this.rotation += 10D; + + if(this.rotation >= 720D) { + this.rotation -= 720D; + this.prevRotation -= 720D; + } + } + } + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeBoolean(this.isOn); + buf.writeInt(this.progress); + buf.writeInt(this.processTime); + } + + @Override + public void deserialize(ByteBuf buf) { + this.isOn = buf.readBoolean(); + this.progress = buf.readInt(); + this.processTime = buf.readInt(); } AxisAlignedBB bb = null; @@ -46,4 +105,15 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase { public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerMachineExposureChamber(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIMachineExposureChamber(player.inventory, this); + } } diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_exposure_chamber.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_exposure_chamber.png index f9e65f885b185b69ccee70f84c46e4b082cb4f5d..24701a27f3e6e1f1ae3ce0f18b5e29ede880aab9 100644 GIT binary patch delta 1530 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 D492{= delta 301 zcmdmCzKbcYGr-TCmrII^fq{Y7)59eQNE?7K2Q!dNxWl;>NHG=%xjQkeJ16rJ$YDu$ z^mSxl*x1kgCy^D%XAAHNas7V-$YS`RrZyW$F_i@Q1^;Jwy4}EQqM~>`!+K8_#}E(i zw|xis4lD2+eel1&inBte(f#TwTi>s&1&>xOjeEj-?nAp{q@BU+KRRsT5k6HvLs%-? zFJ~Uk+@m4L(t3l1CsaUm`N1;|9Ky_Qd~Pe#nOYhR1QZhGct}=!28b50m`}BX0H*13Y>iXZ(jfa From 1157e691d733ccec8daadc8ff5b15aa20fc883ac Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 3 Dec 2023 20:23:51 +0100 Subject: [PATCH 03/10] more exposure chamber crap --- changelog | 3 +- .../ContainerMachineExposureChamber.java | 2 +- .../gui/GUIMachineExposureChamber.java | 17 +++- .../recipes/ExposureChamberRecipes.java | 5 + .../java/com/hbm/tileentity/DoorDecl.java | 5 +- .../TileEntityMachineExposureChamber.java | 95 +++++++++++++++++++ .../machine/TileEntityMachinePumpBase.java | 38 +++++++- .../TileEntityMachinePumpElectric.java | 4 +- .../machine/TileEntityMachinePumpSteam.java | 4 +- 9 files changed, 159 insertions(+), 14 deletions(-) diff --git a/changelog b/changelog index c9bd68389..1abab46d5 100644 --- a/changelog +++ b/changelog @@ -23,7 +23,8 @@ * Non-custom missiles have been slightly buffed * Explosions are now slightly larger and they use the new cross-detection entity damage code which still affects entities behind small hills that would otherwise be shielded * Explosions now have a 2x larger entity damage radius -* Updated the digiminer recipe for mekanism cocmpat +* Updated the digiminer recipe for mekanism compat +* Added config options to the ground water pumps ## Fixed * Fixed ancient bug where custom missiles launched using the launch table would not use the accuracy calculation and always be pin-point accurate diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineExposureChamber.java b/src/main/java/com/hbm/inventory/container/ContainerMachineExposureChamber.java index b9e839468..c4dd07df6 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineExposureChamber.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineExposureChamber.java @@ -63,7 +63,7 @@ public class ContainerMachineExposureChamber extends Container { return null; } } else { - if(!this.mergeItemStack(var5, 0, 2, false)) { + if(!this.mergeItemStack(var5, 0, 3, false)) { return null; } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineExposureChamber.java b/src/main/java/com/hbm/inventory/gui/GUIMachineExposureChamber.java index 351a3642d..3f5760cce 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineExposureChamber.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineExposureChamber.java @@ -28,7 +28,9 @@ public class GUIMachineExposureChamber extends GuiInfoContainer { public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 52, chamber.power, chamber.maxPower); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 34, chamber.power, chamber.maxPower); + + drawCustomInfoStat(mouseX, mouseY, guiLeft + 26, guiTop + 36, 9, 16, mouseX, mouseY, chamber.savedParticles + " / " + chamber.maxParticles); } @Override @@ -43,5 +45,18 @@ public class GUIMachineExposureChamber extends GuiInfoContainer { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int p = chamber.progress * 42 / (chamber.processTime + 1); + drawTexturedModalRect(guiLeft + 36, guiTop + 39, 192, 0, p, 10); + + int c = chamber.savedParticles * 16 / chamber.maxParticles; + drawTexturedModalRect(guiLeft + 26, guiTop + 52 - c, 192, 26 - c, 9, c); + + int e = (int) (chamber.power * 34 / chamber.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 52 - e, 176, 34 - e, 16, e); + + if(chamber.consumption <= chamber.power) { + drawTexturedModalRect(guiLeft + 156, guiTop + 4, 176, 34, 9, 12); + } } } diff --git a/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java b/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java index 53e69569f..d7e3ca925 100644 --- a/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java @@ -27,6 +27,11 @@ public class ExposureChamberRecipes extends SerializableRecipe { recipes.add(new ExposureChamberRecipe(new ComparableStack(ModItems.particle_dark), new OreDictStack(PU.ingot()), new ItemStack(ModItems.ingot_euphemium))); recipes.add(new ExposureChamberRecipe(new ComparableStack(ModItems.particle_sparkticle), new OreDictStack(SBD.ingot()), new ItemStack(ModItems.ingot_dineutronium))); } + + public static ExposureChamberRecipe getRecipe(ItemStack particle, ItemStack input) { + for(ExposureChamberRecipe recipe : recipes) if(recipe.particle.matchesRecipe(particle, true) && recipe.ingredient.matchesRecipe(input, true)) return recipe; + return null; + } @Override public String getFileName() { diff --git a/src/main/java/com/hbm/tileentity/DoorDecl.java b/src/main/java/com/hbm/tileentity/DoorDecl.java index 4bada0b3a..5f81ef8f5 100644 --- a/src/main/java/com/hbm/tileentity/DoorDecl.java +++ b/src/main/java/com/hbm/tileentity/DoorDecl.java @@ -328,9 +328,8 @@ public abstract class DoorDecl { @Override public AxisAlignedBB getBlockBound(int x, int y, int z, boolean open) { if(open) { - if(y == 0) - return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 0.125, 1); - return super.getBlockBound(x, y, z, open); + if(y == 0) return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 0, 1); + return AxisAlignedBB.getBoundingBox(0, 0.9375, 1 - 0.25, 1, 1, 1); } else { return AxisAlignedBB.getBoundingBox(0, 0, 1 - 0.25, 1, 1, 1); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java index d45fbe8cd..7f11c77ed 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java @@ -1,7 +1,12 @@ package com.hbm.tileentity.machine; +import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMachineExposureChamber; import com.hbm.inventory.gui.GUIMachineExposureChamber; +import com.hbm.inventory.recipes.ExposureChamberRecipes; +import com.hbm.inventory.recipes.ExposureChamberRecipes.ExposureChamberRecipe; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -11,6 +16,7 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; @@ -22,6 +28,10 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl public int progress; public static final int processTimeBase = 200; public int processTime = processTimeBase; + public static final int consumptionBase = 10_000; + public int consumption = consumptionBase; + public int savedParticles; + public static final int maxParticles = 8; public boolean isOn = false; public float rotation; public float prevRotation; @@ -50,6 +60,81 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl if(!worldObj.isRemote) { this.isOn = false; + this.power = Library.chargeTEFromItems(slots, 5, power, maxPower); + + UpgradeManager.eval(slots, 6, 7); + int speedLevel = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); + int powerLevel = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); + int overdriveLevel = Math.min(UpgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); + + this.consumption = this.consumptionBase; + + this.processTime = this.processTimeBase - this.processTimeBase / 4 * speedLevel; + this.consumption *= (speedLevel / 2 + 1); + this.processTime *= (powerLevel / 2 + 1); + this.consumption /= (powerLevel + 1); + this.processTime /= (overdriveLevel + 1); + this.consumption *= (overdriveLevel * 2 + 1); + + if(slots[1] == null && slots[0] != null && slots[3] != null && this.savedParticles <= 0) { + ExposureChamberRecipe recipe = this.getRecipe(slots[0], slots[3]); + + if(recipe != null) { + + ItemStack container = slots[0].getItem().getContainerItem(slots[0]); + + boolean canStore = false; + + if(container == null) { + canStore = true; + } else if(slots[2] == null) { + slots[2] = container.copy(); + canStore = true; + } else if(slots[2].getItem() == container.getItem() && slots[2].getItemDamage() == container.getItemDamage() && slots[2].stackSize < slots[2].getMaxStackSize()) { + slots[2].stackSize++; + canStore = true; + } + + if(canStore) { + slots[1] = slots[0].copy(); + slots[1].stackSize = 0; + this.decrStackSize(0, 1); + this.savedParticles = this.maxParticles; + } + } + } + + if(slots[1] != null && this.savedParticles > 0 && this.power >= this.consumption) { + ExposureChamberRecipe recipe = this.getRecipe(slots[1], slots[3]); + + if(recipe != null && (slots[4] == null || (slots[4].getItem() == recipe.output.getItem() && slots[4].getItemDamage() == recipe.output.getItemDamage() && slots[4].stackSize + recipe.output.stackSize <= slots[4].getMaxStackSize()))) { + this.progress++; + this.power -= this.consumption; + this.isOn = true; + + if(this.progress >= this.processTime) { + this.progress = 0; + this.savedParticles--; + this.decrStackSize(3, 1); + + if(slots[4] == null) { + slots[4] = recipe.output.copy(); + } else { + slots[4].stackSize += recipe.output.stackSize; + } + } + + } else { + this.progress = 0; + } + } else { + this.progress = 0; + } + + if(this.savedParticles <= 0) { + slots[1] = null; + } + this.networkPackNT(50); } else { @@ -66,12 +151,19 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl } } } + + public ExposureChamberRecipe getRecipe(ItemStack particle, ItemStack ingredient) { + return ExposureChamberRecipes.getRecipe(particle, ingredient); + } @Override public void serialize(ByteBuf buf) { buf.writeBoolean(this.isOn); buf.writeInt(this.progress); buf.writeInt(this.processTime); + buf.writeInt(this.consumption); + buf.writeLong(this.power); + buf.writeByte((byte) this.savedParticles); } @Override @@ -79,6 +171,9 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl this.isOn = buf.readBoolean(); this.progress = buf.readInt(); this.processTime = buf.readInt(); + this.consumption = buf.readInt(); + this.power = buf.readLong(); + this.savedParticles = buf.readByte(); } AxisAlignedBB bb = null; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java index 2b91757d8..653064658 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java @@ -1,11 +1,15 @@ package com.hbm.tileentity.machine; +import java.io.IOException; import java.util.HashSet; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -18,8 +22,8 @@ import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver { - +public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine { + public static final HashSet validBlocks = new HashSet(); static { @@ -41,6 +45,32 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp public float lastRotor; public boolean onGround = false; public int groundCheckDelay = 0; + + public static int groundHeight = 70; + public static int groundDepth = 4; + public static int steamSpeed = 1_000; + public static int electricSpeed = 10_000; + + @Override + public String getConfigName() { + return "waterpump"; + } + + @Override + public void readIfPresent(JsonObject obj) { + groundHeight = IConfigurableMachine.grab(obj, "I:groundHeight", groundHeight); + groundDepth = IConfigurableMachine.grab(obj, "I:groundDepth", groundDepth); + steamSpeed = IConfigurableMachine.grab(obj, "I:steamSpeed", steamSpeed); + electricSpeed = IConfigurableMachine.grab(obj, "I:electricSpeed", electricSpeed); + } + + @Override + public void writeConfig(JsonWriter writer) throws IOException { + writer.name("I:groundHeight").value(groundHeight); + writer.name("I:groundDepth").value(groundDepth); + writer.name("I:steamSpeed").value(steamSpeed); + writer.name("I:electricSpeed").value(electricSpeed); + } public void updateEntity() { @@ -57,7 +87,7 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp } this.isOn = false; - if(this.canOperate() && yCoord <= 70 && onGround) { + if(this.canOperate() && yCoord <= groundHeight && onGround) { this.isOn = true; this.operate(); } @@ -88,7 +118,7 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp int invalidBlocks = 0; for(int x = -1; x <= 1; x++) { - for(int y = -1; y >= -4; y--) { + for(int y = -1; y >= -groundDepth; y--) { for(int z = -1; z <= 1; z++) { Block b = worldObj.getBlock(xCoord + x, yCoord + y, zCoord + z); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java index 2551c42a9..25b22372d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpElectric.java @@ -14,7 +14,7 @@ public class TileEntityMachinePumpElectric extends TileEntityMachinePumpBase imp public TileEntityMachinePumpElectric() { super(); - water = new FluidTank(Fluids.WATER, 1_000_000); + water = new FluidTank(Fluids.WATER, electricSpeed * 100); } public void updateEntity() { @@ -49,7 +49,7 @@ public class TileEntityMachinePumpElectric extends TileEntityMachinePumpBase imp @Override protected void operate() { this.power -= 1_000; - water.setFill(Math.min(water.getFill() + 10_000, water.getMaxFill())); + water.setFill(Math.min(water.getFill() + electricSpeed, water.getMaxFill())); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java index 6644f3e83..d935cfbf4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpSteam.java @@ -13,7 +13,7 @@ public class TileEntityMachinePumpSteam extends TileEntityMachinePumpBase { public TileEntityMachinePumpSteam() { super(); - water = new FluidTank(Fluids.WATER, 100_000); + water = new FluidTank(Fluids.WATER, steamSpeed * 100); steam = new FluidTank(Fluids.STEAM, 1_000); lps = new FluidTank(Fluids.SPENTSTEAM, 10); } @@ -71,6 +71,6 @@ public class TileEntityMachinePumpSteam extends TileEntityMachinePumpBase { protected void operate() { steam.setFill(steam.getFill() - 100); lps.setFill(lps.getFill() + 1); - water.setFill(Math.min(water.getFill() + 1000, water.getMaxFill())); + water.setFill(Math.min(water.getFill() + steamSpeed, water.getMaxFill())); } } From 976e0dba37eaa251a4dd8078cbce0738d605f7ff Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 5 Dec 2023 16:39:03 +0100 Subject: [PATCH 04/10] decoy missile, recipe stuff --- changelog | 4 + .../java/com/hbm/crafting/WeaponRecipes.java | 2 +- .../java/com/hbm/entity/EntityMappings.java | 1 + .../entity/grenade/EntityGrenadeIFNull.java | 75 +++++++++--------- .../entity/missile/EntityMissileTier1.java | 9 +++ .../inventory/recipes/ArcWelderRecipes.java | 14 ++++ .../inventory/recipes/AssemblerRecipes.java | 24 ------ src/main/java/com/hbm/items/ModItems.java | 3 + src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 1 + .../entity/rocket/RenderMissileGeneric.java | 21 ++--- .../tileentity/RenderLaunchPadTier1.java | 7 ++ .../tileentity/bomb/TileEntityLaunchPad.java | 1 + src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../hbm/textures/items/fuel_tank_large.png | Bin 269 -> 278 bytes .../textures/items/fuel_tank_large_alt.png | Bin 203 -> 0 bytes .../hbm/textures/items/fuel_tank_medium.png | Bin 362 -> 384 bytes .../textures/items/fuel_tank_medium_alt.png | Bin 278 -> 0 bytes .../hbm/textures/items/fuel_tank_small.png | Bin 292 -> 306 bytes .../textures/items/fuel_tank_small_alt.png | Bin 291 -> 0 bytes .../hbm/textures/items/fuelcell_arsenic.png | Bin 293 -> 0 bytes .../hbm/textures/items/fuelcell_base.png | Bin 258 -> 0 bytes .../hbm/textures/items/fuelcell_euphemium.png | Bin 300 -> 0 bytes .../hbm/textures/items/fuelcell_neptunium.png | Bin 287 -> 0 bytes .../hbm/textures/items/fuelcell_plutonium.png | Bin 280 -> 0 bytes .../hbm/textures/items/fuelcell_selenium.png | Bin 294 -> 0 bytes .../hbm/textures/items/fuelcell_u235.png | Bin 280 -> 0 bytes .../hbm/textures/items/fuelcell_u238m2.png | Bin 293 -> 0 bytes .../hbm/textures/items/missile_decoy.png | Bin 0 -> 364 bytes .../hbm/textures/items/thruster_large.png | Bin 461 -> 465 bytes .../hbm/textures/items/thruster_large_alt.png | Bin 288 -> 0 bytes .../hbm/textures/items/thruster_medium.png | Bin 399 -> 430 bytes .../textures/items/thruster_medium_alt.png | Bin 272 -> 0 bytes .../hbm/textures/items/thruster_small.png | Bin 326 -> 469 bytes .../hbm/textures/items/thruster_small_alt.png | Bin 263 -> 0 bytes .../hbm/textures/models/missile_v2_decoy.png | Bin 0 -> 915 bytes 37 files changed, 93 insertions(+), 72 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/items/fuel_tank_large_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuel_tank_medium_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuel_tank_small_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuelcell_arsenic.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuelcell_base.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuelcell_euphemium.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuelcell_neptunium.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuelcell_plutonium.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuelcell_selenium.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuelcell_u235.png delete mode 100644 src/main/resources/assets/hbm/textures/items/fuelcell_u238m2.png create mode 100644 src/main/resources/assets/hbm/textures/items/missile_decoy.png delete mode 100644 src/main/resources/assets/hbm/textures/items/thruster_large_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/items/thruster_medium_alt.png delete mode 100644 src/main/resources/assets/hbm/textures/items/thruster_small_alt.png create mode 100644 src/main/resources/assets/hbm/textures/models/missile_v2_decoy.png diff --git a/changelog b/changelog index 1abab46d5..ee9dd2d76 100644 --- a/changelog +++ b/changelog @@ -10,6 +10,8 @@ * Exposure chamber * Now performs the particle transmutation recipes that were previously done in the crafting table * Stylish as hell +* Decoy missile + * A cheap tier 1 missile that shows up on radar screens as tier 4 (eg. nuclear) missiles ## Changed * Reduced the blast resistance of the large doors from absurdly high to still very but not quite as high @@ -25,6 +27,8 @@ * Explosions now have a 2x larger entity damage radius * Updated the digiminer recipe for mekanism compat * Added config options to the ground water pumps +* Missile parts such as non-custom thrusters and fuselages are now made in the arc welder, recipe ingredients have been adjusted as well +* Null grenades now have a slightly larger radius, should no longer wipe playerdata and require UNDEFINED to make ## Fixed * Fixed ancient bug where custom missiles launched using the launch table would not use the accuracy calculation and always be pin-point accurate diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index aa58d5393..0ed6e8a9c 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -394,7 +394,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_if_mystery, 1), new Object[] { "A", "G", "A", 'G', ModItems.grenade_if_generic, 'A', ModItems.powder_magic }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_if_spark, 1), new Object[] { " A ", "AGA", " A ", 'G', ModItems.grenade_if_generic, 'A', ModItems.powder_spark_mix }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_if_hopwire, 1), new Object[] { " A ", "AGA", " A ", 'G', ModItems.grenade_if_generic, 'A', ModItems.powder_power }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_if_null, 1), new Object[] { "BAB", "AGA", "BAB", 'G', ModItems.grenade_if_generic, 'A', Blocks.obsidian, 'B', BIGMT.ingot() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.grenade_if_null, 1), new Object[] { "BAB", "AGA", "BAB", 'G', ModItems.grenade_if_generic, 'A', ModItems.undefined, 'B', BIGMT.ingot() }); //Mines CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.mine_ap, 4), new Object[] { "C", "P", "T", 'C', ModItems.circuit_targeting_tier2, 'P', IRON.plate(), 'T', ANY_PLASTICEXPLOSIVE.ingot() }); diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 18d585624..16a452ba5 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -58,6 +58,7 @@ public class EntityMappings { addEntity(EntityGrenadeNuke.class, "entity_grenade_nuke", 500); addEntity(EntitySchrab.class, "entity_schrabnel", 500); addEntity(EntityMissileGeneric.class, "entity_missile_generic", 1000); + addEntity(EntityMissileDecoy.class, "entity_missile_decoy", 1000); addEntity(EntityMissileStrong.class, "entity_missile_strong", 1000); addEntity(EntityMissileNuclear.class, "entity_missile_nuclear", 1000); addEntity(EntityMissileCluster.class, "entity_missile_cluster", 1000); diff --git a/src/main/java/com/hbm/entity/grenade/EntityGrenadeIFNull.java b/src/main/java/com/hbm/entity/grenade/EntityGrenadeIFNull.java index 601381cee..98da6e84c 100644 --- a/src/main/java/com/hbm/entity/grenade/EntityGrenadeIFNull.java +++ b/src/main/java/com/hbm/entity/grenade/EntityGrenadeIFNull.java @@ -8,52 +8,51 @@ import com.hbm.items.weapon.ItemGrenade; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; import net.minecraft.world.World; public class EntityGrenadeIFNull extends EntityGrenadeBouncyBase { - public EntityGrenadeIFNull(World p_i1773_1_) - { - super(p_i1773_1_); - } + public EntityGrenadeIFNull(World world) { + super(world); + } - public EntityGrenadeIFNull(World p_i1774_1_, EntityLivingBase p_i1774_2_) - { - super(p_i1774_1_, p_i1774_2_); - } + public EntityGrenadeIFNull(World world, EntityLivingBase thrower) { + super(world, thrower); + } - public EntityGrenadeIFNull(World p_i1775_1_, double p_i1775_2_, double p_i1775_4_, double p_i1775_6_) - { - super(p_i1775_1_, p_i1775_2_, p_i1775_4_, p_i1775_6_); - } + public EntityGrenadeIFNull(World world, double x, double y, double z) { + super(world, x, y, z); + } - @Override - public void explode() { - - if (!this.worldObj.isRemote) - { - this.setDead(); + @Override + public void explode() { - for(int a = -3; a <= 3; a++) - for(int b = -3; b <= 3; b++) - for(int c = -3; c <= 3; c++) - worldObj.setBlockToAir((int)posX + a, (int)posY + b, (int)posZ + c); - - List list = worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox((int)posX + 0.5 - 3, (int)posY + 0.5 - 3, (int)posZ + 0.5 - 3, (int)posX + 0.5 + 3, (int)posY + 0.5 + 3, (int)posZ + 0.5 + 3)); - - for(Object o : list) { - if(o instanceof EntityLivingBase) { - EntityLivingBase e = (EntityLivingBase)o; - - e.setHealth(0); - } else if(o instanceof Entity) { - Entity e = (Entity)o; - - e.setDead(); - } - } - } - } + if(!this.worldObj.isRemote) { + this.setDead(); + + int range = 5; + + for(int a = -range; a <= range; a++) + for(int b = -range; b <= range; b++) + for(int c = -range; c <= range; c++) + worldObj.setBlockToAir((int) Math.floor(posX + a), (int) Math.floor(posY + b), (int) Math.floor(posZ + c)); + + List list = worldObj.getEntitiesWithinAABBExcludingEntity(this, + AxisAlignedBB.getBoundingBox((int) posX + 0.5 - 3, (int) posY + 0.5 - 3, (int) posZ + 0.5 - 3, (int) posX + 0.5 + 3, (int) posY + 0.5 + 3, (int) posZ + 0.5 + 3)); + + for(Object o : list) { + if(o instanceof EntityLivingBase) { + EntityLivingBase e = (EntityLivingBase) o; + e.setHealth(0); + e.onDeath(DamageSource.outOfWorld); + } else if(o instanceof Entity) { + Entity e = (Entity) o; + e.setDead(); + } + } + } + } @Override protected int getMaxTimer() { diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java index 92ebec3f2..6fb39039e 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier1.java @@ -47,6 +47,15 @@ public abstract class EntityMissileTier1 extends EntityMissileBaseNT { @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_generic_small); } } + public static class EntityMissileDecoy extends EntityMissileTier1 { + public EntityMissileDecoy(World world) { super(world); } + public EntityMissileDecoy(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } + @Override public void onImpact() { worldObj.newExplosion(this, posX, posY, posZ, 4F, false, false); } + @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.ingot_steel); } + @Override public String getUnlocalizedName() { return "radar.target.tier4"; } + @Override public int getBlipLevel() { return IRadarDetectableNT.TIER4; } + } + public static class EntityMissileIncendiary extends EntityMissileTier1 { public EntityMissileIncendiary(World world) { super(world); } public EntityMissileIncendiary(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } diff --git a/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java index 3c3632c9c..180c6981d 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java @@ -13,6 +13,7 @@ import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.FluidStack; +import com.hbm.inventory.OreDictManager; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; @@ -31,16 +32,19 @@ public class ArcWelderRecipes extends SerializableRecipe { @Override public void registerDefaults() { + //Parts recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.motor, 2), 100, 200L, new OreDictStack(IRON.plate(), 2), new ComparableStack(ModItems.coil_copper), new ComparableStack(ModItems.coil_copper_torus))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.motor, 2), 100, 400L, new OreDictStack(STEEL.plate(), 1), new ComparableStack(ModItems.coil_copper), new ComparableStack(ModItems.coil_copper_torus))); + //Dense Wires recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.wire_dense, 1, Mats.MAT_ALLOY.id), 100, 10_000L, new ComparableStack(ModItems.wire_advanced_alloy, 8))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.wire_dense, 1, Mats.MAT_GOLD.id), 100, 10_000L, new ComparableStack(ModItems.wire_gold, 8))); + //Circuits recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.circuit_copper), 100, 1_000L, new FluidStack(Fluids.GAS, 100), new ComparableStack(ModItems.circuit_aluminium, 1), new OreDictStack(NETHERQUARTZ.dust()), new ComparableStack(ModItems.wire_copper, 8))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.circuit_red_copper), 100, 2_500L, new FluidStack(Fluids.PETROLEUM, 100), @@ -76,11 +80,21 @@ public class ArcWelderRecipes extends SerializableRecipe { recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.plate_welded, 1, Mats.MAT_OSMIRIDIUM.id), 6_000, 20_000_000L, new FluidStack(Fluids.REFORMGAS, 16_000), new OreDictStack(OSMIRIDIUM.plateCast(), 2))); + //Missile Parts + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.thruster_small), 60, 1_000L, new OreDictStack(STEEL.plate(), 4), new ComparableStack(ModItems.wire_aluminium, 4), new OreDictStack(CU.plate(), 4))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.thruster_medium), 100, 2_000L, new OreDictStack(STEEL.plate(), 8), new ComparableStack(ModItems.motor, 1), new OreDictStack(GRAPHITE.ingot(), 8))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.thruster_large), 200, 5_000L, new OreDictStack(DURA.ingot(), 12), new ComparableStack(ModItems.motor, 2), new OreDictStack(OreDictManager.getReflector(), 16))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_small), 60, 1_000L, new OreDictStack(Fluids.ETHANOL.getDict(1_000), 6), new OreDictStack(TI.plate(), 6), new OreDictStack(STEEL.plate(), 2))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_medium), 100, 2_000L, new OreDictStack(Fluids.KEROSENE.getDict(1_000), 8), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 4))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.fuel_tank_large), 200, 5_000L, new OreDictStack(Fluids.KEROSENE.getDict(1_000), 12), new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 8))); + + //Missiles recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_generic), 100, 5_000L, new ComparableStack(ModItems.warhead_generic_small), new ComparableStack(ModItems.fuel_tank_small), new ComparableStack(ModItems.thruster_small))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_incendiary), 100, 5_000L, new ComparableStack(ModItems.warhead_incendiary_small), new ComparableStack(ModItems.fuel_tank_small), new ComparableStack(ModItems.thruster_small))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_cluster), 100, 5_000L, new ComparableStack(ModItems.warhead_cluster_small), new ComparableStack(ModItems.fuel_tank_small), new ComparableStack(ModItems.thruster_small))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_buster), 100, 5_000L, new ComparableStack(ModItems.warhead_buster_small), new ComparableStack(ModItems.fuel_tank_small), new ComparableStack(ModItems.thruster_small))); + recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_decoy), 60, 2_500L, new OreDictStack(STEEL.ingot()), new ComparableStack(ModItems.fuel_tank_small), new ComparableStack(ModItems.thruster_small))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_strong), 200, 10_000L, new ComparableStack(ModItems.warhead_generic_medium), new ComparableStack(ModItems.fuel_tank_medium), new ComparableStack(ModItems.thruster_medium))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.missile_incendiary_strong), 200, 10_000L, new ComparableStack(ModItems.warhead_incendiary_medium), new ComparableStack(ModItems.fuel_tank_medium), new ComparableStack(ModItems.thruster_medium))); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index fb559fa5d..6e69849c6 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -197,12 +197,6 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit_tantalium, 5) }, 600); makeRecipe(new ComparableStack(ModItems.warhead_thermo_endo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_endo, 2), new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier3, 1) },300); makeRecipe(new ComparableStack(ModItems.warhead_thermo_exo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_exo, 2), new OreDictStack(TI.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier3, 1) },300); - makeRecipe(new ComparableStack(ModItems.fuel_tank_small, 1), new AStack[] {new ComparableStack(ModItems.canister_full, 6, Fluids.ETHANOL.getID()), new OreDictStack(TI.plate(), 6), new OreDictStack(STEEL.plate(), 2), },100); - makeRecipe(new ComparableStack(ModItems.fuel_tank_medium, 1), new AStack[] {new ComparableStack(ModItems.canister_full, 8, Fluids.KEROSENE.getID()), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 4), },150); - makeRecipe(new ComparableStack(ModItems.fuel_tank_large, 1), new AStack[] {new ComparableStack(ModItems.canister_full, 12, Fluids.KEROSENE.getID()), new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 8), },200); - makeRecipe(new ComparableStack(ModItems.thruster_small, 1), new AStack[] {new OreDictStack(STEEL.plate(), 4), new OreDictStack(W.ingot(), 4), new ComparableStack(ModItems.wire_aluminium, 4), },100); - makeRecipe(new ComparableStack(ModItems.thruster_medium, 1), new AStack[] {new OreDictStack(STEEL.plate(), 8), new OreDictStack(W.ingot(), 8), new ComparableStack(ModItems.motor, 1), new ComparableStack(ModItems.wire_copper, 16), },150); - makeRecipe(new ComparableStack(ModItems.thruster_large, 1), new AStack[] {new OreDictStack(DURA.ingot(), 16), new OreDictStack(W.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.wire_gold, 32), new ComparableStack(ModItems.circuit_red_copper, 1), },200); makeRecipe(new ComparableStack(ModItems.thruster_nuclear, 1), new AStack[] {new OreDictStack(DURA.ingot(), 32), new OreDictStack(B.ingot(), 8), new OreDictStack(PB.plate(), 16), new ComparableStack(ModItems.pipes_steel), new ComparableStack(ModItems.circuit_gold, 1) },600); makeRecipe(new ComparableStack(ModItems.sat_base, 1), new AStack[] {new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.plate_desh, 4), new ComparableStack(ModItems.hull_big_titanium, 3), new ComparableStack(ModItems.fluid_barrel_full, 1, Fluids.KEROSENE.getID()), new ComparableStack(ModItems.photo_panel, 24), new ComparableStack(ModItems.board_copper, 12), new ComparableStack(ModItems.circuit_gold, 6), new ComparableStack(ModItems.battery_lithium_cell_6, 1), },500); makeRecipe(new ComparableStack(ModItems.sat_head_mapper, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(STEEL.plate(), 6), new ComparableStack(ModItems.hull_small_steel, 3), new ComparableStack(ModItems.plate_desh, 2), new ComparableStack(ModItems.circuit_gold, 2), new OreDictStack(RUBBER.ingot(), 12), new OreDictStack(REDSTONE.dust(), 6), new ComparableStack(Items.diamond, 1), new ComparableStack(Blocks.glass_pane, 6), },400); @@ -325,24 +319,6 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModBlocks.therm_exo, 1), new AStack[] {new OreDictStack(TI.plate(), 12), new OreDictStack(P_RED.dust(), 32), new ComparableStack(ModItems.circuit_gold, 1), new ComparableStack(ModItems.coil_gold, 4), },250); makeRecipe(new ComparableStack(ModBlocks.launch_pad, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.plate(), 12), new ComparableStack(ModBlocks.machine_battery, 1), new ComparableStack(ModItems.circuit_gold, 2), },250); makeRecipe(new ComparableStack(ModItems.spawn_chopper, 1), new AStack[] {new ComparableStack(ModItems.chopper_blades, 5), new ComparableStack(ModItems.chopper_gun, 1), new ComparableStack(ModItems.chopper_head, 1), new ComparableStack(ModItems.chopper_tail, 1), new ComparableStack(ModItems.chopper_torso, 1), new ComparableStack(ModItems.chopper_wing, 2), },300); - //makeRecipe(new ComparableStack(ModItems.missile_generic, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_small, 1), new ComparableStack(ModItems.fuel_tank_small, 1), new ComparableStack(ModItems.thruster_small, 1), new OreDictStack(TI.plate(), 6), new ComparableStack(ModItems.circuit_targeting_tier1, 1), },200); - //makeRecipe(new ComparableStack(ModItems.missile_incendiary, 1), new AStack[] {new ComparableStack(ModItems.warhead_incendiary_small, 1), new ComparableStack(ModItems.fuel_tank_small, 1), new ComparableStack(ModItems.thruster_small, 1), new OreDictStack(TI.plate(), 6), new ComparableStack(ModItems.circuit_targeting_tier1, 1), },200); - //makeRecipe(new ComparableStack(ModItems.missile_cluster, 1), new AStack[] {new ComparableStack(ModItems.warhead_cluster_small, 1), new ComparableStack(ModItems.fuel_tank_small, 1), new ComparableStack(ModItems.thruster_small, 1), new OreDictStack(TI.plate(), 6), new ComparableStack(ModItems.circuit_targeting_tier1, 1), },200); - //makeRecipe(new ComparableStack(ModItems.missile_buster, 1), new AStack[] {new ComparableStack(ModItems.warhead_buster_small, 1), new ComparableStack(ModItems.fuel_tank_small, 1), new ComparableStack(ModItems.thruster_small, 1), new OreDictStack(TI.plate(), 6), new ComparableStack(ModItems.circuit_targeting_tier1, 1), },200); - //makeRecipe(new ComparableStack(ModItems.missile_strong, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_medium, 1), new ComparableStack(ModItems.fuel_tank_medium, 1), new ComparableStack(ModItems.thruster_medium, 1), new OreDictStack(TI.plate(), 10), new OreDictStack(STEEL.plate(), 14), new ComparableStack(ModItems.circuit_targeting_tier2, 1), },250); - //makeRecipe(new ComparableStack(ModItems.missile_incendiary_strong, 1), new AStack[] {new ComparableStack(ModItems.warhead_incendiary_medium, 1), new ComparableStack(ModItems.fuel_tank_medium, 1), new ComparableStack(ModItems.thruster_medium, 1), new OreDictStack(TI.plate(), 10), new OreDictStack(STEEL.plate(), 14), new ComparableStack(ModItems.circuit_targeting_tier2, 1), },250); - //makeRecipe(new ComparableStack(ModItems.missile_cluster_strong, 1), new AStack[] {new ComparableStack(ModItems.warhead_cluster_medium, 1), new ComparableStack(ModItems.fuel_tank_medium, 1), new ComparableStack(ModItems.thruster_medium, 1), new OreDictStack(TI.plate(), 10), new OreDictStack(STEEL.plate(), 14), new ComparableStack(ModItems.circuit_targeting_tier2, 1), },250); - //makeRecipe(new ComparableStack(ModItems.missile_buster_strong, 1), new AStack[] {new ComparableStack(ModItems.warhead_buster_medium, 1), new ComparableStack(ModItems.fuel_tank_medium, 1), new ComparableStack(ModItems.thruster_medium, 1), new OreDictStack(TI.plate(), 10), new OreDictStack(STEEL.plate(), 14), new ComparableStack(ModItems.circuit_targeting_tier2, 1), },250); - //makeRecipe(new ComparableStack(ModItems.missile_emp_strong, 1), new AStack[] {new ComparableStack(ModBlocks.emp_bomb, 3), new ComparableStack(ModItems.fuel_tank_medium, 1), new ComparableStack(ModItems.thruster_medium, 1), new OreDictStack(TI.plate(), 10), new OreDictStack(STEEL.plate(), 14), new ComparableStack(ModItems.circuit_targeting_tier2, 1), },250); - //makeRecipe(new ComparableStack(ModItems.missile_burst, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_large, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 14), new OreDictStack(STEEL.plate(), 20), new OreDictStack(AL.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier3, 1), },350); - //makeRecipe(new ComparableStack(ModItems.missile_inferno, 1), new AStack[] {new ComparableStack(ModItems.warhead_incendiary_large, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 14), new OreDictStack(STEEL.plate(), 20), new OreDictStack(AL.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier3, 1), },350); - //makeRecipe(new ComparableStack(ModItems.missile_rain, 1), new AStack[] {new ComparableStack(ModItems.warhead_cluster_large, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 14), new OreDictStack(STEEL.plate(), 20), new OreDictStack(AL.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier3, 1), },350); - //makeRecipe(new ComparableStack(ModItems.missile_drill, 1), new AStack[] {new ComparableStack(ModItems.warhead_buster_large, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 14), new OreDictStack(STEEL.plate(), 20), new OreDictStack(AL.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier3, 1), },350); - //makeRecipe(new ComparableStack(ModItems.missile_nuclear, 1), new AStack[] {new ComparableStack(ModItems.warhead_nuclear, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 24), new OreDictStack(AL.plate(), 16), new ComparableStack(ModItems.circuit_targeting_tier4, 1), },500); - //makeRecipe(new ComparableStack(ModItems.missile_nuclear_cluster, 1), new AStack[] {new ComparableStack(ModItems.warhead_mirv, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 24), new OreDictStack(AL.plate(), 16), new ComparableStack(ModItems.circuit_targeting_tier5, 1), },600); - //makeRecipe(new ComparableStack(ModItems.missile_volcano, 1), new AStack[] {new ComparableStack(ModItems.warhead_volcano, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 24), new OreDictStack(AL.plate(), 16), new ComparableStack(ModItems.circuit_targeting_tier5, 1), },600); - //makeRecipe(new ComparableStack(ModItems.missile_endo, 1), new AStack[] {new ComparableStack(ModItems.warhead_thermo_endo, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 14), new OreDictStack(STEEL.plate(), 20), new OreDictStack(AL.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier4, 1), },350); - //makeRecipe(new ComparableStack(ModItems.missile_exo, 1), new AStack[] {new ComparableStack(ModItems.warhead_thermo_exo, 1), new ComparableStack(ModItems.fuel_tank_large, 1), new ComparableStack(ModItems.thruster_large, 1), new OreDictStack(TI.plate(), 14), new OreDictStack(STEEL.plate(), 20), new OreDictStack(AL.plate(), 12), new ComparableStack(ModItems.circuit_targeting_tier4, 1), },350); makeRecipe(new ComparableStack(ModItems.gun_defabricator, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 2), new OreDictStack(ANY_PLASTIC.ingot(), 8), new OreDictStack(IRON.plate(), 5), new ComparableStack(ModItems.mechanism_special, 3), new ComparableStack(Items.diamond, 1), new ComparableStack(ModItems.plate_dalekanium, 3), },200); makeRecipe(new ComparableStack(ModItems.gun_osipr_ammo, 24), new AStack[] {new OreDictStack(STEEL.plate(), 2), new OreDictStack(REDSTONE.dust(), 1), new ComparableStack(Items.glowstone_dust, 1), },50); makeRecipe(new ComparableStack(ModItems.gun_osipr_ammo2, 1), new AStack[] {new OreDictStack(CMB.plate(), 4), new OreDictStack(REDSTONE.dust(), 7), new ComparableStack(ModItems.powder_power, 3), },200); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 6f74b43d8..539beed9e 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1294,6 +1294,7 @@ public class ModItems { public static Item missile_incendiary; public static Item missile_cluster; public static Item missile_buster; + public static Item missile_decoy; public static Item missile_strong; public static Item missile_incendiary_strong; public static Item missile_cluster_strong; @@ -3909,6 +3910,7 @@ public class ModItems { missile_incendiary = new Item().setUnlocalizedName("missile_incendiary").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_incendiary"); missile_cluster = new Item().setUnlocalizedName("missile_cluster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_cluster"); missile_buster = new Item().setUnlocalizedName("missile_buster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_buster"); + missile_decoy = new Item().setUnlocalizedName("missile_decoy").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_decoy"); missile_strong = new Item().setUnlocalizedName("missile_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_strong"); missile_incendiary_strong = new Item().setUnlocalizedName("missile_incendiary_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_incendiary_strong"); missile_cluster_strong = new Item().setUnlocalizedName("missile_cluster_strong").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_cluster_strong"); @@ -6810,6 +6812,7 @@ public class ModItems { //Missiles GameRegistry.registerItem(missile_generic, missile_generic.getUnlocalizedName()); GameRegistry.registerItem(missile_anti_ballistic, missile_anti_ballistic.getUnlocalizedName()); + GameRegistry.registerItem(missile_decoy, missile_decoy.getUnlocalizedName()); GameRegistry.registerItem(missile_incendiary, missile_incendiary.getUnlocalizedName()); GameRegistry.registerItem(missile_cluster, missile_cluster.getUnlocalizedName()); GameRegistry.registerItem(missile_buster, missile_buster.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index b970e1474..2a8e88ddb 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -664,6 +664,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityTestMissile.class, new RenderTestMissile()); RenderingRegistry.registerEntityRenderingHandler(EntityMissileCustom.class, new RenderMissileCustom()); RenderingRegistry.registerEntityRenderingHandler(EntityMissileGeneric.class, new RenderMissileGeneric()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileDecoy.class, new RenderMissileGeneric()); RenderingRegistry.registerEntityRenderingHandler(EntityMissileAntiBallistic.class, new RenderMissileGeneric()); RenderingRegistry.registerEntityRenderingHandler(EntityMissileIncendiary.class, new RenderMissileGeneric()); RenderingRegistry.registerEntityRenderingHandler(EntityMissileCluster.class, new RenderMissileGeneric()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 10f658ff5..9816aee87 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1185,6 +1185,7 @@ public class ResourceManager { public static final ResourceLocation missileV2_IN_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_v2_inc.png"); public static final ResourceLocation missileV2_CL_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_v2_cl.png"); public static final ResourceLocation missileV2_BU_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_v2_bu.png"); + public static final ResourceLocation missileV2_decoy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_v2_decoy.png"); public static final ResourceLocation missileAA_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_abm.png"); public static final ResourceLocation missileStrong_HE_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_strong.png"); public static final ResourceLocation missileStrong_EMP_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_strong_emp.png"); diff --git a/src/main/java/com/hbm/render/entity/rocket/RenderMissileGeneric.java b/src/main/java/com/hbm/render/entity/rocket/RenderMissileGeneric.java index 64051609e..1dff79e27 100644 --- a/src/main/java/com/hbm/render/entity/rocket/RenderMissileGeneric.java +++ b/src/main/java/com/hbm/render/entity/rocket/RenderMissileGeneric.java @@ -23,21 +23,24 @@ public class RenderMissileGeneric extends Render { GL11.glRotatef(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * interp - 90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * interp, 0.0F, 0.0F, 1.0F); - if(entity instanceof EntityMissileGeneric) - bindTexture(ResourceManager.missileV2_HE_tex); - if(entity instanceof EntityMissileIncendiary) - bindTexture(ResourceManager.missileV2_IN_tex); - if(entity instanceof EntityMissileCluster) - bindTexture(ResourceManager.missileV2_CL_tex); - if(entity instanceof EntityMissileBunkerBuster) - bindTexture(ResourceManager.missileV2_BU_tex); - if(entity instanceof EntityMissileAntiBallistic) { bindTexture(ResourceManager.missileAA_tex); GL11.glShadeModel(GL11.GL_SMOOTH); ResourceManager.missileABM.renderAll(); GL11.glShadeModel(GL11.GL_FLAT); } else { + + if(entity instanceof EntityMissileGeneric) + bindTexture(ResourceManager.missileV2_HE_tex); + if(entity instanceof EntityMissileIncendiary) + bindTexture(ResourceManager.missileV2_IN_tex); + if(entity instanceof EntityMissileCluster) + bindTexture(ResourceManager.missileV2_CL_tex); + if(entity instanceof EntityMissileBunkerBuster) + bindTexture(ResourceManager.missileV2_BU_tex); + if(entity instanceof EntityMissileDecoy) + bindTexture(ResourceManager.missileV2_decoy_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); ResourceManager.missileV2.renderAll(); GL11.glShadeModel(GL11.GL_FLAT); diff --git a/src/main/java/com/hbm/render/tileentity/RenderLaunchPadTier1.java b/src/main/java/com/hbm/render/tileentity/RenderLaunchPadTier1.java index b7159a7bb..8b6e245aa 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderLaunchPadTier1.java +++ b/src/main/java/com/hbm/render/tileentity/RenderLaunchPadTier1.java @@ -38,6 +38,13 @@ public class RenderLaunchPadTier1 extends TileEntitySpecialRenderer { ResourceManager.missileV2.renderAll(); GL11.glShadeModel(GL11.GL_FLAT); } + if(toRender.getItem() == ModItems.missile_decoy) { + GL11.glScalef(1.0F, 1.0F, 1.0F); + bindTexture(ResourceManager.missileV2_decoy_tex); + GL11.glShadeModel(GL11.GL_SMOOTH); + ResourceManager.missileV2.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } if(toRender.getItem() == ModItems.missile_strong) { GL11.glScalef(1.5F, 1.5F, 1.5F); bindTexture(ResourceManager.missileStrong_HE_tex); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java index eec19fae0..676409778 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java @@ -65,6 +65,7 @@ public class TileEntityLaunchPad extends TileEntityMachineBase implements IEnerg missiles.put(new ComparableStack(ModItems.missile_emp), EntityMissileEMP.class); //Tier 1 missiles.put(new ComparableStack(ModItems.missile_generic), EntityMissileGeneric.class); + missiles.put(new ComparableStack(ModItems.missile_decoy), EntityMissileDecoy.class); missiles.put(new ComparableStack(ModItems.missile_incendiary), EntityMissileIncendiary.class); missiles.put(new ComparableStack(ModItems.missile_cluster), EntityMissileCluster.class); missiles.put(new ComparableStack(ModItems.missile_buster), EntityMissileBunkerBuster.class); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 27b8e8d17..9cd2d7a8f 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2292,6 +2292,7 @@ item.missile_carrier.name=HTR-01 Trägerrakete item.missile_cluster.name=Streurakete item.missile_cluster_strong.name=Starke Streurakete item.missile_custom.name=Spezialgefertigte Rakete +item.missile_decoy.name=Köderflugkörper item.missile_doomsday.name=Doomsday Rakete item.missile_drill.name=Der Betonbrecher item.missile_emp.name=EMP-Rakete diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f6aad2998..101515558 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3029,6 +3029,7 @@ item.missile_carrier.name=HTR-01 Carrier Rocket item.missile_cluster.name=Cluster Missile item.missile_cluster_strong.name=Strong Cluster Missile item.missile_custom.name=Custom Missile +item.missile_decoy.name=Decoy Missile item.missile_doomsday.name=Doomsday Missile item.missile_drill.name=The Concrete Cracker item.missile_emp.name=EMP Missile diff --git a/src/main/resources/assets/hbm/textures/items/fuel_tank_large.png b/src/main/resources/assets/hbm/textures/items/fuel_tank_large.png index 1a6b4cb1b030ef808573c800921c2c4b076ae720..afa1cbaf0b1338e2703df324054b22f91b141419 100644 GIT binary patch delta 234 zcmV+aYkH*x6X?io52 zdI48?WGYAy3^Alrr6EsH@sPRi kyP9}=yrWf4{!GdG0?wV4;vO%iegFUf07*qoM6N<$f=1+Mpa1{> delta 225 zcmV<703QFA0*wNYG=IcNL_t(Ijir-43d1lAgELnP#3?6!yPKBN$ zb0BhT)g)6(jb%vi123}t@$_S$P^a8Q-}fss<9mi-5Oc*~*LADb8g*U6dk+8@#}USu zB)^gXT5B*fi0J1)DJ41;0RYf64ZQdGFGJEf2iU7afam?P7Fq!o4hcjA5K$7d*1~bX z!Xb)hr!dcR)IglT|MM bOvTy&NotlfaO4y~00000NkvXXu0mjfs;pp0 diff --git a/src/main/resources/assets/hbm/textures/items/fuel_tank_large_alt.png b/src/main/resources/assets/hbm/textures/items/fuel_tank_large_alt.png deleted file mode 100644 index 198a444303934539787a00b8e1a685db8de72dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf-8&u1Tv>^PcC5`BeK6c3sQdd=K= zZRaDK@FYRSr7Q-~*|$aCZxmwgF$@S@q%xh2;T@mDIZ5O0jE#*Q58lm?TqPydA}yn~ yp7)-AK?uV?(Ym08-}lYcc3HmX$lUZ_64osnoe~VXMT&v0VeoYIb6Mw<&;$UzUq-+H diff --git a/src/main/resources/assets/hbm/textures/items/fuel_tank_medium.png b/src/main/resources/assets/hbm/textures/items/fuel_tank_medium.png index a7cd568d9e00437189813e6521828d401e8dc9e3..cd1ac2e15f0fba5929d0995c29a4689cb22b41f7 100644 GIT binary patch delta 341 zcmV-b0jmD$0)PXMG=DcqL_t(Ijir+@s=`1NMUNjLg2bs(g`g7LNt*0PE3vb(w6U?b zb_F&TE5@M4|#~DnOUnLmLpx|xaeTO@jH}Inxron7B%cYdu?{}0^%;)o3Z?kUE zwrx6{4nhb3uGcGC>s%?tYPD(@0h7rjcU`w!9F0Z@As7yagnwZOfYv%+uh%7{LR%~r zxs;M30l;)RMF>H!*Fz~qyWM8FT$X!(uTOAY7tixZl7#(!PY?t=9uJ}@!f~9>9Xx|> zw;NJQvMi(3YSsGQ64c4EEaR*KIGs)(VR0Or0lx2ZJRUh54i!_DWdNMdXFSiV%-%W} z3 n`3m97&$QWW*lxE*?@#&%tbB@Mndvx(00000NkvXXu0mjfy0)7q delta 319 zcmV-F0l@x%1L^{hG=CvUL_t(Ijir+@j)O1|MPF76i6Da0(5K}rX}An+N(#E%AZ6;* z6bMn$7=dLBQnqpw3!{yc-`Vr$Y5X;YFSXk$WLfr{=b3q)S(b&%<>K_NF0(9qdY*^p zdHB8$fYzF}ZCRFuq9}Hofb;qMjN|y#c)ebUs(-2|%ktIt^9~4t04XKo zIHI*CO;dyr+-^78wxzCX4u^v^u>~-YFbt7WB7`7G5|mOjO|xnS_;m$iKqka#nw-tf z30&Im_nS2f(D(hnuyGu>0Z|mu_dP-g%QQ_B0K+g4hM`qkWe`OXzVFj@-D`=Aj>n^Q zb^_i(Cd7|3kT_C0P38#zN~vu?p65HWNbfQeD5b0|gbzQ{LM&OXx9FLy~TU~$q~z#OG$uchF?X(;>PfS7W$eVy_7+4H_#&U()B zf67VTHCxpkLPHsP9?!6;J}>FY(y%P^&kLW%dkoiZU6$V4mbhSD_O5li9TZi(7OeWg za(dH+@3st|ZI;IgFxN1J9)Edw1s1g~ae58(7=x#)pUXO@geCwU+HZpZ diff --git a/src/main/resources/assets/hbm/textures/items/fuel_tank_small.png b/src/main/resources/assets/hbm/textures/items/fuel_tank_small.png index d2ac3f1dc23f5c12e3394d6df8f0d8dc2b3e41f9..d8c0c47d7474161083024bf2967eecd3e8517b7d 100644 GIT binary patch delta 262 zcmV+h0r~!<0-G=J$yL_t(Ijm?ljYK1TqMNgaJ{0A}=ge*W1*W)A;H{cdrgA*ri zz!kUy$<##%PjDzmI_jsbDgO@&?S)Kk?t95S@Yj0z>7s4hux%S6f`~AVV>J5~Gn=Lf zT5Gh{SZe{;_dQJ0bXoHH-Ehu@+wBH`F$QA{07X$ymSuRjz<*lHwrv2c>&m*WhzQ<$ z(lmXpg0&VA;WL9Q%Mg)EHVUTex?qgCzy7hP@B7CL0ES_>c;5S1^!fwmTv(QcBuO}q zgY!J^M=8ZT&tGPu5MxqGMIlBjR8@8H@;ra80{jBRx~?z5*zo_*JN~70H8(%3-2eap M07*qoM6N<$f`>bNRsaA1 delta 248 zcmVDfkZ~$&VLqWkw zsA#zcHKkX`zasizM@bPW8EKmF>}qxle~q`V9-5}{BErdG7^2>&Sl6{T#$2>*+Ze|& z@W0;$YpqvG0id-;YYjl2=R6({fA@df1!D{%f>H|S8~`H1zH#rQX&R&r7Q8NbWtL@# zNZ^fj(6+7DTH~C%Eb06H`wjr+c@DH?Sz^{Ofwk7J><nIF3&iMZq*pmzf~J{rgTN yNfIqFdO}rIfmW8~&rX0}D6#9hz!)3;A9w<`tZ*UeDU3)9e>HEig2+V4lxG^Z#?1V$?qdbA9+J m_eW&kKcBG27HZk~FL_s_h46{l{xAjllEKr}&t;ucLK6Vx^KPyH diff --git a/src/main/resources/assets/hbm/textures/items/fuelcell_arsenic.png b/src/main/resources/assets/hbm/textures/items/fuelcell_arsenic.png deleted file mode 100644 index 4a2c066f02c00f6a8ed9db144d9a915a26c9b66c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfwYD6b;ZJh{H#}vRm{`V3JW$Id{)zR?cO5sjI6ASju{y{x>^1uG%H-) z8+GwgBlq;;^M5Vu|9rUab$JVC(*ns;Jw9oZRC+rSZkxFVKKO0N5Ga!QbK^_nhS$61 zPJeExN2vTin<3vzu+d z9k4`x!=1d_r$2gZxLwO%aph^%Upa%>=NT>L`!#>~$JTvxcTzrs{3>w)|K$$W|LeBC pVwDKDMDd4gmU-!PC{xWt~$(69A(Uc(nik diff --git a/src/main/resources/assets/hbm/textures/items/fuelcell_base.png b/src/main/resources/assets/hbm/textures/items/fuelcell_base.png deleted file mode 100644 index b74dc7b3503228f0b23140ff25d6e66dcc53d65c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfQ006mPK{GzUq-N+;65i7_?0H zG5Y!YdAgb8kIYr8iXx}&44>!fp>z6DCr6;j#cjHovzP)zTA#vLSa+y}k?G70N~>v!C^+3-N~dF4B&@__557ygTyw|w(DUw_TG9q0)LPgg&ebxsLQ E05VEwtpET3 diff --git a/src/main/resources/assets/hbm/textures/items/fuelcell_euphemium.png b/src/main/resources/assets/hbm/textures/items/fuelcell_euphemium.png deleted file mode 100644 index 0acd3351ef16512611b487a6801d49ec6563ede7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfCb@h* z@7vE9bKUm(s#Q)d9+yMBKNm#@cs;b>^U`!-x&Qrqx$otSOj8Dj>!lIXT6%my5a&i0=>)N>FVdQ&MBb@0ASa7i2wiq diff --git a/src/main/resources/assets/hbm/textures/items/fuelcell_neptunium.png b/src/main/resources/assets/hbm/textures/items/fuelcell_neptunium.png deleted file mode 100644 index b4edaede1c263e9bb991f8061151b5648798bbf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf39e`y(w-eDa#TfW$2#xJCPxZ+9HynZ)#d)?5nwrZclB#2 zLB;dMi_bp08sPP?QqD`$rA4Fb-R5n%z1!Fr9I|^KTl75s@g>J7tm4W}%ggn8TY+sHsCp|R3j$P_V9LEcZ0tv_l>IP2iyMFZJ*B?;cw}C j`D7V;XlUeT`gTe~DWM4fbv<+% diff --git a/src/main/resources/assets/hbm/textures/items/fuelcell_plutonium.png b/src/main/resources/assets/hbm/textures/items/fuelcell_plutonium.png deleted file mode 100644 index f05ccd94d0f21d3dd4a7889c1f3f12e929442ca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfBs1U(~ubFZpqUCX?dHb!v*fb~(nM zzkjsn`Lp%ZraO~VZuZ%z-`=3nn+a diff --git a/src/main/resources/assets/hbm/textures/items/fuelcell_selenium.png b/src/main/resources/assets/hbm/textures/items/fuelcell_selenium.png deleted file mode 100644 index 237092dbb8fc68ad914085f3b3621216fb6ecea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmV+>0oneEP)irAz`QY1TY8{%%#Sceo5f{^C(o0Q@T+=ke= zh@?oBW)RZkK`aE(KNIz9sm{z0RY;z#j-5AuDe?% zX-~M-dN*UcpFgq;16Ds%0Gg)ZcN6>{aHrGp4L}%PcEiWL1n@lXNvvlHUeq8US{yEi s(~;#e90V9gIgaDrGzUdd82umV49xvhkF;_F7ytkO07*qoM6N<$f^8>v3IG5A diff --git a/src/main/resources/assets/hbm/textures/items/fuelcell_u235.png b/src/main/resources/assets/hbm/textures/items/fuelcell_u235.png deleted file mode 100644 index 86ba25294dec816f97b15324b00aa1d54a4a4b73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfVpX6-&2k)v!t&=Y9~CxMj8-i-f-=&*5Vw?2*$X c|JuJ~QVk0|$kb#t8|XC#Pgg&ebxsLQ05{`ufB*mh diff --git a/src/main/resources/assets/hbm/textures/items/fuelcell_u238m2.png b/src/main/resources/assets/hbm/textures/items/fuelcell_u238m2.png deleted file mode 100644 index 9ce019f885d3c09e61d81eefc96f5b7f1774a577..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmV+=0owkFP)z@V z<5=^LO~nA7O^0@s`*{Q*^143z|`st5>@`!R?*4B`|) zFYZ!tKj5;s3-XehhM<-!;s&wzk;2hy31fCL*?IPzcL)9>+(5()ME=ryP$r{3P(YHI zQDb3cYvX&^T8KV@4r=!=Xptb?smJmpLiPh zEj%0!89WFA07j!xMw1yl&r8z6$z;N6wZe7Xj8WPoW8k`O;(s^}e(A*Cdr&%fe_ zVTkYhD5bOt+E!bwR$`haQ52z+LQ07cf;f&*O0nDRejxu$@B2s_ESJk4xnFl{&fuD_ ReVPCO002ovPDHLkV1le>%;*3B delta 419 zcmV;U0bKsk1I+`FG=GFiL_t(Ijirz=OCwPfg};%!Owa^&jfGp-`v)u*taJq{E34QH z;uK*a5rzbRf~*A8W(#Ez*WtZeLJy`-{QODmNH&1~L#foqct?{8|{rAYP;q>;n|kaOC3CjiuIk@T%)UM=&&U+mzWrd?X+hrxa=l4GaM z%qZaG^deA7QK_zF-pZE+TIYuWfE~1)s!r!d8c8ho_kZMTbw{qRf5_F{$hROGsbAPwyIucVgpxZ%H1BV-Tp1* z@+WV*F+H^YkJde`H9S8*QmHhvT+RiQN*{TB{f99<^7(?dsoQItftxP*%b8|PC3UEO#U>tRId*bZ7^ad&3$hqGyZ{`31 N002ovPDHLkV1lEO%9H>A diff --git a/src/main/resources/assets/hbm/textures/items/thruster_large_alt.png b/src/main/resources/assets/hbm/textures/items/thruster_large_alt.png deleted file mode 100644 index ee64287d35a35539afcad69ca9fee68497426ca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXPIMM=Lb|X&(p;* z#KM2+gp0g~6?j;Ug_JjN`W!GgbFeQ@_N7X4j%ujAA7}rb<{v^6_j5RBtUW35__x%1 zZTAJLGm1||y`I+azb-l;XhJ}UpwVqhmWC5z2g}SDBLc%(lpBJ&u0$>UUT6Q;u4Uo8 zH>~z|8zdDv+t}S5Zt@#W&f#u-Sm|kYA~&(SLqs=iy9cY-seY!`;Jpv7>PHA@1_~bf dU|Uqn@ciV#=_%iNQh_dI@O1TaS?83{1ORKNW1s*4 diff --git a/src/main/resources/assets/hbm/textures/items/thruster_medium.png b/src/main/resources/assets/hbm/textures/items/thruster_medium.png index c880ffed8c9b748215619a23d2a18432a8e3c3b3..3437a340ac0f42e69742bfd21299b6fccedb6177 100644 GIT binary patch delta 387 zcmV-}0et?C1Fi#*G=F7DL_t(IjkS@n>f%5Uhd<*XY_p~=enB;j_u(d+dPLU6y|zXOy~RtSL*g5hw8F^0?Kf|Qatj>)nN zz!pz00iq~kzu%LlDX#01Wm%r<^}6)VkAUa%Svww&HceCN^*TwCn0pjt#%I~gE@j87m>edcgNRmV?q6p7Hfazp{ zhrs}4S>kQE+*_u0iBH4fUajpX_6kXoD9f^7+ct`#01;skMY!$vQI;iwAo!hvdhGhv zDv0A)^?JR=bX_9CX0rhiK}v}%%P<~~t9P9`pxf;t&vOtFEX!(4TCdlTQo?Z@y#fG8 z(^T2Ejn!(^m~5IRq?GV|-#7@UgX$Js*VXp^DZT-=4X1XfA2V_Q0000!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXPIMM=Lb~N=jq}Y zV&T8G{~+%H1s-O}PQe>3yb^7eHw<&Nb{csGth{yH^TCO}$u3WX7jhJx3-Yp@|1pNs z^+U8n_S-|}MAZ+3WbbXL>=A79kvC;F{eCb1aTr4~v(n~AED8P_iUqoE^s%k})g>&F z^PKHA_mp2U$UZu_BPNFD2he2< Mp00i_>zopr0Aj*iXaE2J diff --git a/src/main/resources/assets/hbm/textures/items/thruster_small.png b/src/main/resources/assets/hbm/textures/items/thruster_small.png index f1881cd3c56a1a151d64d269527402b46dd95750..192d0bd6e2a21be75fe7b378ba9ef26393e96b2b 100644 GIT binary patch delta 428 zcmV;d0aO0Q0@VYMGk*b$NklfcgjW6S9SwI;1Iu5Ie+HYQNV7EI%H!19!XUopbIz?>%^C z%{+DBd7jMo^?LnLt_I!i2iJ8Kqr8b?;JU7K z9EX2x(Cv0A1J0xZiS2m%d%hyfV+rqO6*&W__?Sr!0c7-pRObS=Vt9qq5m z(eCGLY8ZyRiBH)7*4Ox21c0rb6@Hu@^0HV!2uUncHeT0&zQ)xYzkjl2v0Pw%+on{R zWitB1WR!4m_J5OTEZF-xP&C>G)y*2Eib>GFWITXqoDz)%^GgdDW&#WpzH*7DA8cvP z8JKeh%dc##wPngHRpzUUBvU~$6?}QSsQgf6gPWnG{OdRAq(G^%b|;b~Q^A#gO>~E)B$XVqV| WySOg2C`^?A0000u)7CgiRE{I6m;s(o#&ZrD*vL70{nyOd7y5L_+Ydr@+FrVeTofR8n0Qk7w4k5b$ zt@ZqVy`q!?KuLKB*##J5P*N`O`u-@f_c%=xUyifHpZ7auS$|$$b`V7obzP&i#&unU z5X5o(`Un78Yv5;`Gd%&)G@YfCD5WsQ5QZU5(;T`ubg(897p8C>V{#!T8p#V&XWUxEX!u46m8pXItwAN)>0J3!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXPIMM=Lb~N>gnPb zV&T7Z!fD7-VouD%_!7i8oeS@mC*~v3?imm}(hU%|+MCQ)fy!D#Z zZUN0*k_(P%r3fXg*;=-vl}l2NZ?@pJ*+w=DJrAz3JaF@gm?^8d>h*Qr0?CB`U*(T5 z@L94Il(wZGnV_i<_nd9j(ThA`ip~f4<|#1mOMJ<=&hIGCoznO3fevEuboFyt=akR{ E0D9I}egFUf diff --git a/src/main/resources/assets/hbm/textures/models/missile_v2_decoy.png b/src/main/resources/assets/hbm/textures/models/missile_v2_decoy.png new file mode 100644 index 0000000000000000000000000000000000000000..191b0c97f723e20d641ef0b9d49aed312a565f42 GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0vp^wm_W0!3HFq6o0G*QY^(zo*^7SP{WbZ!N9=m<>}%W zQZeW4?2UPk90c0xm1ix!ajI2&iSu$Bw^thc4z*r$*-tWmU|3n%ApF(V{fK9XUd+w{ zulR}4d68w)BsZv*?U~<_(qnwG{rKkBk?c3V*qYVyGkE63AAEC5-e;zct>~sNAtx>c zC+_?AaqC9b36H*+`h4OhPBOZrH+jOh_0?Z5Ep%EQ zHEY$IRZBImcpX2MKlRddHJw*WERDC^{HFZJQS0~m#I*MjH9y|32xE_i|Fg)e`5$$^E@s+%Mu*tz$7Sc_W^(n(-fu15 z*1hhv%gfsH>9c0vdvz@H+=XR+vx>J}^(+ohpL=<>!(0>g(o2?mIj>+9sMXxN-QRVg zpVhQ`x0f$s5ZTtPvBqG*hFFm-o?V9+0^WSDp7`a}_414ITkHQRTg6G;SDkWepFx4^ z{py@f$H)8UaWkJgTpY7%m5{7`S&fjB#EM2#f zGp4IAf0o;Qi?fMxwU(|{ZHnEi`A&7Os>}M9A{H`y5jtW|WT*OHFa1~_=wMlAh_7GLj$A{dy(^W3 zcPmaXDElMf_%fnV^3iO0>wW$A|Ad(OwR4nKU(OeIU2yC6$?e??6P(2~=T>p=ShZ?F zNsgfM&$RmQpDNXAGq0xA<=5t9*2teTx|$;PA!btif$I7{^Y6t>e{wu?w&J8)Q}&oB z2(wM`*j=Ee3rr}BTdgwrUM(rE5?(R+*#bYS<>rm}1%3rp>5FmK@*g>N>2{g#RnOoZ zs})`?aenz$|M!Z?-!5Bk*|9t;a{0Q~lf}2T%>J|K+->KI(2}iD6Z<1o_lI;}Zz@@! b^)r6=bhh(ci_RYh<}wCPS3j3^P6 Date: Tue, 5 Dec 2023 22:13:12 +0100 Subject: [PATCH 05/10] that --- .../machine/MachineExposureChamber.java | 44 ++++++++++++++++++ .../java/com/hbm/crafting/RodRecipes.java | 4 +- .../inventory/recipes/CentrifugeRecipes.java | 8 ++-- .../TileEntityMachineExposureChamber.java | 45 ++++++++++++++++--- 4 files changed, 90 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineExposureChamber.java b/src/main/java/com/hbm/blocks/machine/MachineExposureChamber.java index dbdb57627..8efe19ae1 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineExposureChamber.java +++ b/src/main/java/com/hbm/blocks/machine/MachineExposureChamber.java @@ -1,12 +1,15 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineExposureChamber; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class MachineExposureChamber extends BlockDummyable { @@ -17,6 +20,7 @@ public class MachineExposureChamber extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= 12) return new TileEntityMachineExposureChamber(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power(); return null; } @@ -29,6 +33,46 @@ public class MachineExposureChamber extends BlockDummyable { public int getOffset() { return 2; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP).getOpposite(); + + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {3, 0, 0, 0, -3, 8}, this, dir); + MultiblockHandlerXR.fillSpace(world, x, y + 2, z, new int[] {0, 0, 1, -1, -3, 6}, this, dir); + MultiblockHandlerXR.fillSpace(world, x, y + 2, z, new int[] {0, 0, -1, 1, -3, 6}, this, dir); + MultiblockHandlerXR.fillSpace(world, x + rot.offsetX * 7, y, z + rot.offsetZ * 7, new int[] {3, 0, 1, -1, 0, 1}, this, dir); + MultiblockHandlerXR.fillSpace(world, x + rot.offsetX * 7, y, z + rot.offsetZ * 7, new int[] {3, 0, -1, 1, 0, 1}, this, dir); + + this.makeExtra(world, x + rot.offsetX * 7 + dir.offsetX, y, z + rot.offsetZ * 7 + dir.offsetZ); + this.makeExtra(world, x + rot.offsetX * 7 - dir.offsetX, y, z + rot.offsetZ * 7 - dir.offsetZ); + this.makeExtra(world, x + rot.offsetX * 8 + dir.offsetX, y, z + rot.offsetZ * 8 + dir.offsetZ); + this.makeExtra(world, x + rot.offsetX * 8 - dir.offsetX, y, z + rot.offsetZ * 8 - dir.offsetZ); + this.makeExtra(world, x + rot.offsetX * 8, y, z + rot.offsetZ * 8); + } + + @Override + protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP).getOpposite(); + + if(!MultiblockHandlerXR.checkSpace(world, x, y, z, getDimensions(), x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x, y, z, new int[] {3, 0, 0, 0, -3, 8}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x, y, z, new int[] {0, 0, 1, -1, -3, 6}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x, y, z, new int[] {0, 0, -1, 1, -3, 6}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x + rot.offsetX * 7, y, z + rot.offsetZ * 7, new int[] {3, 0, 1, -1, 0, 1}, x, y, z, dir)) return false; + if(!MultiblockHandlerXR.checkSpace(world, x + rot.offsetX * 7, y, z + rot.offsetZ * 7, new int[] {3, 0, -1, 1, 0, 1}, x, y, z, dir)) return false; + + return true; + } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/com/hbm/crafting/RodRecipes.java b/src/main/java/com/hbm/crafting/RodRecipes.java index 62cd42f2d..089d08aae 100644 --- a/src/main/java/com/hbm/crafting/RodRecipes.java +++ b/src/main/java/com/hbm/crafting/RodRecipes.java @@ -152,8 +152,8 @@ public class RodRecipes { CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.pwr_fuel, EnumPWRFuel.HEA242), new Object[] { "F", "I", "F", 'F', AM242.billet(), 'I', ModItems.plate_polymer }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.pwr_fuel, EnumPWRFuel.HES326), new Object[] { "F", "I", "F", 'F', SA326.billet(), 'I', ModItems.plate_polymer }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.pwr_fuel, EnumPWRFuel.HES327), new Object[] { "F", "I", "F", 'F', SA327.billet(), 'I', ModItems.plate_polymer }); - CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.pwr_fuel, EnumPWRFuel.BFB_AM_MIX), new Object[] { "F", "I", "B", 'F', ModItems.billet_am_mix, 'I', ModItems.plate_polymer, 'B', BI.billet() }); - CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.pwr_fuel, EnumPWRFuel.BFB_PU241), new Object[] { "F", "I", "B", 'F', PU241.billet(), 'I', ModItems.plate_polymer, 'B', BI.billet() }); + CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.pwr_fuel, EnumPWRFuel.BFB_AM_MIX), new Object[] { "NFN", "NIN", "NBN", 'F', ModItems.billet_am_mix, 'I', ModItems.plate_polymer, 'B', BI.billet(), 'N', ModItems.nugget_plutonium_fuel }); + CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.pwr_fuel, EnumPWRFuel.BFB_PU241), new Object[] { "NFN", "NIN", "NBN", 'F', PU241.billet(), 'I', ModItems.plate_polymer, 'B', BI.billet(), 'N', ModItems.nugget_uranium_fuel }); } public static void registerInit() { diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index ae66e0670..5b933fdd3 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -256,13 +256,13 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.nugget_euphemium, 1), new ItemStack(ModItems.nuclear_waste_tiny, 6) }); recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.BFB_AM_MIX)), new ItemStack[] { - new ItemStack(ModItems.nugget_am_mix, 4), - new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_am_mix, 9), + new ItemStack(ModItems.nugget_pu_mix, 2), new ItemStack(ModItems.nugget_bismuth, 6), new ItemStack(ModItems.nuclear_waste_tiny, 1) }); recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.BFB_PU241)), new ItemStack[] { - new ItemStack(ModItems.nugget_pu241, 4), - new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_pu241, 9), + new ItemStack(ModItems.nugget_pu_mix, 2), new ItemStack(ModItems.nugget_bismuth, 6), new ItemStack(ModItems.nuclear_waste_tiny, 1) }); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java index 7f11c77ed..c139e15c5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java @@ -9,18 +9,22 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.fauxpointtwelve.DirPos; +import api.hbm.energy.IEnergyUser; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineExposureChamber extends TileEntityMachineBase implements IGUIProvider { +public class TileEntityMachineExposureChamber extends TileEntityMachineBase implements IGUIProvider, IEnergyUser { public long power; public static final long maxPower = 1_000_000; @@ -62,6 +66,10 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl this.isOn = false; this.power = Library.chargeTEFromItems(slots, 5, power, maxPower); + if(worldObj.getTotalWorldTime() % 20 == 0) { + for(DirPos pos : getConPos()) this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + UpgradeManager.eval(slots, 6, 7); int speedLevel = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); int powerLevel = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); @@ -152,6 +160,18 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl } } + public DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP).getOpposite(); + return new DirPos[] { + new DirPos(xCoord + rot.offsetX * 7 + dir.offsetX * 2, yCoord, zCoord + rot.offsetZ * 7 + dir.offsetZ * 2, dir), + new DirPos(xCoord + rot.offsetX * 7 - dir.offsetX * 2, yCoord, zCoord + rot.offsetZ * 7 - dir.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord + rot.offsetX * 8 + dir.offsetX * 2, yCoord, zCoord + rot.offsetZ * 8 + dir.offsetZ * 2, dir), + new DirPos(xCoord + rot.offsetX * 8 - dir.offsetX * 2, yCoord, zCoord + rot.offsetZ * 8 - dir.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord + rot.offsetX * 9, yCoord, zCoord + rot.offsetZ * 9, rot) + }; + } + public ExposureChamberRecipe getRecipe(ItemStack particle, ItemStack ingredient) { return ExposureChamberRecipes.getRecipe(particle, ingredient); } @@ -176,6 +196,21 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl this.savedParticles = buf.readByte(); } + @Override + public long getPower() { + return power; + } + + @Override + public void setPower(long power) { + this.power = power; + } + + @Override + public long getMaxPower() { + return maxPower; + } + AxisAlignedBB bb = null; @Override @@ -183,12 +218,12 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl if(bb == null) { bb = AxisAlignedBB.getBoundingBox( - xCoord - 2, + xCoord - 8, yCoord, - zCoord - 2, - xCoord + 3, + zCoord - 8, + xCoord + 9, yCoord + 5, - zCoord + 3 + zCoord + 9 ); } From 8dc217b5f713f66fd0d0dfd1dfc7d2bd529cd3e5 Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 6 Dec 2023 20:08:24 +0100 Subject: [PATCH 06/10] i ate poisoned grilled cheeses and now i am dying --- changelog | 1 + .../hbm/items/machine/ItemMachineUpgrade.java | 25 ++++++++++++++++++ .../hbm/tileentity/IUpgradeInfoProvider.java | 11 ++++++++ .../TileEntityMachineElectricFurnace.java | 26 ++++++++++++++++++- 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java diff --git a/changelog b/changelog index ee9dd2d76..7abe48a6f 100644 --- a/changelog +++ b/changelog @@ -29,6 +29,7 @@ * Added config options to the ground water pumps * Missile parts such as non-custom thrusters and fuselages are now made in the arc welder, recipe ingredients have been adjusted as well * Null grenades now have a slightly larger radius, should no longer wipe playerdata and require UNDEFINED to make +* Added some breedable material to BFB PWR fuel rods, meaning that the recycling recipes now actually yield a net positive instead of being a massive waste of time ## Fixed * Fixed ancient bug where custom missiles launched using the launch table would not use the accuracy calculation and always be pin-point accurate diff --git a/src/main/java/com/hbm/items/machine/ItemMachineUpgrade.java b/src/main/java/com/hbm/items/machine/ItemMachineUpgrade.java index 1a04a4649..3e165b474 100644 --- a/src/main/java/com/hbm/items/machine/ItemMachineUpgrade.java +++ b/src/main/java/com/hbm/items/machine/ItemMachineUpgrade.java @@ -3,8 +3,15 @@ package com.hbm.items.machine; import java.util.List; import com.hbm.items.ModItems; +import com.hbm.tileentity.IUpgradeInfoProvider; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -32,6 +39,24 @@ public class ItemMachineUpgrade extends Item { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + GuiScreen open = Minecraft.getMinecraft().currentScreen; + + if(open != null && open instanceof GuiContainer) { + GuiContainer guiContainer = (GuiContainer) open; + Container container = guiContainer.inventorySlots; + if(container.inventorySlots.size() > 0) { + Slot first = container.getSlot(0); + IInventory inv = (IInventory) first.inventory; + if(inv instanceof IUpgradeInfoProvider) { + IUpgradeInfoProvider provider = (IUpgradeInfoProvider) inv; + if(provider.canProvideInfo(this.type, this.tier, bool)) { + provider.provideInfo(this.type, this.tier, list, bool); + return; + } + } + } + } + if(this.type == UpgradeType.SPEED) { list.add(EnumChatFormatting.RED + "Mining Drill:"); list.add("Delay -" + (15 * this.tier) + "% / Consumption +" + (300 * this.tier) + "HE/t"); diff --git a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java new file mode 100644 index 000000000..8c8396573 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java @@ -0,0 +1,11 @@ +package com.hbm.tileentity; + +import java.util.List; + +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; + +public interface IUpgradeInfoProvider { + + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo); + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo); +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 53e8c3f74..4c546e019 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.machine; +import java.util.List; + +import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.MachineElectricFurnace; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerElectricFurnace; @@ -7,7 +10,9 @@ import com.hbm.inventory.gui.GUIMachineElectricFurnace; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.I18nUtil; import api.hbm.energy.IBatteryItem; import api.hbm.energy.IEnergyUser; @@ -20,10 +25,11 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineElectricFurnace extends TileEntityMachineBase implements ISidedInventory, IEnergyUser, IGUIProvider { +public class TileEntityMachineElectricFurnace extends TileEntityMachineBase implements ISidedInventory, IEnergyUser, IGUIProvider, IUpgradeInfoProvider { // HOLY FUCKING SHIT I SPENT 5 DAYS ON THIS SHITFUCK CLASS FILE // thanks Martin, vaer and Bob for the help @@ -263,4 +269,22 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineElectricFurnace(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(EnumChatFormatting.GREEN.YELLOW + ">>> " + I18nUtil.resolveKey(ModBlocks.machine_electric_furnace_off.getUnlocalizedName() + ".name") + " <<<"); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + "Process time -" + (level * 25) + "%"); + info.add(EnumChatFormatting.RED + "Consumption +" + (level * 100) + "%"); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + "Consumption -" + (level * 30) + "%"); + info.add(EnumChatFormatting.RED + "Process time +" + (level * 10) + "%"); + } + } } \ No newline at end of file From 5c33fa17070dca0b720b3c9a534a35b70d5c043e Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 7 Dec 2023 16:39:20 +0100 Subject: [PATCH 07/10] finished RBMK console, more upgrade stuff --- changelog | 6 ++ .../inventory/gui/GUIMachineArcWelder.java | 5 +- .../inventory/gui/GUIMachineAssembler.java | 7 +- .../com/hbm/inventory/gui/GUIRBMKConsole.java | 99 +++++++++++++++--- .../hbm/inventory/gui/GuiInfoContainer.java | 32 ++++++ .../inventory/recipes/CompressorRecipes.java | 2 + .../hbm/tileentity/IUpgradeInfoProvider.java | 13 +++ .../machine/TileEntityFurnaceIron.java | 27 ++++- .../machine/TileEntityMachineArcWelder.java | 33 +++++- .../machine/TileEntityMachineAssembler.java | 36 ++++++- .../machine/TileEntityMachineChemfac.java | 2 +- .../machine/TileEntityMachineChemplant.java | 2 +- .../machine/TileEntityMachineCompressor.java | 1 + .../TileEntityMachineElectricFurnace.java | 17 ++- .../machine/rbmk/TileEntityRBMKBoiler.java | 20 ++-- .../machine/rbmk/TileEntityRBMKConsole.java | 40 ++++++- src/main/resources/assets/hbm/lang/de_DE.lang | 3 + src/main/resources/assets/hbm/lang/en_US.lang | 17 +-- .../gui/processing/gui_arc_welder.png | Bin 2952 -> 2981 bytes .../gui/reactors/gui_rbmk_console.png | Bin 6569 -> 6651 bytes 20 files changed, 317 insertions(+), 45 deletions(-) diff --git a/changelog b/changelog index 7abe48a6f..b0650e213 100644 --- a/changelog +++ b/changelog @@ -30,6 +30,12 @@ * Missile parts such as non-custom thrusters and fuselages are now made in the arc welder, recipe ingredients have been adjusted as well * Null grenades now have a slightly larger radius, should no longer wipe playerdata and require UNDEFINED to make * Added some breedable material to BFB PWR fuel rods, meaning that the recycling recipes now actually yield a net positive instead of being a massive waste of time +* The RBMK control panel has been upgraded + * Right.clicking the color buttons will now assign the color to the selected control rods + * There's now a new button that allows to cycle through compressor settings on RBMK steam channels + * The flux display is now functional. It will display the flux curve of the last 30 seconds, as well as labels for the total flux level. + * With the color assigning buttons and the flux display finished, the console is now finally complete +* Compressing blood at 4 PU now turns it into crude oil at a ratio of 2:1 ## Fixed * Fixed ancient bug where custom missiles launched using the launch table would not use the accuracy calculation and always be pin-point accurate diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineArcWelder.java b/src/main/java/com/hbm/inventory/gui/GUIMachineArcWelder.java index e37e7cf05..ae993fb9a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineArcWelder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineArcWelder.java @@ -30,6 +30,8 @@ public class GUIMachineArcWelder extends GuiInfoContainer { welder.tank.renderTankInfo(this, x, y, guiLeft + 35, guiTop + 63, 34, 16); this.drawElectricityInfo(this, x, y, guiLeft + 152, guiTop + 18, 16, 52, welder.getPower(), welder.getMaxPower()); + + this.drawCustomInfoStat(x, y, guiLeft + 78, guiTop + 67, 8, 8, guiLeft + 78, guiTop + 67, this.getUpgradeInfo(welder)); } @Override @@ -54,7 +56,8 @@ public class GUIMachineArcWelder extends GuiInfoContainer { if(welder.power >= welder.consumption) { drawTexturedModalRect(guiLeft + 156, guiTop + 4, 176, 52, 9, 12); } - + + this.drawInfoPanel(guiLeft + 78, guiTop + 67, 8, 8, 8); welder.tank.renderTank(guiLeft + 35, guiTop + 79, this.zLevel, 34, 16, 1); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineAssembler.java b/src/main/java/com/hbm/inventory/gui/GUIMachineAssembler.java index 31ebd23ec..795d8882b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineAssembler.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineAssembler.java @@ -41,12 +41,7 @@ public class GUIMachineAssembler extends GuiInfoContainer { String[] templateText = I18nUtil.resolveKeyArray("desc.gui.template"); this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 16, 16, 16, guiLeft - 8, guiTop + 16 + 16, templateText); - String[] upgradeText = new String[3]; - upgradeText[0] = I18nUtil.resolveKey("desc.gui.upgrade"); - upgradeText[1] = I18nUtil.resolveKey("desc.gui.upgrade.speed"); - upgradeText[2] = I18nUtil.resolveKey("desc.gui.upgrade.power"); - - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 141, guiTop + 40, 8, 8, guiLeft + 225, guiTop + 40 + 16 + 8, upgradeText); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 141, guiTop + 40, 8, 8, guiLeft + 225, guiTop + 40 + 16 + 8, this.getUpgradeInfo(assembler)); } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java index 1f8d20881..b07d3a19c 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java @@ -22,6 +22,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; @@ -102,11 +103,12 @@ public class GUIRBMKConsole extends GuiScreen { } } - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 6, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select red group" } ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 17, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select yellow group" } ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 28, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select green group" } ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 39, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select blue group" } ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 50, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select purple group" } ); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 6, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ EnumChatFormatting.RED + "Left click: Select red group", EnumChatFormatting.RED + "Right click: Assign red group" } ); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 17, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ EnumChatFormatting.YELLOW + "Left click: Select yellow group", EnumChatFormatting.YELLOW + "Right click: Assign yellow group" } ); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 28, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ EnumChatFormatting.GREEN + "Left click: Select green group", EnumChatFormatting.GREEN + "Right click: Assign green group" } ); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 39, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ EnumChatFormatting.BLUE + "Left click: Select blue group", EnumChatFormatting.BLUE + "Right click: Assign blue group" } ); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 50, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ EnumChatFormatting.LIGHT_PURPLE + "Left click: Select purple group", EnumChatFormatting.LIGHT_PURPLE + "Right click: Assign purple group" } ); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 70, guiTop + 82, 12, 12, mouseX, mouseY, new String[]{ "Cycle steam channel compressor setting" } ); } public void drawCustomInfoStat(int mouseX, int mouseY, int x, int y, int width, int height, int tPosX, int tPosY, String[] text) { @@ -116,9 +118,12 @@ public class GUIRBMKConsole extends GuiScreen { } @Override - protected void mouseClicked(int mouseX, int mouseY, int i) { - super.mouseClicked(mouseX, mouseY, i); - this.field.mouseClicked(mouseX, mouseY, i); + protected void mouseClicked(int mouseX, int mouseY, int key) { + super.mouseClicked(mouseX, mouseY, key); + this.field.mouseClicked(mouseX, mouseY, key); + + int LEFT_CLICK = 0; + int RIGTH_CLICK = 1; int bX = 86; int bY = 11; @@ -158,19 +163,54 @@ public class GUIRBMKConsole extends GuiScreen { return; } + //compressor + if(guiLeft + 70 <= mouseX && guiLeft + 70 + 12 > mouseX && guiTop + 82 < mouseY && guiTop + 82 + 12 >= mouseY) { + NBTTagCompound control = new NBTTagCompound(); + control.setBoolean("compressor", true); + List ints = new ArrayList(); + for(int j = 0; j < console.columns.length; j++) { + if(console.columns[j] != null && console.columns[j].type == ColumnType.BOILER && this.selection[j]) { + ints.add(j); + } + } + int[] cols = new int[ints.size()]; + for(int i = 0; i < cols.length; i++) cols[i] = ints.get(i); + control.setIntArray("cols", cols); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(control, console.xCoord, console.yCoord, console.zCoord)); + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1F)); + } + //select color groups for(int k = 0; k < 5; k++) { if(guiLeft + 6 + k * 11 <= mouseX && guiLeft + 6 + k * 11 + 10 > mouseX && guiTop + 70 < mouseY && guiTop + 70 + 10 >= mouseY) { - this.selection = new boolean[15 * 15]; - for(int j = 0; j < console.columns.length; j++) { + if(key == LEFT_CLICK) { + this.selection = new boolean[15 * 15]; - if(console.columns[j] != null && console.columns[j].type == ColumnType.CONTROL && console.columns[j].data.getShort("color") == k) { - this.selection[j] = true; + for(int j = 0; j < console.columns.length; j++) { + + if(console.columns[j] != null && console.columns[j].type == ColumnType.CONTROL && console.columns[j].data.getShort("color") == k) { + this.selection[j] = true; + } } } + if(key == RIGTH_CLICK) { + NBTTagCompound control = new NBTTagCompound(); + control.setByte("assignColor", (byte) k); + List ints = new ArrayList(); + for(int j = 0; j < console.columns.length; j++) { + if(console.columns[j] != null && console.columns[j].type == ColumnType.CONTROL && this.selection[j]) { + ints.add(j); + } + } + int[] cols = new int[ints.size()]; + for(int i = 0; i < cols.length; i++) cols[i] = ints.get(i); + control.setIntArray("cols", cols); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(control, console.xCoord, console.yCoord, console.zCoord)); + } + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 0.8F + k * 0.1F)); return; } @@ -358,6 +398,41 @@ public class GUIRBMKConsole extends GuiScreen { drawTexturedModalRect(guiLeft + x, guiTop + y, 0, 192, 10, 10); } + int highest = Integer.MIN_VALUE; + int lowest = Integer.MAX_VALUE; + + for(int i : console.fluxBuffer) { + if(i > highest) highest = i; + if(i < lowest) lowest = i; + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glLineWidth(2F); + Tessellator tess = Tessellator.instance; + tess.startDrawing(GL11.GL_LINES); + tess.setColorOpaque_I(0x00ff00); + int range = highest - lowest; + for(int i = 0; i < console.fluxBuffer.length - 1; i++) { + for(int j = 0; j < 2; j++) { + int k = i + j; + int flux = console.fluxBuffer[k]; + double x = guiLeft + 7 + k * 74D / console.fluxBuffer.length; + double y = guiTop + 127 - (flux - lowest) * 24D / Math.max(range, 1); + tess.addVertex(x, y, this.zLevel + 10); + } + } + tess.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glPushMatrix(); + double scale = 0.5D; + GL11.glScaled(scale, scale, 1); + this.fontRendererObj.drawString(highest + "", (int) ((guiLeft + 8) / scale), (int) ((guiTop + 98) / scale), 0x00ff00); + this.fontRendererObj.drawString(highest + "", (int) ((guiLeft + 80 - this.fontRendererObj.getStringWidth(highest + "") * scale) / scale), (int) ((guiTop + 98) / scale), 0x00ff00); + this.fontRendererObj.drawString(lowest + "", (int) ((guiLeft + 8) / scale), (int) ((guiTop + 133 - this.fontRendererObj.FONT_HEIGHT * scale) / scale), 0x00ff00); + this.fontRendererObj.drawString(lowest + "", (int) ((guiLeft + 80 - this.fontRendererObj.getStringWidth(lowest + "") * scale) / scale), (int) ((guiTop + 133 - this.fontRendererObj.FONT_HEIGHT * scale) / scale), 0x00ff00); + GL11.glPopMatrix(); + this.field.drawTextBox(); } diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index 1ae9a28e9..51bc6d957 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -1,5 +1,6 @@ package com.hbm.inventory.gui; +import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; @@ -7,8 +8,11 @@ import java.util.List; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.RefStrings; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -18,6 +22,7 @@ import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; public abstract class GuiInfoContainer extends GuiContainer { @@ -45,6 +50,33 @@ public abstract class GuiInfoContainer extends GuiContainer { this.func_146283_a(Arrays.asList(text), x, y); } + /** Automatically grabs upgrade info out of the tile entity if it's a IUpgradeInfoProvider and crams the available info into a list for display. Automation, yeah! */ + public List getUpgradeInfo(TileEntity tile) { + List lines = new ArrayList(); + + if(tile instanceof IUpgradeInfoProvider) { + IUpgradeInfoProvider provider = (IUpgradeInfoProvider) tile; + + lines.add(I18nUtil.resolveKey("upgrade.gui.title")); + + for(UpgradeType type : UpgradeType.values()) { + if(provider.canProvideInfo(type, 0, false)) { + int maxLevel = provider.getMaxLevel(type); + switch(type) { + case SPEED: lines.add(I18nUtil.resolveKey("upgrade.gui.speed", maxLevel)); break; + case POWER: lines.add(I18nUtil.resolveKey("upgrade.gui.power", maxLevel)); break; + case EFFECT: lines.add(I18nUtil.resolveKey("upgrade.gui.effectiveness", maxLevel)); break; + case AFTERBURN: lines.add(I18nUtil.resolveKey("upgrade.gui.afterburner", maxLevel)); break; + case OVERDRIVE: lines.add(I18nUtil.resolveKey("upgrade.gui.overdrive", maxLevel)); break; + default: break; + } + } + } + } + + return lines; + } + @Deprecated public void drawCustomInfo(GuiInfoContainer gui, int mouseX, int mouseY, int x, int y, int width, int height, String[] text) { if(x <= mouseX && x + width > mouseX && y < mouseY && y + height >= mouseY) diff --git a/src/main/java/com/hbm/inventory/recipes/CompressorRecipes.java b/src/main/java/com/hbm/inventory/recipes/CompressorRecipes.java index c1cc077d9..9b5ef555d 100644 --- a/src/main/java/com/hbm/inventory/recipes/CompressorRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CompressorRecipes.java @@ -25,6 +25,8 @@ public class CompressorRecipes extends SerializableRecipe { recipes.put(new Pair(Fluids.PETROLEUM, 0), new CompressorRecipe(2_000, new FluidStack(Fluids.PETROLEUM, 2_000, 1), 20)); recipes.put(new Pair(Fluids.PETROLEUM, 1), new CompressorRecipe(2_000, new FluidStack(Fluids.LPG, 1_000, 0), 20)); + + recipes.put(new Pair(Fluids.BLOOD, 3), new CompressorRecipe(1_000, new FluidStack(Fluids.OIL, 500, 0), 100)); } public static class CompressorRecipe { diff --git a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java index 8c8396573..00ecd8ab1 100644 --- a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java +++ b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java @@ -3,9 +3,22 @@ package com.hbm.tileentity; import java.util.List; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.util.I18nUtil; + +import net.minecraft.block.Block; +import net.minecraft.util.EnumChatFormatting; public interface IUpgradeInfoProvider { + /** If any of the automated display stuff should be applied for this upgrade. A level of 0 is used by the GUI's indicator, as opposed to the item tooltips */ public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo); public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo); + public int getMaxLevel(UpgradeType type); + + public static String getStandardLabel(Block block) { + return EnumChatFormatting.GREEN.YELLOW + ">>> " + I18nUtil.resolveKey(block.getUnlocalizedName() + ".name") + " <<<"; + } + + public static final String KEY_CONSUMPTION = "upgrade.consumption"; + public static final String KEY_SPEED = "upgrade.speed"; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java index aafd90a83..920fd6458 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.machine; +import java.util.List; + +import com.hbm.blocks.ModBlocks; import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.inventory.UpgradeManager; @@ -8,7 +11,9 @@ import com.hbm.inventory.gui.GUIFurnaceIron; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.module.ModuleBurnTime; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -19,10 +24,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUIProvider { +public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUIProvider, IUpgradeInfoProvider { public int maxBurnTime; public int burnTime; @@ -234,4 +240,23 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.furnace_iron)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_SPEED, "-" + (level * 50 / 3) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index 669e4c71a..a2933ca1d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -1,6 +1,9 @@ package com.hbm.tileentity.machine; +import java.util.List; + import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMachineArcWelder; import com.hbm.inventory.fluid.Fluids; @@ -14,7 +17,9 @@ import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IConditionalInvAccess; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -30,10 +35,11 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineArcWelder extends TileEntityMachineBase implements IEnergyUser, IFluidStandardReceiver, IConditionalInvAccess, IGUIProvider { +public class TileEntityMachineArcWelder extends TileEntityMachineBase implements IEnergyUser, IFluidStandardReceiver, IConditionalInvAccess, IGUIProvider, IUpgradeInfoProvider { public long power; public long maxPower = 2_000; @@ -340,4 +346,29 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_electric_furnace_off)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_SPEED, "-" + (level * 100 / 6) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 100 / 6) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_SPEED, "+" + (level * 100 / 3) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java index 3c0893c5f..cddb1a40f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine; +import java.util.List; import java.util.Random; import com.hbm.blocks.BlockDummyable; @@ -14,6 +15,9 @@ import com.hbm.items.machine.ItemAssemblyTemplate; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IBatteryItem; @@ -25,10 +29,11 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase { +public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase implements IUpgradeInfoProvider { public int recipe = -1; @@ -265,4 +270,33 @@ public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase { public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineAssembler(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembler)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_SPEED, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 300) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 30) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_SPEED, "+" + (level * 5) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index 3f7413677..f838e1082 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -88,7 +88,7 @@ public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase { this.speed -= speedLevel * 15; this.consumption += speedLevel * 300; this.speed += powerLevel * 5; - this.consumption -= powerLevel * 30; + this.consumption -= powerLevel * 20; this.speed /= (overLevel + 1); this.consumption *= (overLevel + 1); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index edc19ee83..d78b87c9f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -124,7 +124,7 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements this.speed -= speedLevel * 25; this.consumption += speedLevel * 300; this.speed += powerLevel * 5; - this.consumption -= powerLevel * 30; + this.consumption -= powerLevel * 20; this.speed /= (overLevel + 1); this.consumption *= (overLevel + 1); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java index 89be677fc..fa99ad805 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java @@ -84,6 +84,7 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement if(rec != null) timeBase = rec.duration; //there is a reason to do this but i'm not telling you + // ^ a few months later i have to wonder what the fuck this guy was on about, and if i ever see him i will punch him in the nuts if(timeBase == this.processTimeBase) this.processTime = speedLevel == 3 ? 10 : speedLevel == 2 ? 20 : speedLevel == 1 ? 60 : timeBase; else this.processTime = timeBase / (speedLevel + 1); this.powerRequirement = this.powerRequirementBase / (powerLevel + 1); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 4c546e019..8757970f5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -277,14 +277,21 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl @Override public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { - info.add(EnumChatFormatting.GREEN.YELLOW + ">>> " + I18nUtil.resolveKey(ModBlocks.machine_electric_furnace_off.getUnlocalizedName() + ".name") + " <<<"); + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_electric_furnace_off)); if(type == UpgradeType.SPEED) { - info.add(EnumChatFormatting.GREEN + "Process time -" + (level * 25) + "%"); - info.add(EnumChatFormatting.RED + "Consumption +" + (level * 100) + "%"); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_SPEED, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); } if(type == UpgradeType.POWER) { - info.add(EnumChatFormatting.GREEN + "Consumption -" + (level * 30) + "%"); - info.add(EnumChatFormatting.RED + "Process time +" + (level * 10) + "%"); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 30) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_SPEED, "+" + (level * 10) + "%")); } } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + return 0; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java index 44baadde9..9c96a4893 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java @@ -263,17 +263,21 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I public void receiveControl(NBTTagCompound data) { if(data.hasKey("compression")) { - - FluidType type = steam.getTankType(); - if(type == Fluids.STEAM) { steam.setTankType(Fluids.HOTSTEAM); steam.setFill(steam.getFill() / 10); } - if(type == Fluids.HOTSTEAM) { steam.setTankType(Fluids.SUPERHOTSTEAM); steam.setFill(steam.getFill() / 10); } - if(type == Fluids.SUPERHOTSTEAM) { steam.setTankType(Fluids.ULTRAHOTSTEAM); steam.setFill(steam.getFill() / 10); } - if(type == Fluids.ULTRAHOTSTEAM) { steam.setTankType(Fluids.STEAM); steam.setFill(Math.min(steam.getFill() * 1000, steam.getMaxFill())); } - - this.markDirty(); + this.cyceCompressor(); } } + public void cyceCompressor() { + + FluidType type = steam.getTankType(); + if(type == Fluids.STEAM) { steam.setTankType(Fluids.HOTSTEAM); steam.setFill(steam.getFill() / 10); } + if(type == Fluids.HOTSTEAM) { steam.setTankType(Fluids.SUPERHOTSTEAM); steam.setFill(steam.getFill() / 10); } + if(type == Fluids.SUPERHOTSTEAM) { steam.setTankType(Fluids.ULTRAHOTSTEAM); steam.setFill(steam.getFill() / 10); } + if(type == Fluids.ULTRAHOTSTEAM) { steam.setTankType(Fluids.STEAM); steam.setFill(Math.min(steam.getFill() * 1000, steam.getMaxFill())); } + + this.markDirty(); + } + @Override public void onMelt(int reduce) { diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index dce56b111..ee5690703 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -12,6 +12,7 @@ import com.hbm.inventory.gui.GUIRBMKConsole; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor; +import com.hbm.util.EnumUtil; import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; @@ -33,7 +34,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon private int targetY; private int targetZ; - public int[] fluxBuffer = new int[20]; + public static final int fluxDisplayBuffer = 60; + public int[] fluxBuffer = new int[fluxDisplayBuffer]; //made this one-dimensional because it's a lot easier to serialize public RBMKColumn[] columns = new RBMKColumn[15 * 15]; @@ -104,7 +106,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon this.fluxBuffer[i] = this.fluxBuffer[i + 1]; } - this.fluxBuffer[19] = (int) flux; + this.fluxBuffer[this.fluxBuffer.length - 1] = (int) flux; } @SuppressWarnings("incomplete-switch") //shut up @@ -287,6 +289,40 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon Integer[] cols = list.toArray(new Integer[0]); this.screens[slot].columns = cols; } + + if(data.hasKey("assignColor")) { + int color = data.getByte("assignColor"); + int[] cols = data.getIntArray("cols"); + + for(int i : cols) { + int x = i % 15 - 7; + int z = i / 15 - 7; + + TileEntity te = worldObj.getTileEntity(targetX + x, targetY, targetZ + z); + + if(te instanceof TileEntityRBMKControlManual) { + TileEntityRBMKControlManual rod = (TileEntityRBMKControlManual) te; + rod.color = EnumUtil.grabEnumSafely(RBMKColor.class, color); + te.markDirty(); + } + } + } + + if(data.hasKey("compressor")) { + int[] cols = data.getIntArray("cols"); + + for(int i : cols) { + int x = i % 15 - 7; + int z = i / 15 - 7; + + TileEntity te = worldObj.getTileEntity(targetX + x, targetY, targetZ + z); + + if(te instanceof TileEntityRBMKBoiler) { + TileEntityRBMKBoiler rod = (TileEntityRBMKBoiler) te; + rod.cyceCompressor(); + } + } + } } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 9cd2d7a8f..8edc158e4 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4617,6 +4617,9 @@ turret.off=AUS turret.on=AN turret.players=Spieler anzielen: %s +upgrade.consumption=Verbrauch %s +upgrade.speed=Verarbeitungszeit %s + wavelengths.name.ir=Infrarot wavelengths.name.visible=Sichtbares Licht wavelengths.name.uv=Ultraviolett diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 101515558..5d2ef5a8d 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -885,16 +885,11 @@ desc.gui.template=§9Templates§r$Templates can be made by$using the Machine Tem desc.gui.turbinegas.automode=§2Automatic Turbine Throttling Mode§r$By clicking the "AUTO" button, the turbine$will automatically adjust the power production$based on the power required from the network desc.gui.turbinegas.fuels=§6Accepted fuels:§r desc.gui.turbinegas.warning=§cFuel or lubricant level low!§r -desc.gui.upgrade=§lAcceptable Upgrades:§r -desc.gui.upgrade.afterburner= * §dAfterburner§r: Stacks to level 3 -desc.gui.upgrade.effectiveness= * §aEffectiveness§r: Stacks to level 3 -desc.gui.upgrade.overdrive= * §7Overdrive§r: Stacks to level 3 -desc.gui.upgrade.power= * §1Power-Saving§r: Stacks to level 3 -desc.gui.upgrade.speed= * §4Speed§r: Stacks to level 3 desc.gui.zirnox.coolant=§3Coolant§r$CO2 transfers heat from the core to the water.$This will boil it into super dense steam.$The efficiency of cooling and steam production$is based on pressure. desc.gui.zirnox.pressure=§6Pressure§r$Pressure can be reduced by venting CO2.$However, too low a pressure, and cooling$efficiency and steam production will be reduced.$Look out for meltdowns! desc.gui.zirnox.warning1=§cError:§r Water is required for$the reactor to function properly! desc.gui.zirnox.warning2=§cError:§r CO2 is required for$the reactor to function properly! + desc.item.ammo.con_accuracy2=- Highly decreased accuracy desc.item.ammo.con_damage=- Highly decreased damage desc.item.ammo.con_heavy_wear=- Highly increased wear @@ -5624,6 +5619,16 @@ turret.off=OFF turret.on=ON turret.players=Target Players: %s +upgrade.consumption=Consumption %s +upgrade.speed=Process time %s + +upgrade.gui.title=§lAcceptable Upgrades:§r +upgrade.gui.afterburner= * §dAfterburner§r: Stacks to level %s +upgrade.gui.effectiveness= * §aEffectiveness§r: Stacks to level %s +upgrade.gui.overdrive= * §7Overdrive§r: Stacks to level %s +upgrade.gui.power= * §9Power-Saving§r: Stacks to level %s +upgrade.gui.speed= * §4Speed§r: Stacks to level %s + wavelengths.name.ir=Infrared wavelengths.name.visible=Visible Light wavelengths.name.uv=Ultraviolet diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_arc_welder.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_arc_welder.png index 14366acc325432628c0d5dd3f694de688a8539d3..82c982cfa2527ba924a7a5ec95b3209ea8d52aef 100644 GIT binary patch literal 2981 zcmb_eXH=8f7QKnVWEffo5JXBO3{n(=Fd{XPDhh~zC`DjI>L~a?K#&qg9$ktQK_Fm7 z0gXrqFcCu2s7Mh+A+$jvf)Wy%NC@P8ao(F>@2xd!*1Lc1J!_qH?%8{vZ{IJ?$)hzJWiR}{43P^VJ?_}VWHoQudf$&<=NH z#sb|Ud}rAq-Frq)&W)0;*H{xoOILqSe=5&v*BNNCN2?@X$+&$`;;KQQoX&iz$+d8_ z(&7G5*=a)PDIaXRPUrA@v4*EBUAfJ#WP3Djy$-r<$mxESw>cpx@0q@0;5NN6jSnM{ zv=;3!gvT#s=q{{H{UOp|>wFA-d_<48aYvUf-^5v-bC~`}r>&g6{%)V)aeRWLW0qvs zsKkYurnp@>%Tg$kdA!G)>E|2ktH_b1$&LDUQnd0(v@u?NXkrY#Juyj_vXqfZ89AGq zJtEDI>;BaB=CUpFe#3y;F-d=#0=?sIXZ7?w#S12CaEIHg@{Agnh&SJSjzpt__mvcDBS%DADZBAz z7xgdL59QY7e`!gAG{TzCQI5LzOr0Grg&z%Jn$6lOIr%Uq%n?J99+IOBMLu9+>Ua-J;OlnNcWERUHh8yw_1e`T@a7 z{CRQNu@eb%`1)qe8U@pzChSYlm z>%;1?z*j9h2DnckF?&7zfVnEjDVf=k@c6ocE>W~q0;1>c5_p_7pQ0`X^OrEF& z2Yx3D1v|X6MVw$mJ3)@d4ZhsM+>CC!Dey!9o6fF8^uiaJZ=DjYUN0s#t;7tM=x_4_ zQ7DipzeiwrXpCgwDvZ>OA>B0u@hxJ{|ET-VuEe#t?Kwh_#I!h1BraVKn7oB?Pkl~X zu`#e>MMk_QJA_v1gmZgZ%0etzC@!M+ z(*is2;-ZI@0=@oBWy>xk$7C^p~E{|M_cZF9@RF0y;5I zs$!|+mQbsID}OHY)`eP>khZ>@uGJ;a1{Zo9p8gk9QTVbsB>Zno0O4U&|2HaGuI~)cl^*YZ);^ReMH@XirVO z)~6VezAb_qqwJy|N()TCq;HxTV}{swO$kPD zpwBkUUG%YHtv=`?_eDz-rj-XGKmd~ydL@e|_;l^s1YK}|wduoDwfGJP>0i99d0eH6 zQ3cOrU@+7D(VRvFoOqZPkW-2OaOiDz-*ua1PNsQp= zW2(YaGNa$yH3+-^U@VF8psI^I2m99L*k1Gx=AJmt21gyWh>(Ll`ATIR-F2Wb$Ci>* zE|dKFonB3jSG^15tm@qXb=;3nm%~j&4l<3-_WJFrE!*;YmAKb$jg2`Ud&@oRkA8Dt zW2S0nfw8nx$9`hB7=uy`+($HdT7+irhS<2e;rzTjX>)oaoZw6HT{4l6Vpe)m+^08?|MG0PE^k6m2>?Z5O* zzMCB`$tA13^HbU9ynOcE)t8;OIGBjoK#wih-}epxNe+;PQF=}z>Zqr1k+ z#_!$f1P^mw$mm2cZxw1ZKUsivI3X?N^r}P@)J-<7Qs*3qmac$!$`#=HXV1U?g)5Rq zPc0^h5G}6IMj2`q;ZCsDgQO+kWC{m&DmvCL0V4WVlV}Z!Wd;XL_uZ;@PftR_Zc~KB z`80|G4I2@n>jE}mcnMr!RCrD%20WtEEMrn!%N%W41Lo4Qlo58j$;Y*|wMKSZ{!Lx) zN42#_naQnTnq_zy=mFkF`RRPZ@uIhB!43n%>7$7=eCW63&xN+shaHAqP_aCs;`S$U z7}SiQNW9>Xb&}M%_vw9WdVaCZB$RBmv}~FP&~9vvrqO7sdk1&qNUPHbks{Ir}*(=gj-cEo3s; z)2!{w7pkI?(rXF!>Clwu`_m~df2H()x%lu&N#Q-zhK2{_Nl`(_gsRkoQiw~bnF*%* zwc)R`B-x$E5zMhMS#+*rB{sZC5{q?1+*IO>{A^vp$8Cj}2Ou2{DTx4(L;cmT24!V3 z-f)@!NL7k`VM0P1{vk#7QV?T3>I7N?p9%XL6@}Le`(0&Y@b|UhF!NK^nCSf?e-d5$ z<^aJ>vYW zQA@Sp(48NaW6iw12*r=!_b46@oDC7UHc+u+K@O+kuMHy3C;T~N|Bu7;kN|duF|v7e SwRBim&(7M>>Y;`2um1w3mmDwv literal 2952 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 diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_console.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_console.png index 8771329375e75fd9e63ccd3ce38691e5f6f7106f..5222274f917d11bd982ed2decc290c11654942b3 100644 GIT binary patch literal 6651 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 pii(M~yl5b{TI@00c{Q9=186Rwdngd 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 O1<=(r(kNAPi25(&%t8JD From 1d92906dd7161779185f2d1949fc690d014429ea Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 10 Dec 2023 18:58:26 +0100 Subject: [PATCH 08/10] upgrade crap, funny new stamps --- changelog | 6 + .../handler/guncfg/GunDetonatorFactory.java | 1 + .../handler/nei/ExposureChamberHandler.java | 27 ++++ .../hbm/handler/nei/PressRecipeHandler.java | 2 +- .../inventory/recipes/AssemblerRecipes.java | 11 ++ .../recipes/ExposureChamberRecipes.java | 20 +++ .../hbm/inventory/recipes/PressRecipes.java | 12 +- src/main/java/com/hbm/items/ItemEnums.java | 4 + src/main/java/com/hbm/items/ModItems.java | 6 + .../java/com/hbm/items/machine/ItemStamp.java | 29 +++- .../com/hbm/items/machine/ItemStampBook.java | 42 ++++++ .../java/com/hbm/main/CraftingManager.java | 2 +- .../java/com/hbm/main/ModEventHandler.java | 15 ++- src/main/java/com/hbm/main/NEIConfig.java | 1 + .../tileentity/RenderExposureChamber.java | 94 ++++++++++++- .../hbm/tileentity/IUpgradeInfoProvider.java | 7 +- .../machine/TileEntityElectrolyser.java | 29 +++- .../machine/TileEntityFurnaceIron.java | 2 +- .../machine/TileEntityMachineArcWelder.java | 4 +- .../machine/TileEntityMachineAssembler.java | 6 +- .../machine/TileEntityMachineAssemfac.java | 37 ++++- .../machine/TileEntityMachineCentrifuge.java | 37 ++++- .../machine/TileEntityMachineChemfac.java | 36 ++++- .../machine/TileEntityMachineChemplant.java | 36 ++++- .../machine/TileEntityMachineCompressor.java | 39 +++++- .../TileEntityMachineCrystallizer.java | 127 ++++++++---------- .../machine/TileEntityMachineEPress.java | 27 +++- .../TileEntityMachineElectricFurnace.java | 4 +- .../machine/TileEntityMachineExcavator.java | 29 +++- .../TileEntityMachineExposureChamber.java | 85 +++++++++++- .../machine/TileEntityMachineMiningLaser.java | 42 +++++- .../machine/TileEntityMachineMixer.java | 38 +++++- .../machine/TileEntityMachineTurbofan.java | 25 +++- .../oil/TileEntityMachineFrackingTower.java | 25 ++++ .../oil/TileEntityMachineGasFlare.java | 29 +++- .../oil/TileEntityMachineLiquefactor.java | 31 ++++- .../machine/oil/TileEntityMachineOilWell.java | 25 ++++ .../oil/TileEntityMachinePumpjack.java | 25 ++++ .../oil/TileEntityMachineSolidifier.java | 32 ++++- .../machine/oil/TileEntityOilDrillBase.java | 17 ++- .../turret/TileEntityTurretMaxwell.java | 43 +++++- .../generator/room/TestDungeonRoom8.java | 17 ++- src/main/resources/assets/hbm/lang/de_DE.lang | 18 +++ src/main/resources/assets/hbm/lang/en_US.lang | 25 +++- .../hbm/textures/items/fuel_tank_small.png | Bin 306 -> 325 bytes .../assets/hbm/textures/items/page_of_.png | Bin 0 -> 241 bytes .../assets/hbm/textures/items/stamp_book.png | Bin 0 -> 685 bytes .../models/machines/exposure_chamber.png | Bin 6849 -> 6848 bytes 48 files changed, 1047 insertions(+), 122 deletions(-) create mode 100644 src/main/java/com/hbm/handler/nei/ExposureChamberHandler.java create mode 100644 src/main/java/com/hbm/items/machine/ItemStampBook.java create mode 100644 src/main/resources/assets/hbm/textures/items/page_of_.png create mode 100644 src/main/resources/assets/hbm/textures/items/stamp_book.png diff --git a/changelog b/changelog index b0650e213..57b1ddfe2 100644 --- a/changelog +++ b/changelog @@ -12,6 +12,10 @@ * Stylish as hell * Decoy missile * A cheap tier 1 missile that shows up on radar screens as tier 4 (eg. nuclear) missiles +* Printing press stamps + * 8 different stamps for printing certain pages + * If a meteor dungeon safe is generated without a black book inside, it will generate tow random stamps instead + * With all 8 stamps, allows you to print your own black book ## Changed * Reduced the blast resistance of the large doors from absurdly high to still very but not quite as high @@ -36,6 +40,8 @@ * The flux display is now functional. It will display the flux curve of the last 30 seconds, as well as labels for the total flux level. * With the color assigning buttons and the flux display finished, the console is now finally complete * Compressing blood at 4 PU now turns it into crude oil at a ratio of 2:1 +* Increased the cap for the overdrive upgrade in acidizers, tier 2 should now yield the proper amount and tier 3 should now be better than tier 2 +* The tooltip of valid upgrades now changes when a compatible machine GUI is open ## Fixed * Fixed ancient bug where custom missiles launched using the launch table would not use the accuracy calculation and always be pin-point accurate diff --git a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java index 093a3d90b..2d76d18e6 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java @@ -60,6 +60,7 @@ public class GunDetonatorFactory { config.config.add(BulletConfigSyncingUtil.G12_DU); config.config.add(BulletConfigSyncingUtil.G12_SLEEK); config.config.add(BulletConfigSyncingUtil.G12_AM); + config.config.add(BulletConfigSyncingUtil.G12_PERCUSSION); config.config.add(BulletConfigSyncingUtil.NUKE_NORMAL); config.config.add(BulletConfigSyncingUtil.NUKE_LOW); config.config.add(BulletConfigSyncingUtil.NUKE_SAFE); diff --git a/src/main/java/com/hbm/handler/nei/ExposureChamberHandler.java b/src/main/java/com/hbm/handler/nei/ExposureChamberHandler.java new file mode 100644 index 000000000..4969763e4 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/ExposureChamberHandler.java @@ -0,0 +1,27 @@ +package com.hbm.handler.nei; + +import java.awt.Rectangle; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.gui.GUIMachineExposureChamber; +import com.hbm.inventory.recipes.ExposureChamberRecipes; + +public class ExposureChamberHandler extends NEIUniversalHandler { + + public ExposureChamberHandler() { + super("Exposure Chamber", ModBlocks.machine_exposure_chamber, ExposureChamberRecipes.getRecipes()); + } + + @Override + public String getKey() { + return "ntmExposure"; + } + + @Override + public void loadTransferRects() { + super.loadTransferRects(); + transferRectsGui.add(new RecipeTransferRect(new Rectangle(31, 28, 41, 10), "ntmExposure")); + guiGui.add(GUIMachineExposureChamber.class); + RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + } +} diff --git a/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java b/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java index cc776c8fd..fbc14c5cd 100644 --- a/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java +++ b/src/main/java/com/hbm/handler/nei/PressRecipeHandler.java @@ -110,7 +110,7 @@ public class PressRecipeHandler extends TemplateRecipeHandler { if(in.matchesRecipe(ingredient, true)) this.arecipes.add(new SmeltingSet(ItemStamp.stamps.get(recipe.getKey().getValue()), new ComparableStack(ingredient), recipe.getValue())); - else if(ingredient.getItem() instanceof ItemStamp && ((ItemStamp)ingredient.getItem()).type == stamp) + else if(ingredient.getItem() instanceof ItemStamp && ((ItemStamp)ingredient.getItem()).getStampType(ingredient.getItem(), ingredient.getItemDamage()) == stamp) this.arecipes.add(new SmeltingSet(ingredient, recipe.getKey().getKey(), recipe.getValue())); } } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 6e69849c6..33b9a227b 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -998,6 +998,17 @@ public class AssemblerRecipes { new ComparableStack(ModItems.coil_copper, 16), new ComparableStack(ModItems.circuit_gold, 2) }, 200); + + makeRecipe(new ComparableStack(ModBlocks.machine_exposure_chamber, 1), new AStack[] { + !exp ? new OreDictStack(AL.plateCast(), 12) : new OreDictStack(AL.heavyComp(), 1), + new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), + new OreDictStack(ANY_HARDPLASTIC.ingot(), 12), + new OreDictStack(ALLOY.wireDense(), 32), + new ComparableStack(ModItems.motor_desh, 2), + new ComparableStack(ModItems.circuit_gold, 3), + new ComparableStack(ModBlocks.capacitor_tantalium, 1), + new ComparableStack(ModBlocks.glass_quartz, 16) + }, 200); makeRecipe(new ComparableStack(ModItems.euphemium_capacitor, 1), new AStack[] { diff --git a/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java b/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java index d7e3ca925..cb42e3140 100644 --- a/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ExposureChamberRecipes.java @@ -2,6 +2,7 @@ package com.hbm.inventory.recipes; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import com.google.gson.JsonElement; @@ -33,6 +34,25 @@ public class ExposureChamberRecipes extends SerializableRecipe { return null; } + public static HashMap getRecipes() { + + HashMap recipes = new HashMap(); + + for(ExposureChamberRecipe recipe : ExposureChamberRecipes.recipes) { + + Object[] array = new Object[2]; + + array[1] = recipe.particle; + AStack stack = recipe.ingredient.copy(); + stack.stacksize = 8; + array[0] = stack; + + recipes.put(array, recipe.output); + } + + return recipes; + } + @Override public String getFileName() { return "hbmExposureChamber.json"; diff --git a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java index 8c6498c8f..aa3449238 100644 --- a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java @@ -15,6 +15,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumBriquetteType; +import com.hbm.items.ItemEnums.EnumPages; import com.hbm.items.ItemAmmoEnums.Ammo357Magnum; import com.hbm.items.ItemAmmoEnums.Ammo556mm; import com.hbm.items.ItemAmmoEnums.AmmoLunaticSniper; @@ -40,7 +41,7 @@ public class PressRecipes extends SerializableRecipe { if(!(stamp.getItem() instanceof ItemStamp)) return null; - StampType type = ((ItemStamp) stamp.getItem()).type; + StampType type = ((ItemStamp) stamp.getItem()).getStampType(stamp.getItem(), stamp.getItemDamage()); for(Entry, ItemStack> recipe : recipes.entrySet()) { @@ -116,6 +117,15 @@ public class PressRecipes extends SerializableRecipe { makeRecipe(StampType.C50, new ComparableStack(ModItems.assembly_actionexpress), new ItemStack(ModItems.ammo_50ae, 12)); makeRecipe(StampType.C50, new ComparableStack(ModItems.assembly_luna), ModItems.ammo_luna_sniper.stackFromEnum(4, AmmoLunaticSniper.SABOT)); makeRecipe(StampType.C50, new ComparableStack(ModItems.assembly_762), new ItemStack(ModItems.ammo_762, 32)); + + makeRecipe(StampType.PRINTING1, new ComparableStack(Items.paper), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE1)); + makeRecipe(StampType.PRINTING2, new ComparableStack(Items.paper), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE2)); + makeRecipe(StampType.PRINTING3, new ComparableStack(Items.paper), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE3)); + makeRecipe(StampType.PRINTING4, new ComparableStack(Items.paper), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE4)); + makeRecipe(StampType.PRINTING5, new ComparableStack(Items.paper), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE5)); + makeRecipe(StampType.PRINTING6, new ComparableStack(Items.paper), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE6)); + makeRecipe(StampType.PRINTING7, new ComparableStack(Items.paper), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE7)); + makeRecipe(StampType.PRINTING8, new ComparableStack(Items.paper), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE8)); } public static void makeRecipe(StampType type, AStack in, Item out) { diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index 77f435b48..b4d48e009 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -61,4 +61,8 @@ public class ItemEnums { DIGAMMAUPONTOP, DIGAMMAFOROURRIGHT } + + public static enum EnumPages { + PAGE1, PAGE2, PAGE3, PAGE4, PAGE5, PAGE6, PAGE7, PAGE8 + } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 539beed9e..211768119 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -762,6 +762,7 @@ public class ModItems { public static Item stamp_desh_plate; public static Item stamp_desh_wire; public static Item stamp_desh_circuit; + public static Item stamp_book; public static Item stamp_357; public static Item stamp_44; @@ -2364,6 +2365,7 @@ public class ModItems { public static Item letter; public static Item book_secret; public static Item book_of_; + public static Item page_of_; public static Item burnt_bark; public static Item smoke1; @@ -3258,6 +3260,7 @@ public class ModItems { stamp_44 = new ItemStamp(1000, StampType.C44).setUnlocalizedName("stamp_44").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_44"); stamp_9 = new ItemStamp(1000, StampType.C9).setUnlocalizedName("stamp_9").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_9"); stamp_50 = new ItemStamp(1000, StampType.C50).setUnlocalizedName("stamp_50").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_50"); + stamp_book = new ItemStampBook().setUnlocalizedName("stamp_book").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":stamp_book"); stamp_desh_357 = new ItemStamp(0, StampType.C357).setUnlocalizedName("stamp_desh_357").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_357_desh"); stamp_desh_44 = new ItemStamp(0, StampType.C44).setUnlocalizedName("stamp_desh_44").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":stamp_44_desh"); @@ -5412,6 +5415,7 @@ public class ModItems { letter = new ItemStarterKit().setUnlocalizedName("letter").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":letter"); book_secret = new ItemCustomLore().setUnlocalizedName("book_secret").setCreativeTab(MainRegistry.polaroidID == 11 ? MainRegistry.consumableTab : null).setTextureName(RefStrings.MODID + ":book_secret"); book_of_ = new ItemBook().setUnlocalizedName("book_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":book_of_"); + page_of_ = new ItemEnumMulti(ItemEnums.EnumPages.class, true, false).setUnlocalizedName("page_of_").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":page_of_"); burnt_bark = new ItemCustomLore().setUnlocalizedName("burnt_bark").setCreativeTab(null).setTextureName(RefStrings.MODID + ":burnt_bark"); smoke1 = new Item().setUnlocalizedName("smoke1").setTextureName(RefStrings.MODID + ":smoke1"); @@ -6453,6 +6457,7 @@ public class ModItems { GameRegistry.registerItem(stamp_desh_44, stamp_desh_44.getUnlocalizedName()); GameRegistry.registerItem(stamp_desh_9, stamp_desh_9.getUnlocalizedName()); GameRegistry.registerItem(stamp_desh_50, stamp_desh_50.getUnlocalizedName()); + GameRegistry.registerItem(stamp_book, stamp_book.getUnlocalizedName()); //Molds GameRegistry.registerItem(mold_base, mold_base.getUnlocalizedName()); @@ -7988,6 +7993,7 @@ public class ModItems { GameRegistry.registerItem(glitch, glitch.getUnlocalizedName()); GameRegistry.registerItem(book_secret, book_secret.getUnlocalizedName()); GameRegistry.registerItem(book_of_, book_of_.getUnlocalizedName()); + GameRegistry.registerItem(page_of_, page_of_.getUnlocalizedName()); GameRegistry.registerItem(burnt_bark, burnt_bark.getUnlocalizedName()); //Kits diff --git a/src/main/java/com/hbm/items/machine/ItemStamp.java b/src/main/java/com/hbm/items/machine/ItemStamp.java index fe6986d90..75ed425fa 100644 --- a/src/main/java/com/hbm/items/machine/ItemStamp.java +++ b/src/main/java/com/hbm/items/machine/ItemStamp.java @@ -10,19 +10,27 @@ import net.minecraft.item.ItemStack; public class ItemStamp extends Item { - public StampType type; + protected StampType type; public static final HashMap> stamps = new HashMap(); public ItemStamp(int dura, StampType type) { this.setMaxDamage(dura); this.type = type; + if(type != null) { + this.addStampToList(this, 0, type); + } + } + + protected void addStampToList(Item item, int meta, StampType type) { List list = stamps.get(type); if(list == null) list = new ArrayList(); - list.add(new ItemStack(this)); + ItemStack stack = new ItemStack(item, 1, meta); + + list.add(stack); stamps.put(type, list); } @@ -32,16 +40,27 @@ public class ItemStamp extends Item { list.add("[CREATED USING TEMPLATE FOLDER]"); } - //TODO: give UFFR one (1) good boy token + /** Params can't take an ItemStack, for some reason it crashes during init */ + public StampType getStampType(Item item, int meta) { + return type; + } + public static enum StampType { FLAT, PLATE, WIRE, CIRCUIT, - //DISC, C357, C44, C50, - C9; + C9, + PRINTING1, + PRINTING2, + PRINTING3, + PRINTING4, + PRINTING5, + PRINTING6, + PRINTING7, + PRINTING8; } } diff --git a/src/main/java/com/hbm/items/machine/ItemStampBook.java b/src/main/java/com/hbm/items/machine/ItemStampBook.java new file mode 100644 index 000000000..6fa9906f6 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemStampBook.java @@ -0,0 +1,42 @@ +package com.hbm.items.machine; + +import java.util.List; +import java.util.Locale; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class ItemStampBook extends ItemStamp { + + public ItemStampBook() { + super(0, null); + + for(int i = 0; i < 8; i++) { + StampType type = getStampType(this, i); + this.addStampToList(this, i, type); + } + } + + @Override + public StampType getStampType(Item item, int meta) { + meta %= 8; + return StampType.values()[StampType.PRINTING1.ordinal() + meta]; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list) { + for(int i = 0; i < 8; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + StampType type = this.getStampType(stack.getItem(), stack.getItemDamage()); + return super.getUnlocalizedName() + "." + type.name().toLowerCase(Locale.US); + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 386706b30..a9ced44fa 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -606,7 +606,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.key, 1), new Object[] { " B", " B ", "P ", 'P', STEEL.plate(), 'B', ModItems.bolt_tungsten }); addRecipeAuto(new ItemStack(ModItems.key_kit, 1), new Object[] { "PKP", "DTD", "PKP", 'P', GOLD.plate(), 'K', ModItems.key, 'D', DESH.dust(), 'T', KEY_TOOL_SCREWDRIVER }); - addRecipeAuto(new ItemStack(ModItems.key_red, 1), new Object[] { "DSC", "SMS", "KSD", 'C', ModItems.circuit_targeting_tier4, 'M', Items.nether_star, 'K', ModItems.key, 'D', DESH.dust(), 'S', BIGMT.plate() }); + addRecipeAuto(new ItemStack(ModItems.key_red, 1), new Object[] { "RCA", "CIC", "KCR", 'R', KEY_RED, 'C', STAR.wireDense(), 'A', ModItems.gem_alexandrite, 'I', ModItems.ingot_chainsteel, 'K', ModItems.key }); addRecipeAuto(new ItemStack(ModItems.pin, 1), new Object[] { "W ", " W", " W", 'W', ModItems.wire_copper }); addRecipeAuto(new ItemStack(ModItems.padlock_rusty, 1), new Object[] { "I", "B", "I", 'I', IRON.ingot(), 'B', ModItems.bolt_tungsten }); addRecipeAuto(new ItemStack(ModItems.padlock, 1), new Object[] { " P ", "PBP", "PPP", 'P', STEEL.plate(), 'B', ModItems.bolt_tungsten }); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 944ea7587..d0ab5626f 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -4,11 +4,13 @@ import java.lang.reflect.Field; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Random; +import java.util.Set; import org.apache.commons.lang3.math.NumberUtils; import org.apache.logging.log4j.Level; @@ -1200,7 +1202,12 @@ public class ModEventHandler { } } - private static final String hash = "41eb77f138ce350932e33b6b26b233df9aad0c0c80c6a49cb9a54ddd8fae3f83"; + private static final Set hashes = new HashSet(); + + static { + hashes.add("41de5c372b0589bbdb80571e87efa95ea9e34b0d74c6005b8eab495b7afd9994"); + hashes.add("31da6223a100ed348ceb3254ceab67c9cc102cb2a04ac24de0df3ef3479b1036"); + } @SubscribeEvent public void onClickSign(PlayerInteractEvent event) { @@ -1210,14 +1217,14 @@ public class ModEventHandler { int z = event.z; World world = event.world; - if(!world.isRemote && event.action == Action.RIGHT_CLICK_BLOCK && world.getBlock(x, y, z) == Blocks.standing_sign) { + if(!world.isRemote && event.action == Action.RIGHT_CLICK_BLOCK && world.getTileEntity(x, y, z) instanceof TileEntitySign) { TileEntitySign sign = (TileEntitySign)world.getTileEntity(x, y, z); String result = smoosh(sign.signText[0], sign.signText[1], sign.signText[2], sign.signText[3]); - //System.out.println(result); + System.out.println(result); - if(result.equals(hash)) { + if(hashes.contains(result)) { world.func_147480_a(x, y, z, false); EntityItem entityitem = new EntityItem(world, x, y, z, new ItemStack(ModItems.bobmazon_hidden)); entityitem.delayBeforeCanPickup = 10; diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index dc6b9cc4a..1d1697804 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -77,6 +77,7 @@ public class NEIConfig implements IConfigureNEI { registerHandler(new ElectrolyserMetalHandler()); registerHandler(new AshpitHandler()); registerHandler(new ArcWelderHandler()); + registerHandler(new ExposureChamberHandler()); for(MachineConfiguration conf : CustomMachineConfigJSON.niceList) registerHandlerBypass(new CustomMachineHandler(conf)); diff --git a/src/main/java/com/hbm/render/tileentity/RenderExposureChamber.java b/src/main/java/com/hbm/render/tileentity/RenderExposureChamber.java index 7fc7528da..acfb9bbf9 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderExposureChamber.java +++ b/src/main/java/com/hbm/render/tileentity/RenderExposureChamber.java @@ -1,15 +1,26 @@ package com.hbm.render.tileentity; +import java.util.Random; + import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.render.util.BeamPronter; +import com.hbm.render.util.BeamPronter.EnumBeamType; +import com.hbm.render.util.BeamPronter.EnumWaveType; import com.hbm.tileentity.machine.TileEntityMachineExposureChamber; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; +import net.minecraftforge.client.IItemRenderer; -public class RenderExposureChamber extends TileEntitySpecialRenderer { +public class RenderExposureChamber extends TileEntitySpecialRenderer implements IItemRendererProvider { @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float interp) { @@ -34,6 +45,15 @@ public class RenderExposureChamber extends TileEntitySpecialRenderer { double rotation = chamber.prevRotation + (chamber.rotation - chamber.prevRotation) * interp; + GL11.glPushMatrix(); + GL11.glRotated(rotation, 0, 1, 0); + ResourceManager.exposure_chamber.renderPart("Magnets"); + GL11.glPopMatrix(); + + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + GL11.glDisable(GL11.GL_LIGHTING); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + if(chamber.isOn) { GL11.glPushMatrix(); GL11.glRotated(rotation / 2D, 0, 1, 0); @@ -42,14 +62,76 @@ public class RenderExposureChamber extends TileEntitySpecialRenderer { GL11.glPopMatrix(); } - GL11.glPushMatrix(); - GL11.glRotated(rotation, 0, 1, 0); - ResourceManager.exposure_chamber.renderPart("Magnets"); - GL11.glPopMatrix(); - GL11.glShadeModel(GL11.GL_FLAT); GL11.glEnable(GL11.GL_CULL_FACE); + + if(chamber.isOn) { + + int duration = 8; + Random rand = new Random(chamber.getWorldObj().getTotalWorldTime() / duration); + int chance = 2; + int color = chamber.getWorldObj().getTotalWorldTime() % duration >= duration / 2 ? 0x80d0ff : 0xffffff; + rand.nextInt(chance); //RNG behaves weirldy in the first iteration + if(rand.nextInt(chance) == 0) { + GL11.glPushMatrix(); + GL11.glTranslated(0, 3.675, -7.5); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, 5), EnumWaveType.RANDOM, EnumBeamType.LINE, color, 0xffffff, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.125F, 1, 0); + GL11.glPopMatrix(); + } + if(rand.nextInt(chance) == 0) { + GL11.glPushMatrix(); + GL11.glTranslated(1.1875, 2.5, -7.5); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, 5), EnumWaveType.RANDOM, EnumBeamType.LINE, color, 0xffffff, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.125F, 1, 0); + GL11.glPopMatrix(); + } + if(rand.nextInt(chance) == 0) { + GL11.glPushMatrix(); + GL11.glTranslated(-1.1875, 2.5, -7.5); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, 5), EnumWaveType.RANDOM, EnumBeamType.LINE, color, 0xffffff, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.125F, 1, 0); + GL11.glPopMatrix(); + } + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1.75, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 1.5, 0), EnumWaveType.RANDOM, EnumBeamType.LINE, 0x80d0ff, 0xffffff, (int)(System.currentTimeMillis() % 1000) / 50, 10, 0.125F, 1, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 1.5, 0), EnumWaveType.RANDOM, EnumBeamType.LINE, 0x8080ff, 0xffffff, (int)(System.currentTimeMillis() + 5 % 1000) / 50, 10, 0.125F, 1, 0); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, -1), EnumWaveType.SPIRAL, EnumBeamType.LINE, 0xffff80, 0xffffff, (int)(System.currentTimeMillis() % 360), 15, 0.125F, 1, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, -1), EnumWaveType.SPIRAL, EnumBeamType.LINE, 0xff8080, 0xffffff, (int)(System.currentTimeMillis() % 360) + 180, 15, 0.125F, 1, 0); + GL11.glPopMatrix(); + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopAttrib(); GL11.glPopMatrix(); } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_exposure_chamber); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(0, -1.5, 0); + GL11.glScaled(3, 3, 3); + } + public void renderCommon() { + GL11.glTranslated(1.5, 0, 0); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.exposure_chamber_tex); + ResourceManager.exposure_chamber.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_CULL_FACE); + }}; + } } diff --git a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java index 00ecd8ab1..f1a420b5f 100644 --- a/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java +++ b/src/main/java/com/hbm/tileentity/IUpgradeInfoProvider.java @@ -19,6 +19,11 @@ public interface IUpgradeInfoProvider { return EnumChatFormatting.GREEN.YELLOW + ">>> " + I18nUtil.resolveKey(block.getUnlocalizedName() + ".name") + " <<<"; } + public static final String KEY_ACID = "upgrade.acid"; + public static final String KEY_BURN = "upgrade.burn"; public static final String KEY_CONSUMPTION = "upgrade.consumption"; - public static final String KEY_SPEED = "upgrade.speed"; + public static final String KEY_DELAY = "upgrade.delay"; + public static final String KEY_EFFICIENCY = "upgrade.efficiency"; + public static final String KEY_FORTUNE = "upgrade.fortune"; + public static final String KEY_RANGE = "upgrade.range"; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 8d34ffa2c..04b147c79 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerElectrolyserFluid; @@ -25,8 +26,10 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CrucibleUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; @@ -41,11 +44,12 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityElectrolyser extends TileEntityMachineBase implements IEnergyUser, IFluidStandardTransceiver, IControlReceiver, IGUIProvider { +public class TileEntityElectrolyser extends TileEntityMachineBase implements IEnergyUser, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { public long power; public static final long maxPower = 20000000; @@ -489,4 +493,27 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_electrolyser)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 25) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java index 920fd6458..9a00a9bba 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java @@ -250,7 +250,7 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.furnace_iron)); if(type == UpgradeType.SPEED) { - info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_SPEED, "-" + (level * 50 / 3) + "%")); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 50 / 3) + "%")); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index a2933ca1d..d6211169b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -356,12 +356,12 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_electric_furnace_off)); if(type == UpgradeType.SPEED) { - info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_SPEED, "-" + (level * 100 / 6) + "%")); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 100 / 6) + "%")); info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); } if(type == UpgradeType.POWER) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 100 / 6) + "%")); - info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_SPEED, "+" + (level * 100 / 3) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 100 / 3) + "%")); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java index cddb1a40f..b549a6335 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java @@ -280,12 +280,12 @@ public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase i public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembler)); if(type == UpgradeType.SPEED) { - info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_SPEED, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 300) + "%")); } if(type == UpgradeType.POWER) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 30) + "%")); - info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_SPEED, "+" + (level * 5) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 5) + "%")); } if(type == UpgradeType.OVERDRIVE) { info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); @@ -296,7 +296,7 @@ public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase i public int getMaxLevel(UpgradeType type) { if(type == UpgradeType.SPEED) return 3; if(type == UpgradeType.POWER) return 3; - if(type == UpgradeType.OVERDRIVE) return 3; + if(type == UpgradeType.OVERDRIVE) return 9; return 0; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java index 407c74ad6..009bc53e7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java @@ -1,8 +1,10 @@ package com.hbm.tileentity.machine; +import java.util.List; import java.util.Random; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerAssemfac; import com.hbm.inventory.fluid.Fluids; @@ -10,6 +12,9 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIAssemfac; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; @@ -21,10 +26,11 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver { +public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver, IUpgradeInfoProvider { public AssemblerArm[] arms; @@ -421,4 +427,33 @@ public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase im public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAssemfac(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assemfac)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 15) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 300) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 30) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 5) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 6; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 12; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java index 8add21027..835324307 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.machine; +import java.util.List; + +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerCentrifuge; import com.hbm.inventory.gui.GUIMachineCentrifuge; @@ -9,7 +12,10 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import api.hbm.energy.IEnergyUser; import cpw.mods.fml.relauncher.Side; @@ -20,10 +26,11 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -public class TileEntityMachineCentrifuge extends TileEntityMachineBase implements IEnergyUser, IGUIProvider { +public class TileEntityMachineCentrifuge extends TileEntityMachineBase implements IEnergyUser, IGUIProvider, IUpgradeInfoProvider { public int progress; public long power; @@ -307,4 +314,32 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCentrifuge(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_centrifuge)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 100) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 3; + return 0; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index f838e1082..7f8a84d03 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Random; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerChemfac; import com.hbm.inventory.fluid.Fluids; @@ -13,6 +14,9 @@ import com.hbm.inventory.gui.GUIChemfac; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; @@ -23,10 +27,11 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase { +public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase implements IUpgradeInfoProvider { float rotSpeed; public float rot; @@ -346,4 +351,33 @@ public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase { public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIChemfac(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_chemfac)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 15) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 300) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 30) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 5) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 6; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 12; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index d78b87c9f..00523e45b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.RecipesCommon.AStack; @@ -21,7 +22,10 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; import com.hbm.util.fauxpointtwelve.DirPos; @@ -38,10 +42,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineChemplant extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidAcceptor, IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineChemplant extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidAcceptor, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider { public long power; public static final long maxPower = 100000; @@ -654,4 +659,33 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineChemplant(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_chemplant)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 300) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 30) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 5) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 9; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java index fa99ad805..9a05a00b5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java @@ -1,6 +1,9 @@ package com.hbm.tileentity.machine; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerCompressor; @@ -13,7 +16,10 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; @@ -26,11 +32,12 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCompressor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IEnergyUser, IFluidStandardTransceiver { +public class TileEntityMachineCompressor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IEnergyUser, IFluidStandardTransceiver, IUpgradeInfoProvider { public FluidTank[] tanks; public long power; @@ -85,7 +92,7 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement //there is a reason to do this but i'm not telling you // ^ a few months later i have to wonder what the fuck this guy was on about, and if i ever see him i will punch him in the nuts - if(timeBase == this.processTimeBase) this.processTime = speedLevel == 3 ? 10 : speedLevel == 2 ? 20 : speedLevel == 1 ? 60 : timeBase; + if(rec == null) this.processTime = speedLevel == 3 ? 10 : speedLevel == 2 ? 20 : speedLevel == 1 ? 60 : timeBase; else this.processTime = timeBase / (speedLevel + 1); this.powerRequirement = this.powerRequirementBase / (powerLevel + 1); this.processTime = this.processTime / (overLevel + 1); @@ -329,4 +336,32 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_compressor)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + "Recipe: "+ I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level == 3 ? 90 : level == 2 ? 80 : level == 1 ? 40 : 0) + "%")); + info.add(EnumChatFormatting.GREEN + "Generic compression: "+ I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 100 / (level + 1)) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 9; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index 7c19d40bb..18acf6556 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -1,17 +1,24 @@ package com.hbm.tileentity.machine; +import java.util.List; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerCrystallizer; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUICrystallizer; import com.hbm.inventory.recipes.CrystallizerRecipes; import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe; -import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IBatteryItem; @@ -26,10 +33,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IEnergyUser, IFluidStandardReceiver, IGUIProvider { +public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IEnergyUser, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider { public long power; public static final long maxPower = 1000000; @@ -63,6 +71,8 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme tank.setType(7, slots); tank.loadTank(3, 4, slots); + UpgradeManager.eval(slots, 5, 6); + for(int i = 0; i < getCycleCount(); i++) { if(canProcess()) { @@ -156,7 +166,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme else if(slots[2].stackSize + stack.stackSize <= slots[2].getMaxStackSize()) slots[2].stackSize += stack.stackSize; - tank.setFill(tank.getFill() - result.acidAmount); + tank.setFill(tank.getFill() - getRequiredAcid(result.acidAmount)); float freeChance = this.getFreeChance(); @@ -183,7 +193,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme if(slots[0].stackSize < result.itemAmount) return false; - if(tank.getFill() < result.acidAmount) return false; + if(tank.getFill() < getRequiredAcid(result.acidAmount)) return false; ItemStack stack = result.output.copy(); @@ -199,89 +209,39 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme } public int getRequiredAcid(int base) { - - for(int i = 5; i <= 6; i++) { - - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_1) - base *= 3; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_2) - base *= 4; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_3) - base *= 5; + int efficiency = Math.min(UpgradeManager.getLevel(UpgradeType.EFFECT), 3); + if(efficiency > 0) { + return base * (efficiency + 2); } - return base; } public float getFreeChance() { - - float chance = 0.0F; - - for(int i = 5; i <= 6; i++) { - - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_1) - chance += 0.05F; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_2) - chance += 0.1F; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_effect_3) - chance += 0.15F; + int efficiency = Math.min(UpgradeManager.getLevel(UpgradeType.EFFECT), 3); + if(efficiency > 0) { + return Math.min(efficiency * 0.05F, 0.15F); } - - return Math.min(chance, 0.15F); + return 0; } public short getDuration() { - - float durationMod = 1; CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0], tank.getTankType()); - int base = result != null ? result.duration : 600; - - for(int i = 5; i <= 6; i++) { - - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_speed_1) - durationMod -= 0.25F; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_speed_2) - durationMod -= 0.50F; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_speed_3) - durationMod -= 0.75F; + int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); + if(speed > 0) { + return (short) Math.ceil((base * Math.max(1F - 0.25F * speed, 0.25F))); } - - return (short) Math.ceil((base * Math.max(durationMod, 0.25F))); + return (short) base; } public int getPowerRequired() { - - int consumption = 0; - - for(int i = 5; i <= 6; i++) { - - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_speed_1) - consumption += 1000; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_speed_2) - consumption += 2000; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_speed_3) - consumption += 3000; - } - - return (int) (demand + Math.min(consumption, 3000)); + int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); + return (int) (demand + Math.min(speed * 1000, 3000)); } public float getCycleCount() { - - int cycles = 1; - - for(int i = 5; i <= 6; i++) { - - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_overdrive_1) - cycles += 2; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_overdrive_2) - cycles += 4; - if(slots[i] != null && slots[i].getItem() == ModItems.upgrade_overdrive_3) - cycles += 6; - } - - return Math.min(cycles, 4); + int speed = UpgradeManager.getLevel(UpgradeType.OVERDRIVE); + return Math.min(1 + speed * 2, 7); } public long getPowerScaled(int i) { @@ -388,4 +348,33 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrystallizer(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.EFFECT || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.turret_maxwell)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); + } + if(type == UpgradeType.EFFECT) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_EFFICIENCY, "+" + (level * 5) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_ACID, "+" + (level * 100 + 100) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.EFFECT) return 3; + if(type == UpgradeType.OVERDRIVE) return 2; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 01ba0af31..7e6b2c4cb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.machine; +import java.util.List; + +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMachineEPress; import com.hbm.inventory.gui.GUIMachineEPress; @@ -8,7 +11,9 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.items.machine.ItemStamp; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.I18nUtil; import api.hbm.energy.IEnergyUser; import cpw.mods.fml.relauncher.Side; @@ -19,10 +24,11 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineEPress extends TileEntityMachineBase implements IEnergyUser, IGUIProvider { +public class TileEntityMachineEPress extends TileEntityMachineBase implements IEnergyUser, IGUIProvider, IUpgradeInfoProvider { public long power = 0; public final static long maxPower = 50000; @@ -254,4 +260,23 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineEPress(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_epress)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (50 * level / 3) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 8757970f5..8626dcf6c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -279,12 +279,12 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_electric_furnace_off)); if(type == UpgradeType.SPEED) { - info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_SPEED, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); } if(type == UpgradeType.POWER) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 30) + "%")); - info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_SPEED, "+" + (level * 10) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 10) + "%")); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index 5ea2a2cbd..ac3095dd3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -24,9 +24,11 @@ import com.hbm.items.machine.ItemDrillbit.EnumDrillType; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Compat; import com.hbm.util.EnumUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.ItemStackUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -50,11 +52,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineExcavator extends TileEntityMachineBase implements IEnergyUser, IFluidStandardReceiver, IControlReceiver, IGUIProvider { +public class TileEntityMachineExcavator extends TileEntityMachineBase implements IEnergyUser, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { public static final long maxPower = 1_000_000; public long power; @@ -839,4 +842,28 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements public FluidTank[] getReceivingTanks() { return new FluidTank[] {tank}; } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembler)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 100 / (level / 2 + 1)) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java index c139e15c5..e8f98a245 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.machine; +import java.util.List; + +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMachineExposureChamber; import com.hbm.inventory.gui.GUIMachineExposureChamber; @@ -8,7 +11,10 @@ import com.hbm.inventory.recipes.ExposureChamberRecipes.ExposureChamberRecipe; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; @@ -17,14 +23,14 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineExposureChamber extends TileEntityMachineBase implements IGUIProvider, IEnergyUser { +public class TileEntityMachineExposureChamber extends TileEntityMachineBase implements IGUIProvider, IEnergyUser, IUpgradeInfoProvider { public long power; public static final long maxPower = 1_000_000; @@ -176,6 +182,52 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl return ExposureChamberRecipes.getRecipe(particle, ingredient); } + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + + //will only load new capsules if there's no cached particles, this should prevent clogging + + //accept items when the slots are already partially filled, i.e. applicable + if(i == 0 && slots[0] != null) return true; + if(i == 3 && slots[3] != null) return true; + + //if there's no particle stored, use the un-consumed capsule for reference + ItemStack particle = slots[1] != null ? slots[1] : slots[0]; + + //if no particle is loaded and an ingot is present + if(i == 0 && particle == null && slots[3] != null) { + ExposureChamberRecipe recipe = getRecipe(stack, slots[3]); + return recipe != null; + } + + //if a particle is loaded but no ingot present + if(i == 3 && particle != null && slots[3] == null) { + ExposureChamberRecipe recipe = getRecipe(slots[0], stack); + return recipe != null; + } + + //if there's nothing at all, find a reference recipe and see if the item matches anything + if(particle == null && slots[3] == null) { + + for(ExposureChamberRecipe recipe : ExposureChamberRecipes.recipes) { + if(i == 0 && recipe.particle.matchesRecipe(stack, true)) return true; + if(i == 3 && recipe.ingredient.matchesRecipe(stack, true)) return true; + } + } + + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i == 2 || i == 4; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] {0, 2, 3, 4}; + } + @Override public void serialize(ByteBuf buf) { buf.writeBoolean(this.isOn); @@ -246,4 +298,33 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineExposureChamber(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_exposure_chamber)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 50) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 50) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index 82076c1cf..d40bac866 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -23,7 +23,10 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; import api.hbm.block.IDrillInteraction; @@ -47,10 +50,11 @@ import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineMiningLaser extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IMiningDrill, IFluidStandardSender, IGUIProvider { +public class TileEntityMachineMiningLaser extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IMiningDrill, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider { public long power; public int age = 0; @@ -714,4 +718,40 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMiningLaser(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE || type == UpgradeType.EFFECT || type == UpgradeType.FORTUNE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembler)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (100 - 100 / (level + 1)) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (100 * level / 16) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 * level / 16) + "%")); + } + if(type == UpgradeType.EFFECT) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_RANGE, "+" + (2 * level) + "m")); + } + if(type == UpgradeType.FORTUNE) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_FORTUNE, "+" + level)); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 12; + if(type == UpgradeType.POWER) return 12; + if(type == UpgradeType.EFFECT) return 12; + if(type == UpgradeType.FORTUNE) return 3; + if(type == UpgradeType.OVERDRIVE) return 9; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index 4f62b9aa8..ae5054b00 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.machine; +import java.util.List; + +import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMixer; @@ -12,7 +15,10 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; @@ -25,9 +31,10 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineMixer extends TileEntityMachineBase implements INBTPacketReceiver, IControlReceiver, IGUIProvider, IEnergyUser, IFluidStandardTransceiver { +public class TileEntityMachineMixer extends TileEntityMachineBase implements INBTPacketReceiver, IControlReceiver, IGUIProvider, IEnergyUser, IFluidStandardTransceiver, IUpgradeInfoProvider { public long power; public static final long maxPower = 10_000; @@ -310,7 +317,34 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB @Override public void receiveControl(NBTTagCompound data) { - if(data.hasKey("toggle")) this.recipeIndex++; } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembler)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 300) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 25) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 6; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index e1c3d08ba..414d273a4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -26,7 +26,9 @@ import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachinePolluting; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyGenerator; @@ -43,10 +45,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implements IEnergyGenerator, IFluidContainer, IFluidAcceptor, IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implements IEnergyGenerator, IFluidContainer, IFluidAcceptor, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider { public long power; public static final long maxPower = 1_000_000; @@ -488,4 +491,24 @@ public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implem public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineTurbofan(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.AFTERBURN; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembler)); + if(type == UpgradeType.AFTERBURN) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_EFFICIENCY, "+" + (int)(level * 100 * (1 + Math.min(level / 3D, 4D))) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.AFTERBURN) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java index 13fb8015b..06911f404 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine.oil; import java.io.IOException; +import java.util.List; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; @@ -11,8 +12,12 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMachineOilWell; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.world.feature.OilSpot; @@ -22,6 +27,7 @@ import net.minecraft.block.Block; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; public class TileEntityMachineFrackingTower extends TileEntityOilDrillBase implements IFluidAcceptor { @@ -221,4 +227,23 @@ public class TileEntityMachineFrackingTower extends TileEntityOilDrillBase imple public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_fracking_tower)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 25) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 10) + "%")); + } + if(type == UpgradeType.AFTERBURN) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_BURN, level * 10, level * 50)); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index b8f52817c..25d5f4029 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine.oil; import java.util.List; +import com.hbm.blocks.ModBlocks; import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.interfaces.IControlReceiver; @@ -21,7 +22,9 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.I18nUtil; import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.DirPos; @@ -37,9 +40,10 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineGasFlare extends TileEntityMachineBase implements IEnergyGenerator, IFluidContainer, IFluidAcceptor, IFluidStandardReceiver, IControlReceiver, IGUIProvider { +public class TileEntityMachineGasFlare extends TileEntityMachineBase implements IEnergyGenerator, IFluidContainer, IFluidAcceptor, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { public long power; public static final long maxPower = 100000; @@ -307,4 +311,27 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineGasFlare(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.EFFECT; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_flare)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); + } + if(type == UpgradeType.EFFECT) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_EFFICIENCY, "+" + (100 * level / 3) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.EFFECT) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index edfeeff30..4aa306854 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine.oil; import java.util.ArrayList; import java.util.List; +import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.FluidStack; @@ -16,7 +17,10 @@ import com.hbm.inventory.recipes.LiquefactionRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; @@ -29,9 +33,10 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidStandardSender, IGUIProvider { +public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider { public long power; public static final long maxPower = 100000; @@ -296,4 +301,28 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILiquefactor(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembler)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java index 3e0c19f8b..798d41873 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine.oil; import java.io.IOException; +import java.util.List; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; @@ -9,8 +10,12 @@ import com.hbm.explosion.ExplosionLarge; import com.hbm.inventory.container.ContainerMachineOilWell; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.gui.GUIMachineOilWell; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; @@ -21,6 +26,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; @@ -174,4 +180,23 @@ public class TileEntityMachineOilWell extends TileEntityOilDrillBase { public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_well)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 25) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 10) + "%")); + } + if(type == UpgradeType.AFTERBURN) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_BURN, level * 10, level * 50)); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java index fb2a78c4f..dd11a3431 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine.oil; import java.io.IOException; +import java.util.List; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; @@ -9,7 +10,11 @@ import com.hbm.blocks.ModBlocks; import com.hbm.inventory.container.ContainerMachineOilWell; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.gui.GUIMachineOilWell; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.util.BobMathUtil; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; @@ -21,6 +26,7 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.oredict.OreDictionary; @@ -224,4 +230,23 @@ public class TileEntityMachinePumpjack extends TileEntityOilDrillBase { public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_pumpjack)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 25) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_DELAY, "+" + (level * 10) + "%")); + } + if(type == UpgradeType.AFTERBURN) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_BURN, level * 10, level * 50)); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index c40e904ca..2846293e3 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -1,5 +1,8 @@ package com.hbm.tileentity.machine.oil; +import java.util.List; + +import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerSolidifier; @@ -11,7 +14,9 @@ import com.hbm.inventory.recipes.SolidificationRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; @@ -25,9 +30,10 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyUser, IFluidAcceptor, IFluidStandardReceiver, IGUIProvider { +public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyUser, IFluidAcceptor, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider { public long power; public static final long maxPower = 100000; @@ -270,4 +276,28 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISolidifier(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_assembler)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (level * 100) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java index 11d36657f..4c785a486 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java @@ -17,6 +17,7 @@ import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; import com.hbm.util.Tuple; @@ -34,7 +35,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider { +public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider, IUpgradeInfoProvider { public int indicator = 0; @@ -382,4 +383,18 @@ public abstract class TileEntityOilDrillBase extends TileEntityMachineBase imple this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER || type == UpgradeType.OVERDRIVE || type == UpgradeType.AFTERBURN; + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.AFTERBURN) return 3; + if(type == UpgradeType.OVERDRIVE) return 3; + return 0; + } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java index ea00c1637..91dc3e9ab 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java @@ -3,13 +3,18 @@ package com.hbm.tileentity.turret; import java.util.ArrayList; import java.util.List; +import com.hbm.blocks.ModBlocks; import com.hbm.inventory.gui.GUITurretMaxwell; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.ModDamageSource; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; +import com.hbm.tileentity.IUpgradeInfoProvider; +import com.hbm.util.BobMathUtil; import com.hbm.util.EntityDamageUtil; +import com.hbm.util.I18nUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; @@ -21,10 +26,11 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT { +public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT implements IUpgradeInfoProvider { @Override public String getName() { @@ -64,6 +70,41 @@ public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT { return ammoStacks; } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.EFFECT || type == UpgradeType.POWER || type == UpgradeType.AFTERBURN || type == UpgradeType.OVERDRIVE; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.turret_maxwell)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + "Damage +0." + (level * 25) + "/t"); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (level * 3) + "%")); + } + if(type == UpgradeType.EFFECT) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_RANGE, "+" + (level * 3) + "m")); + } + if(type == UpgradeType.AFTERBURN) { + info.add(EnumChatFormatting.GREEN + "Afterburn +3s"); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 27; + if(type == UpgradeType.POWER) return 27; + if(type == UpgradeType.EFFECT) return 27; + if(type == UpgradeType.AFTERBURN) return 27; + if(type == UpgradeType.OVERDRIVE) return 27; + return 0; + } @Override public double getAcceptableInaccuracy() { diff --git a/src/main/java/com/hbm/world/generator/room/TestDungeonRoom8.java b/src/main/java/com/hbm/world/generator/room/TestDungeonRoom8.java index 3f02d6cf0..e69db5214 100644 --- a/src/main/java/com/hbm/world/generator/room/TestDungeonRoom8.java +++ b/src/main/java/com/hbm/world/generator/room/TestDungeonRoom8.java @@ -50,12 +50,19 @@ public class TestDungeonRoom8 extends CellularDungeonRoom { int r = world.rand.nextInt(10); - if(r == 0) + if(r == 0) { ((TileEntitySafe)world.getTileEntity(x + parent.width / 2, y + 2, z + parent.width / 2)).setInventorySlotContents(7, new ItemStack(ModItems.book_of_)); - else if(r < 4) - ((TileEntitySafe)world.getTileEntity(x + parent.width / 2, y + 2, z + parent.width / 2)).setInventorySlotContents(7, generateBook(world)); - else - ((TileEntitySafe)world.getTileEntity(x + parent.width / 2, y + 2, z + parent.width / 2)).setInventorySlotContents(7, new ItemStack(Items.book)); + } else if(r < 4) { + TileEntitySafe safe = (TileEntitySafe) world.getTileEntity(x + parent.width / 2, y + 2, z + parent.width / 2); + safe.setInventorySlotContents(5, generateBook(world)); + safe.setInventorySlotContents(7, new ItemStack(ModItems.stamp_book, 1, world.rand.nextInt(8))); + safe.setInventorySlotContents(9, new ItemStack(ModItems.stamp_book, 1, world.rand.nextInt(8))); + } else { + TileEntitySafe safe = (TileEntitySafe) world.getTileEntity(x + parent.width / 2, y + 2, z + parent.width / 2); + safe.setInventorySlotContents(5, new ItemStack(Items.book)); + safe.setInventorySlotContents(7, new ItemStack(ModItems.stamp_book, 1, world.rand.nextInt(8))); + safe.setInventorySlotContents(9, new ItemStack(ModItems.stamp_book, 1, world.rand.nextInt(8))); + } } break; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 8edc158e4..34cd14145 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -315,6 +315,7 @@ container.droneProvider=Anbieter container.droneRequester=Abnehmer container.electricFurnace=Elektrischer Ofen container.epress=Hydraulische Presse +container.exposureChamber=Bestrahlungskammer container.factoryAdvanced=Fortgeschrittene Fabrik container.factoryTitanium=Einfache Fabrik container.fluidtank=Tank @@ -2608,6 +2609,14 @@ item.padlock_unbreakable.name=Unzerstörbares Vorhängeschloss item.pads_rubber.name=Gummischuhsohlen item.pads_slime.name=Schleimschuhsohlen item.pads_static.name=Statische Schuhsolen +item.page_of_.page1.name=Seite 1 +item.page_of_.page2.name=Seite 2 +item.page_of_.page3.name=Seite 3 +item.page_of_.page4.name=Seite 4 +item.page_of_.page5.name=Seite 5 +item.page_of_.page6.name=Seite 6 +item.page_of_.page7.name=Seite 7 +item.page_of_.page8.name=Seite 8 item.pancake.name=Pfannkuchen aus Altmetall, Nägeln und Edelsteinpulver item.part_beryllium.name=Berylliumstaubkiste item.part_carbon.name=Kohlenstoffstaubkiste @@ -3158,6 +3167,14 @@ item.stamp_357.name=.357 Magnum-Stempel item.stamp_44.name=.44 Magnum-Stempel item.stamp_50.name=Großkaliberstempel item.stamp_9.name=Kleinkaliberstempel +item.stamp_book.printing1.name=Druckpressstempel (Teil 1) +item.stamp_book.printing2.name=Druckpressstempel (Teil 2) +item.stamp_book.printing3.name=Druckpressstempel (Teil 3) +item.stamp_book.printing4.name=Druckpressstempel (Teil 4) +item.stamp_book.printing5.name=Druckpressstempel (Teil 5) +item.stamp_book.printing6.name=Druckpressstempel (Teil 6) +item.stamp_book.printing7.name=Druckpressstempel (Teil 7) +item.stamp_book.printing8.name=Druckpressstempel (Teil 8) item.stamp_desh_circuit.name=Schaltkreisstempel (Desh) item.stamp_desh_flat.name=Flacher Stempe (Desh) item.stamp_desh_plate.name=Plattenstempel (Desh) @@ -4096,6 +4113,7 @@ tile.machine_electric_furnace_off.name=Elektrischer Ofen tile.machine_electric_furnace_on.name=Elektrischer Ofen tile.machine_electrolyser.name=Electrolysegerät tile.machine_epress.name=Hydraulische Presse +tile.machine_exposure_chamber.name=Bestrahlungskammer tile.machine_excavator.name=Großer Minenbohrer tile.machine_fel.name=FEL tile.machine_fensu.name=FEnSU diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 5d2ef5a8d..a1282dcae 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -672,6 +672,7 @@ container.droneProvider=Provider container.droneRequester=Requester container.electricFurnace=Electric Furnace container.epress=Electric Press +container.exposureChamber=Exposure Chamber container.factoryAdvanced=Advanced Factory container.factoryTitanium=Basic Factory container.fluidtank=Tank @@ -3363,6 +3364,14 @@ item.padlock_unbreakable.name=Unbreakable Padlock item.pads_rubber.name=Rubber Pads item.pads_slime.name=Slime Pads item.pads_static.name=Static Pads +item.page_of_.page1.name=Page 1 +item.page_of_.page2.name=Page 2 +item.page_of_.page3.name=Page 3 +item.page_of_.page4.name=Page 4 +item.page_of_.page5.name=Page 5 +item.page_of_.page6.name=Page 6 +item.page_of_.page7.name=Page 7 +item.page_of_.page8.name=Page 8 item.pancake.name=Pancake made from Scrap Metal, Nails and Gem Dust item.part_beryllium.name=Box of Beryllium Dust item.part_carbon.name=Box of Carbon Dust @@ -4070,6 +4079,14 @@ item.stamp_357.name=.357 Magnum Stamp item.stamp_44.name=.44 Magnum Stamp item.stamp_50.name=Large Caliber Stamp item.stamp_9.name=Small Caliber Stamp +item.stamp_book.printing1.name=Printing Press Stamp (Part 1) +item.stamp_book.printing2.name=Printing Press Stamp (Part 2) +item.stamp_book.printing3.name=Printing Press Stamp (Part 3) +item.stamp_book.printing4.name=Printing Press Stamp (Part 4) +item.stamp_book.printing5.name=Printing Press Stamp (Part 5) +item.stamp_book.printing6.name=Printing Press Stamp (Part 6) +item.stamp_book.printing7.name=Printing Press Stamp (Part 7) +item.stamp_book.printing8.name=Printing Press Stamp (Part 8) item.stamp_desh_circuit.name=Circuit Stamp (Desh) item.stamp_desh_flat.name=Flat Stamp (Desh) item.stamp_desh_plate.name=Plate Stamp (Desh) @@ -5082,6 +5099,7 @@ tile.machine_electric_furnace_on.name=Electric Furnace tile.machine_electrolyser.name=Electrolysis Machine tile.machine_epress.name=Electric Press tile.machine_excavator.name=Large Mining Drill +tile.machine_exposure_chamber.name=Exposure Chamber tile.machine_fel.name=FEL tile.machine_fensu.name=FEnSU tile.machine_flare.name=Flare Stack @@ -5619,8 +5637,13 @@ turret.off=OFF turret.on=ON turret.players=Target Players: %s +upgrade.acid=Acid required %s +upgrade.burn=Burn %smb/t for %sHE upgrade.consumption=Consumption %s -upgrade.speed=Process time %s +upgrade.delay=Process time %s +upgrade.efficiency=Efficiency %s +upgrade.fortune=Fortune %s +upgrade.range=Range %s upgrade.gui.title=§lAcceptable Upgrades:§r upgrade.gui.afterburner= * §dAfterburner§r: Stacks to level %s diff --git a/src/main/resources/assets/hbm/textures/items/fuel_tank_small.png b/src/main/resources/assets/hbm/textures/items/fuel_tank_small.png index d8c0c47d7474161083024bf2967eecd3e8517b7d..23345a9ea862b7dff76c7ff706e993f900a6f6d7 100644 GIT binary patch delta 282 zcmV+#0puK5G=Ka_L_t(IjlGjGiiI#3gvVuTAwQ%NK}aEK#S>`jEpi60@NVH5 zY;5%e;td4BGVlkyKwh=5`{LqTgq`xw@WIRw;HIMA9v+W}cg}&C!OZCU{?z+>F=!OU2e z1!41rZ_7b69I3ga8qNnX&JC00<&$>(@Yo8>EkK@=!QRLrVp=p``TvgTIR(Or@Rpce$ g-&eT(nQrR|8WaAPVRFj-9RL6T07*qoM6N<$f(DL&kpKVy delta 262 zcmV+h0r~#L0-G=J$yL_t(Ijm?ljYK1TqMNgaJ{0A}=ge*W1*W)A;H{cdrgA*ri zz!kUy$<##%PjDzmI_jsbDgO@&?S)Kk?t95S@Yj0z>7s4hux%S6f`~AVV>J5~Gn=Lf zT5Gh{SZe{;_dQJ0bXoHH-Ehu@+wBH`F$QA{07X$ymSuRjz<*lHwrv2c>&m*WhzQ<$ z(lmXpg0&VA;WL9Q%Mg)EHVUTex?qgCzy7hP@B7CL0ES_>c;5S1^!fwmTv(QcBuO}q zgY!J^M=8ZT&tGPu5MxqGMIlBjR8@8H@;ra80{jBRx~?z5*zo_*JN~70H8(%3-2eap M07*qoM6N<$f~f&~cK`qY diff --git a/src/main/resources/assets/hbm/textures/items/page_of_.png b/src/main/resources/assets/hbm/textures/items/page_of_.png new file mode 100644 index 0000000000000000000000000000000000000000..c1fef7b72c434d732cc76c4dfcd95d9a19c4344f GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfqhV^M;AXzP>IYVpEC~^Wo!j zC9*OfGYJYhw>^2Hwd1V8w=TDOtDOrLB$##GPfpsDAtZzU!GkCiCxvX8eX-^8?a)< zL!`EA6QoosZNb;~obO}d7noVh$S*&>N`MRiunf$V9ziLU7K&LyCJ`NVhX|$~L<)Wy zJFkEG86t=XX7d4eBYLNYU?yZVM3g)`=;Mh{U zkSL{A7MI^abP%DnhF1$vLsbwpiowmz3wjUQ)XxA@#GKpPH@tm&M+6K->8+!a%owMR zl0=)xOqR*V)fJ|JWy3tc{Nqk;~!Ig|oJ0+RPX1n7!HmU@h?Uvb- zIS+q7AR?&1zh91cF+vnKgEmcwD#P4JgcsLq?(es(S1Uvv%-C%RkX+xaaWi@gGQo>8jg7|-AMu`n7XuNdsbeO5czoc~r%FVU8EiK@ zlJk`!LPn=li9ov2z+55zrG-4FC}%1CAYBGKdzW2_7kB8C3}$D~c~ TZX5N{00000NkvXXu0mjfAo(yb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/exposure_chamber.png b/src/main/resources/assets/hbm/textures/models/machines/exposure_chamber.png index 658fb024b1d57bd2e1e39110a54e026912e434fb..36fefae3ba699e5c6bc67b7988b53f19cedb6496 100644 GIT binary patch literal 6848 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 literal 6849 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 From 94484fe91eade9c2ebe1cf48102cf3c8fb52be68 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 10 Dec 2023 20:12:36 +0100 Subject: [PATCH 09/10] missing recipe --- changelog | 2 +- gradle.properties | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/CraftingManager.java | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/changelog b/changelog index 57b1ddfe2..b9026f9bd 100644 --- a/changelog +++ b/changelog @@ -14,7 +14,7 @@ * A cheap tier 1 missile that shows up on radar screens as tier 4 (eg. nuclear) missiles * Printing press stamps * 8 different stamps for printing certain pages - * If a meteor dungeon safe is generated without a black book inside, it will generate tow random stamps instead + * If a meteor dungeon safe is generated without a black book inside, it will generate two random stamps instead * With all 8 stamps, allows you to print your own black book ## Changed diff --git a/gradle.properties b/gradle.properties index 64187a8b7..a04cdb5cc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=4795 +mod_build_number=4809 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\ diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 5f353ffa1..8803032ed 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (4795)"; + public static final String VERSION = "1.0.27 BETA (4809)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index a9ced44fa..9203ee542 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -22,6 +22,7 @@ import com.hbm.items.ModItems; import com.hbm.items.ItemAmmoEnums.Ammo50BMG; import com.hbm.items.ItemAmmoEnums.Ammo5mm; import com.hbm.items.ItemEnums.EnumLegendaryType; +import com.hbm.items.ItemEnums.EnumPages; import com.hbm.items.ItemEnums.EnumPlantType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.food.ItemConserve.EnumFoodType; @@ -1053,6 +1054,8 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.bdcl), new Object[] { ANY_TAR.any(), Fluids.WATER.getDict(1_000), KEY_WHITE }); + addShapelessAuto(new ItemStack(ModItems.book_of_), new Object[] { DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE1), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE2), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE3), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE4), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE5), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE6), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE7), DictFrame.fromOne(ModItems.page_of_, EnumPages.PAGE8), ModItems.egg_balefire }); + if(GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleCrafting) { addShapelessAuto(new ItemStack(ModItems.cordite, 3), new Object[] { ModItems.ballistite, Items.gunpowder, new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) }); addShapelessAuto(new ItemStack(ModItems.ingot_semtex, 3), new Object[] { Items.slime_ball, Blocks.tnt, KNO.dust() }); From c11dda67adc57e1d85415ab88ee9877d8eb54323 Mon Sep 17 00:00:00 2001 From: Doctor17-git <60807716+Doctor17-git@users.noreply.github.com> Date: Sun, 10 Dec 2023 22:28:06 +0300 Subject: [PATCH 10/10] Updated ru_RU.lang updated russian localization --- src/main/resources/assets/hbm/lang/ru_RU.lang | 52 ++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 1a1d85a8d..502127659 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -548,12 +548,6 @@ desc.gui.gasCent.output=§6Перемещение жидкости§r$Жидко desc.gui.assembler.warning=§cОшибка:§r Требуется шаблон сборочной машины! desc.gui.chemplant.warning=§cОшибка:§r Требуется шаблон химической машины! desc.gui.template=§9Шаблоны§r$Шаблоны могут быть сделаны$в Папке шаблонов машин. -desc.gui.upgrade=§lПринимаемые улучшения:§r -desc.gui.upgrade.afterburner= * §dФорсаж§r: Стакается до 3-х уровней -desc.gui.upgrade.effectiveness= * §aЭффективность§r: Стакается до 3-х уровней -desc.gui.upgrade.overdrive= * §7Перегруз§r: Стакается до 3-х уровней -desc.gui.upgrade.power= * §1Энергосбережение§r: Стакается до 3-х уровней -desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х уровней desc.gui.nukeBoy.desc=§1Требует:§r$ * Нейтронный щит$ * Снаряд U235$ * Субкритическая цель U235$ * Взрывчатка$ * Воспламенитель desc.gui.nukeGadget.desc=§1Требует:§r$ * 4 Набора взрывоопасных линз$ Первого поколения$ * Плутониевое ядро$ * Провода desc.gui.nukeMan.desc=§1Требует:§r$ * 4 Набора взрывоопасных линз$ Первого поколения$ * Плутониевое ядро$ * Воспламенитель @@ -1458,6 +1452,21 @@ radar.target.tier2=Ракета 2-го уровня radar.target.tier3=Ракета 3-го уровня radar.target.tier4=Ракета 4-го уровня +upgrade.acid=Требуется кислота %s +upgrade.burn=Burn %sмб/тик за %sHE +upgrade.consumption=Потребление %s +upgrade.delay=Время %s +upgrade.efficiency=Эффективность %s +upgrade.fortune=Удача %s +upgrade.range=Радиус %s + +upgrade.gui.title=§lПринимаемые улучшения:§r +upgrade.gui.afterburner= * §dФорсаж§r: Стакается до %s уровней +upgrade.gui.effectiveness= * §aЭффективность§r: Стакается до %s уровней +upgrade.gui.overdrive= * §7Перегруз§r: Стакается до %s уровней +upgrade.gui.power= * §9Энергосбережение§r: Стакается до %s уровней +upgrade.gui.speed= * §4Скорость§r: Стакается до %s уровней + chem.TEST=Тест chem.FP_HEAVYOIL=Переработка тяжелой нефти chem.FP_SMEAR=Переработка промышленного масла @@ -1748,6 +1757,7 @@ tile.emp_bomb.name=ЭМИ-бомба tile.crashed_bomb.name=Неразорвавшаяся бомба tile.boxcar.name=Грузовой вагон tile.boat.name=Лодка +item.boat_rubber.name=Резиновая лодка tile.bomber.name=Разбившийся бомбардировщик tile.pink_log.name=Розовое дерево @@ -1765,6 +1775,8 @@ tile.turret_cwis.name=”Фэленкс” Mk-15 CIWS tile.turret_cheapo.name=Дешёвая пулемётная турель tile.machine_radar.name=Радар container.radar=Радар +item.radar_linker.name=Радарный соединитель +tile.radar_screen.name=Экран радара tile.machine_forcefield.name=Излучатель силового поля container.forceField=Излучатель силового поля tile.machine_satlinker.name=Менеджер ID спутников @@ -2371,6 +2383,8 @@ tile.hadron_plating_striped.name=Обшивка ускорителя части tile.hadron_plating_voltz.name=Обшивка ускорителя частиц (ВОЛЬТЗ) tile.hadron_plating_yellow.name=Обшивка ускорителя частиц (Жёлтый) tile.field_disturber.name=Подавитель высокоэнергитических полей +container.exposureChamber=Камера облучения частицами +tile.machine_exposure_chamber.name=Камера облучения частицами tile.barrel_plastic.name=Безопасный бочонок™ tile.barrel_corroded.name=Проржавевшая бочка @@ -3413,6 +3427,13 @@ tile.sliding_blast_door.name=Раздвижная дверь item.sliding_blast_door_skin.0.name=Скин раздвижной двери: Обычный item.sliding_blast_door_skin.1.name=Скин раздвижной двери: Вариант 1 item.sliding_blast_door_skin.2.name=Скин раздвижной двери: Вариант 2 +tile.large_vehicle_door.name=Дверь для крупногабаритных автомобилей +tile.water_door.name=Подводная дверь +tile.qe_containment.name=QE Дверь биологического сдерживания +tile.qe_sliding_door.name=QE Раздвижная дверь +tile.round_airlock_door.name=Круглый шлюз +tile.secure_access_door.name=Дверь с изолированным доступом +tile.sliding_seal_door.name=Раздвижная герметичная дверь item.nugget_uranium.name=Урановый самородок item.nugget_plutonium.name=Плутониевый самородок @@ -4760,6 +4781,7 @@ entity.entity_tesla_crab.name=Теслакраб entity.entity_taint_crab.name=Заражённый порчей теслакраб entity.entity_elder_one.name=Крякос Старший entity.entity_ntm_fbi.name=Агент ФБР +entity.entity_ntm_fbi_drone.name=Дрон ФБР entity.entity_ntm_radiation_blaze.name=Элементаль Расплавления entity.entity_glyphid.name=Глифид entity.entity_glyphid_behemoth.name=Глифид-страж @@ -4911,6 +4933,7 @@ item.designator_arty_range.name=Артиллерийский целеуказа item.missile_assembly.name=Сборка малой ракеты item.assembly_nuke.name=Оболочка ядерного минизаряда item.missile_generic.name=Фугасная ракета +item.missile_decoy.name=Ракета-приманка item.missile_anti_ballistic.name=Антибаллистическая ракета item.missile_incendiary.name=Зажигательная ракета item.missile_cluster.name=Кластерная ракета @@ -5662,6 +5685,15 @@ item.stamp_desh_44.name=Штамп пули .44 Магнум (Деш) item.stamp_desh_50.name=Штамп большого калибра (Деш) item.stamp_desh_9.name=Штамп малого калибра (Деш) +item.stamp_book.printing1.name=Штамп для печати (Страница 1) +item.stamp_book.printing2.name=Штамп для печати (Страница 2) +item.stamp_book.printing3.name=Штамп для печати (Страница 3) +item.stamp_book.printing4.name=Штамп для печати (Страница 4) +item.stamp_book.printing5.name=Штамп для печати (Страница 5) +item.stamp_book.printing6.name=Штамп для печати (Страница 6) +item.stamp_book.printing7.name=Штамп для печати (Страница 7) +item.stamp_book.printing8.name=Штамп для печати (Страница 8) + item.part_lithium.name=Коробка литиевой пыли item.part_beryllium.name=Коробка бериллиевой пыли item.part_carbon.name=Коробка угольной пыли @@ -5794,6 +5826,14 @@ item.shackles.name=Оковы item.glitch.name=Глюк item.book_secret.name=3-596-50802-9 item.book_of_.name=Книга Вагонов +item.page_of_.page1.name=Страница 1 +item.page_of_.page2.name=Страница 2 +item.page_of_.page3.name=Страница 3 +item.page_of_.page4.name=Страница 4 +item.page_of_.page5.name=Страница 5 +item.page_of_.page6.name=Страница 6 +item.page_of_.page7.name=Страница 7 +item.page_of_.page8.name=Страница 8 item.book_guide.name=Руководство item.burnt_bark.name=Обожженная кора item.burnt_bark.desc=Кусок коры взорванного золотого дуба.