From a57e5384791fe79db7ba6bc693ad91d2dedad18b Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 29 May 2025 18:09:00 +0200 Subject: [PATCH] go go gadget: 5 cups of coffee --- .../com/hbm/inventory/SlotNonRetarded.java | 2 +- .../com/hbm/inventory/UpgradeManagerNT.java | 9 +- .../inventory/container/ContainerBase.java | 22 ++++ .../ContainerMachineChemicalPlant.java | 79 ++++++++++++ .../gui/GUIMachineChemicalPlant.java | 66 ++++++++++ .../recipes/loader/GenericRecipes.java | 121 +++++++++++++++++- src/main/java/com/hbm/items/ModItems.java | 28 ---- .../com/hbm/items/tool/ItemToolAbility.java | 12 +- src/main/java/com/hbm/main/MainRegistry.java | 8 ++ .../TileEntityMachineChemicalPlant.java | 103 ++++++++++++++- .../textures/gui/processing/gui_chemplant.png | Bin 4015 -> 4029 bytes .../gui/processing/gui_recipe_selector.png | Bin 0 -> 1778 bytes 12 files changed, 413 insertions(+), 37 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_recipe_selector.png diff --git a/src/main/java/com/hbm/inventory/SlotNonRetarded.java b/src/main/java/com/hbm/inventory/SlotNonRetarded.java index 41af31292..66d4fed74 100644 --- a/src/main/java/com/hbm/inventory/SlotNonRetarded.java +++ b/src/main/java/com/hbm/inventory/SlotNonRetarded.java @@ -7,7 +7,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; /** - * Because vanilla slots have severe mental disabilities that prevent them from working as expected. + * Because vanilla slots have shit idiot brain fungus that prevent them from working as expected. * @author hbm */ @NotableComments diff --git a/src/main/java/com/hbm/inventory/UpgradeManagerNT.java b/src/main/java/com/hbm/inventory/UpgradeManagerNT.java index 55422fb8d..3ae55ae72 100644 --- a/src/main/java/com/hbm/inventory/UpgradeManagerNT.java +++ b/src/main/java/com/hbm/inventory/UpgradeManagerNT.java @@ -22,12 +22,19 @@ import java.util.HashMap; */ public class UpgradeManagerNT { + public TileEntity owner; public ItemStack[] cachedSlots; private UpgradeType mutexType; public HashMap upgrades = new HashMap<>(); - public void checkSlots(TileEntity te, ItemStack[] slots, int start, int end) { + public UpgradeManagerNT(TileEntity te) { this.owner = te; } + @Deprecated public UpgradeManagerNT() { } + + public void checkSlots(ItemStack[] slots, int start, int end) { checkSlots(owner, slots, start, end); } + @Deprecated public void checkSlots(TileEntity te, ItemStack[] slots, int start, int end) { checkSlotsInternal(te, slots, start, end); } + + private void checkSlotsInternal(TileEntity te, ItemStack[] slots, int start, int end) { if(!(te instanceof IUpgradeInfoProvider) || slots == null) return; diff --git a/src/main/java/com/hbm/inventory/container/ContainerBase.java b/src/main/java/com/hbm/inventory/container/ContainerBase.java index bafd2442e..665d3d275 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerBase.java +++ b/src/main/java/com/hbm/inventory/container/ContainerBase.java @@ -1,6 +1,9 @@ package com.hbm.inventory.container; +import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotNonRetarded; +import com.hbm.inventory.SlotTakeOnly; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -57,6 +60,11 @@ public class ContainerBase extends Container { return slotOriginal; } + + /** Standard player inventory with default hotbar offset */ + public void playerInv(InventoryPlayer invPlayer, int playerInvX, int playerInvY) { + playerInv(invPlayer, playerInvX, playerInvY, playerInvY + 58); + } /** Used to quickly set up the player inventory */ public void playerInv(InventoryPlayer invPlayer, int playerInvX, int playerInvY, int playerHotbarY) { @@ -88,4 +96,18 @@ public class ContainerBase extends Container { } } } + + public void addOutputSlots(EntityPlayer player, IInventory inv, int from, int x, int y, int rows, int cols) { + int slotSize = 18; + for(int row = 0; row < rows; row++) for(int col = 0; col < cols; col++) { + this.addSlotToContainer(new SlotCraftingOutput(player, inv, col + row * cols + from, x + col * slotSize, y + row * slotSize)); + } + } + + public void addTakeOnlySlots(IInventory inv, int from, int x, int y, int rows, int cols) { + int slotSize = 18; + for(int row = 0; row < rows; row++) for(int col = 0; col < cols; col++) { + this.addSlotToContainer(new SlotTakeOnly(inv, col + row * cols + from, x + col * slotSize, y + row * slotSize)); + } + } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java new file mode 100644 index 000000000..dd453f93c --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineChemicalPlant.java @@ -0,0 +1,79 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemChemistryTemplate; +import com.hbm.items.machine.ItemMachineUpgrade; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineChemicalPlant extends ContainerBase { + + public ContainerMachineChemicalPlant(InventoryPlayer invPlayer, IInventory chemicalPlant) { + super(invPlayer, chemicalPlant); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 0, 152, 81)); + // Schematic + this.addSlotToContainer(new SlotNonRetarded(chemicalPlant, 1, 35, 126)); + // Upgrades + this.addSlots(chemicalPlant, 2, 152, 108, 2, 1); + // Solid Input + this.addSlots(chemicalPlant, 4, 8, 99, 1, 3); + // Solid Output + this.addOutputSlots(invPlayer.player, chemicalPlant, 7, 80, 99, 1, 3); + // Fluid Input + this.addSlots( chemicalPlant, 10, 8, 54, 1, 3); + this.addTakeOnlySlots( chemicalPlant, 13, 8, 72, 1, 3); + // Fluid Output + this.addSlots( chemicalPlant, 16, 80, 54, 1, 3); + this.addTakeOnlySlots( chemicalPlant, 19, 80, 72, 1, 3); + + this.playerInv(invPlayer, 8, 174); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + SlotCraftingOutput.checkAchievements(player, slotStack); + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemChemistryTemplate) { + if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(slotStack, 2, 4, false)) return null; + } else { + if(!this.mergeItemStack(slotStack, 4, 7, false)) return null; + } + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java new file mode 100644 index 000000000..df47af6aa --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineChemicalPlant.java @@ -0,0 +1,66 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineChemicalPlant; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineChemicalPlant; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineChemicalPlant extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_chemplant.png"); + private TileEntityMachineChemicalPlant chemplant; + + public GUIMachineChemicalPlant(InventoryPlayer invPlayer, TileEntityMachineChemicalPlant tedf) { + super(new ContainerMachineChemicalPlant(invPlayer, tedf)); + chemplant = tedf; + + this.xSize = 176; + this.ySize = 256; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + for(int i = 0; i < 3; i++) { + chemplant.inputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 8 + i * 18, guiTop + 18, 16, 34); + chemplant.outputTanks[i].renderTankInfo(this, mouseX, mouseY, guiLeft + 80 + i * 18, guiTop + 18, 16, 34); + } + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 61, chemplant.power, chemplant.maxPower); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.chemplant.hasCustomInventoryName() ? this.chemplant.getInventoryName() : I18n.format(this.chemplant.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); + + int p = (int) (chemplant.power * 61 / chemplant.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 79 - p, 176, 61 - p, 16, p); + + if(chemplant.maxProgress > 0) { + int j = chemplant.progress * 70 / chemplant.maxProgress; + drawTexturedModalRect(guiLeft + 62, guiTop + 126, 176, 61, j, 16); + } + + for(int i = 0; i < 3; i++) { + chemplant.inputTanks[i].renderTank(guiLeft + 8, guiTop + 52, this.zLevel, 16, 34); + chemplant.outputTanks[i].renderTank(guiLeft + 80, guiTop + 52, this.zLevel, 16, 34); + } + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java index 5ddbcecbc..a415c92f1 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/GenericRecipes.java @@ -6,10 +6,14 @@ import java.util.HashMap; import java.util.List; import java.util.Random; +import com.google.gson.JsonArray; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandom; @@ -54,14 +58,54 @@ public abstract class GenericRecipes extends SerializableRecipe { } @Override - public void readRecipe(JsonElement recipe) { + public void readRecipe(JsonElement element) { + JsonObject obj = (JsonObject) element; + GenericRecipe recipe = instantiateRecipe(obj.get("name").getAsString(), obj.get("duration").getAsInt()); + + if(this.inputItemLimit() > 0) recipe.inputItem = this.readAStackArray(obj.get("inputItem").getAsJsonArray()); + if(this.inputFluidLimit() > 0) recipe.inputFluid = this.readFluidArray(obj.get("inputFluid").getAsJsonArray()); + if(this.outputItemLimit() > 0) recipe.outputItem = this.readOutputArray(obj.get("outputItem").getAsJsonArray()); + if(this.outputFluidLimit() > 0) recipe.outputFluid = this.readFluidArray(obj.get("outputFluid").getAsJsonArray()); + + readExtraData(element, recipe); + + register(recipe); } + public GenericRecipe instantiateRecipe(String name, int duration) { return new GenericRecipe(name, duration); } + public void readExtraData(JsonElement element, GenericRecipe recipe) { } + @Override public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { } + + public void writeExtraData(Object recipe, JsonWriter writer) { } + + public IOutput[] readOutputArray(JsonArray array) { + IOutput[] output = new IOutput[array.size()]; + int index = 0; + + for(JsonElement element : array) { + JsonArray arrayElement = element.getAsJsonArray(); + String type = arrayElement.get(0).getAsString(); + if("single".equals(type)) { + ChanceOutput co = new ChanceOutput(); + co.deserialize(arrayElement); + output[index] = co; + } else if("multi".equals(type)) { + ChanceOutputMulti com = new ChanceOutputMulti(); + com.deserialize(arrayElement); + output[index] = com; + } else { + throw new IllegalArgumentException("Invalid IOutput type '" + type + "', expected 'single' or 'multi' for recipe " + array.toString()); + } + index++; + } + + return output; + } /////////////// /// CLASSES /// @@ -75,25 +119,53 @@ public abstract class GenericRecipes extends SerializableRecipe { public IOutput[] outputItem; public FluidStack[] outputFluid; public int duration; + public ItemStack icon; public GenericRecipe(String name, int duration) { this.name = name; this.duration = duration; } + + public GenericRecipe setIcon(ItemStack icon) { + this.icon = icon; + return this; + } + + public ItemStack getIcon() { + + if(icon == null) { + if(outputItem != null) { + if(outputItem[0] instanceof ChanceOutput) icon = ((ChanceOutput) outputItem[0]).stack.copy(); + if(outputItem[0] instanceof ChanceOutputMulti) icon = ((ChanceOutputMulti) outputItem[0]).pool.get(0).stack.copy(); + return icon; + } + if(outputFluid != null) { + icon = ItemFluidIcon.make(outputFluid[0]); + } + } + + if(icon == null) icon = new ItemStack(ModItems.nothing); + return icon; + } } public static interface IOutput { public boolean possibleMultiOutput(); public ItemStack collapse(); + public void serialize(JsonWriter writer) throws IOException; + public void deserialize(JsonArray array); } /** A chance output, produces either an ItemStack or null */ public static class ChanceOutput extends WeightedRandom.Item implements IOutput { + // a weight of 0 means this output is not part of a weighted output + public ItemStack stack; public float chance; - public ChanceOutput(ItemStack stack) { this(stack, 1F, 1); } + public ChanceOutput() { super(0); } // for deserialization + public ChanceOutput(ItemStack stack) { this(stack, 1F, 0); } public ChanceOutput(ItemStack stack, int weight) { this(stack, 1F, weight); } public ChanceOutput(ItemStack stack, float chance, int weight) { super(weight); @@ -108,6 +180,34 @@ public abstract class GenericRecipes extends SerializableRecipe { } @Override public boolean possibleMultiOutput() { return false; } + + @Override + public void serialize(JsonWriter writer) throws IOException { + boolean standardStack = chance >= 1 && itemWeight == 0; + if(!standardStack) writer.beginArray(); + + if(itemWeight == 0) writer.value("single"); + SerializableRecipe.writeItemStack(stack, writer); + + if(!standardStack) { + writer.value(chance); + if(itemWeight > 0) writer.value(itemWeight); + writer.endArray(); + } + } + + @Override + public void deserialize(JsonArray array) { + + if(array.get(0).isJsonPrimitive()) { // "single" tag, don't apply weight + this.stack = SerializableRecipe.readItemStack(array.get(1).getAsJsonArray()); + if(array.size() > 2) this.chance = array.get(2).getAsFloat(); + } else { // hopefully an array, therefore a weighted result + this.stack = SerializableRecipe.readItemStack(array.get(0).getAsJsonArray()); + if(array.size() > 1) this.chance = array.get(1).getAsFloat(); + if(array.size() > 2) this.itemWeight = array.get(2).getAsInt(); + } + } } /** Multiple choice chance output, produces a ChanceOutput chosen randomly by weight */ @@ -117,5 +217,22 @@ public abstract class GenericRecipes extends SerializableRecipe { @Override public ItemStack collapse() { return ((ChanceOutput) WeightedRandom.getRandomItem(RNG, pool)).collapse(); } @Override public boolean possibleMultiOutput() { return pool.size() > 1; } + + @Override + public void serialize(JsonWriter writer) throws IOException { + writer.beginArray(); + writer.value("multi"); + for(ChanceOutput output : pool) output.serialize(writer); + writer.endArray(); + } + + @Override + public void deserialize(JsonArray array) { + for(JsonElement element : array) { + ChanceOutput output = new ChanceOutput(); + output.deserialize(element.getAsJsonArray()); + pool.add(output); + } + } } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index e268f4d4b..b27e20e3e 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1152,15 +1152,6 @@ public class ModItems { public static Item ammo_bag_infinite; public static Item casing_bag; - public static Item test_nuke_igniter; - public static Item test_nuke_propellant; - public static Item test_nuke_tier1_shielding; - public static Item test_nuke_tier2_shielding; - public static Item test_nuke_tier1_bullet; - public static Item test_nuke_tier2_bullet; - public static Item test_nuke_tier1_target; - public static Item test_nuke_tier2_target; - public static Item cordite; public static Item ballistite; public static Item ball_dynamite; @@ -2258,15 +2249,6 @@ public class ModItems { redstone_sword = new RedstoneSword(ToolMaterial.STONE).setUnlocalizedName("redstone_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":redstone_sword"); big_sword = new BigSword(ToolMaterial.EMERALD).setUnlocalizedName("big_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":big_sword"); - test_nuke_igniter = new Item().setUnlocalizedName("test_nuke_igniter").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_igniter"); - test_nuke_propellant = new Item().setUnlocalizedName("test_nuke_propellant").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_propellant"); - test_nuke_tier1_shielding = new Item().setUnlocalizedName("test_nuke_tier1_shielding").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_shielding"); - test_nuke_tier2_shielding = new Item().setUnlocalizedName("test_nuke_tier2_shielding").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_shielding"); - test_nuke_tier1_bullet = new Item().setUnlocalizedName("test_nuke_tier1_bullet").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_bullet"); - test_nuke_tier2_bullet = new Item().setUnlocalizedName("test_nuke_tier2_bullet").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_bullet"); - test_nuke_tier1_target = new Item().setUnlocalizedName("test_nuke_tier1_target").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier1_target"); - test_nuke_tier2_target = new Item().setUnlocalizedName("test_nuke_tier2_target").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":test_nuke_tier2_target"); - ingot_th232 = new Item().setUnlocalizedName("ingot_th232").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_th232"); ingot_uranium = new Item().setUnlocalizedName("ingot_uranium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_uranium"); ingot_u233 = new Item().setUnlocalizedName("ingot_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_u233"); @@ -4998,16 +4980,6 @@ public class ModItems { GameRegistry.registerItem(redstone_sword, redstone_sword.getUnlocalizedName()); GameRegistry.registerItem(big_sword, big_sword.getUnlocalizedName()); - //Test Nuke - GameRegistry.registerItem(test_nuke_igniter, test_nuke_igniter.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_propellant, test_nuke_propellant.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_shielding, test_nuke_tier1_shielding.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_shielding, test_nuke_tier2_shielding.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_bullet, test_nuke_tier1_bullet.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_bullet, test_nuke_tier2_bullet.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier1_target, test_nuke_tier1_target.getUnlocalizedName()); - GameRegistry.registerItem(test_nuke_tier2_target, test_nuke_tier2_target.getUnlocalizedName()); - //Ingots GameRegistry.registerItem(ingot_uranium, ingot_uranium.getUnlocalizedName()); GameRegistry.registerItem(ingot_u233, ingot_u233.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/tool/ItemToolAbility.java b/src/main/java/com/hbm/items/tool/ItemToolAbility.java index bd3fc6ddb..aa8ce2268 100644 --- a/src/main/java/com/hbm/items/tool/ItemToolAbility.java +++ b/src/main/java/com/hbm/items/tool/ItemToolAbility.java @@ -350,16 +350,16 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro Block block = world.getBlock(x, y, z); int l = world.getBlockMetadata(x, y, z); world.playAuxSFXAtEntity(player, 2001, x, y, z, Block.getIdFromBlock(block) + (world.getBlockMetadata(x, y, z) << 12)); - boolean flag = false; + boolean removedByPlayer = false; if(player.capabilities.isCreativeMode) { - flag = removeBlock(world, x, y, z, false, player); + removedByPlayer = removeBlock(world, x, y, z, false, player); player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); } else { ItemStack itemstack = player.getCurrentEquippedItem(); - boolean flag1 = block.canHarvestBlock(player, l); + boolean canHarvest = block.canHarvestBlock(player, l); - flag = removeBlock(world, x, y, z, flag1, player); + removedByPlayer = removeBlock(world, x, y, z, canHarvest, player); if(itemstack != null) { itemstack.func_150999_a(world, block, x, y, z, player); @@ -368,6 +368,10 @@ public class ItemToolAbility extends ItemTool implements IDepthRockTool, IGUIPro player.destroyCurrentEquippedItem(); } } + + if(removedByPlayer && canHarvest) { + block.harvestBlock(world, player, x, y, z, l); + } } // Why was this commented out? diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index bb5882cc8..1a455e86b 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -1682,6 +1682,14 @@ public class MainRegistry { ignoreMappings.add("hbm:item.gun_cryolator_ammo"); ignoreMappings.add("hbm:item.canteen_fab"); ignoreMappings.add("hbm:item.fabsols_vodka"); + ignoreMappings.add("hbm:item.test_nuke_igniter"); + ignoreMappings.add("hbm:item.test_nuke_propellant"); + ignoreMappings.add("hbm:item.test_nuke_tier1_shielding"); + ignoreMappings.add("hbm:item.test_nuke_tier2_shielding"); + ignoreMappings.add("hbm:item.test_nuke_tier1_bullet"); + ignoreMappings.add("hbm:item.test_nuke_tier2_bullet"); + ignoreMappings.add("hbm:item.test_nuke_tier1_target"); + ignoreMappings.add("hbm:item.test_nuke_tier2_target"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java index c214b7e79..c9bac3663 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemicalPlant.java @@ -1,19 +1,47 @@ package com.hbm.tileentity.machine; +import java.util.HashMap; +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.UpgradeManagerNT; +import com.hbm.inventory.container.ContainerMachineChemicalPlant; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineChemicalPlant; +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.i18n.I18nUtil; -public class TileEntityMachineChemicalPlant extends TileEntityMachineBase { +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +public class TileEntityMachineChemicalPlant extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IUpgradeInfoProvider, IGUIProvider { public FluidTank[] inputTanks; public FluidTank[] outputTanks; public long power; public long maxPower = 1_000_000; + public int progress; + public int maxProgress; + + public UpgradeManagerNT upgradeManager = new UpgradeManagerNT(this); public TileEntityMachineChemicalPlant() { super(22); + this.inputTanks = new FluidTank[3]; this.outputTanks = new FluidTank[3]; for(int i = 0; i < 3; i++) { @@ -30,5 +58,78 @@ public class TileEntityMachineChemicalPlant extends TileEntityMachineBase { @Override public void updateEntity() { + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + upgradeManager.checkSlots(slots, 2, 3); + + this.networkPackNT(100); + + } else { + + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(FluidTank tank : inputTanks) tank.serialize(buf); + for(FluidTank tank : outputTanks) tank.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + buf.writeInt(progress); + buf.writeInt(maxProgress); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(FluidTank tank : inputTanks) tank.deserialize(buf); + for(FluidTank tank : outputTanks) tank.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.progress = buf.readInt(); + this.maxProgress = buf.readInt(); + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getReceivingTanks() { return inputTanks; } + @Override public FluidTank[] getSendingTanks() { return outputTanks; } + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {inputTanks[0], inputTanks[1], inputTanks[2], outputTanks[0], outputTanks[1], outputTanks[2]}; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineChemicalPlant(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineChemicalPlant(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_chemical_plant)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_CONSUMPTION, "+" + (level * 300) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(KEY_CONSUMPTION, "-" + (level * 30) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(KEY_DELAY, "+" + (level * 5) + "%")); + } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } + } + + @Override + public HashMap getValidUpgrades() { + HashMap upgrades = new HashMap<>(); + upgrades.put(UpgradeType.SPEED, 3); + upgrades.put(UpgradeType.POWER, 3); + upgrades.put(UpgradeType.OVERDRIVE, 6); + return upgrades; } } diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_chemplant.png index 824dd1ce99ffdf47214b6494f3055d833c8bcd01..ef8c8fc45a752b63dd48f4d63e53efc915476d80 100644 GIT binary patch literal 4029 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 literal 0 HcmV?d00001