From 16ff2795cccf9e61666ce096feda891734d1c733 Mon Sep 17 00:00:00 2001 From: TheDarkDnKTv Date: Thu, 11 Feb 2021 04:07:48 +0200 Subject: [PATCH] A lot of stuff - Fixed Universal macerator - Fixed microwave, scanner and IC2 maps - Fixed bunch of RecipeLogic & Recipe bugs - Misc tweaks --- libs/src/Railcraft_1.7.10-9.12.2.1-src.jar | Bin 1213867 -> 1299576 bytes .../GT_MetaTileEntity_BasicMachine.java | 7 +- .../gregtechmod/api/recipe/RecipeLogic.java | 41 ++++-- .../gregtechmod/api/recipe/RecipeMap.java | 12 +- .../gregtechmod/api/util/GT_ModHandler.java | 33 +++++ .../java/gregtechmod/api/util/GT_Utility.java | 15 +- .../gregtechmod/common/GT_GUIHandler.java | 6 +- .../common/containers/UniversalMacerator.java | 117 ++++++++++++++++ .../common/gui/GUI_UniversalMacerator.java | 49 +++++++ .../common/recipe/ChancedStack.java | 28 ++++ .../common/recipe/RecipeEntry.java | 2 +- .../gregtechmod/common/recipe/RecipeMaps.java | 13 +- .../common/recipe/maps/IC2RecipeMap.java | 28 ++-- .../recipe/maps/PulverizerRecipeMap.java | 129 ++++++++++++++++++ .../common/recipe/maps/ScannerRecipeMap.java | 51 +++++++ .../basic/GT_MetaTileEntity_Microwave.java | 93 +++++++------ .../basic/GT_MetaTileEntity_Pulverizer.java | 109 ++++----------- .../basic/GT_MetaTileEntity_Scanner.java | 44 +----- .../preload/GT_MetaTileEntityLoader.java | 8 +- .../gregtech_addon/textures/gui/Macerator.png | Bin 4876 -> 4380 bytes 20 files changed, 562 insertions(+), 223 deletions(-) create mode 100644 src/main/java/gregtechmod/common/containers/UniversalMacerator.java create mode 100644 src/main/java/gregtechmod/common/gui/GUI_UniversalMacerator.java create mode 100644 src/main/java/gregtechmod/common/recipe/maps/PulverizerRecipeMap.java create mode 100644 src/main/java/gregtechmod/common/recipe/maps/ScannerRecipeMap.java diff --git a/libs/src/Railcraft_1.7.10-9.12.2.1-src.jar b/libs/src/Railcraft_1.7.10-9.12.2.1-src.jar index 9a464cf5ea77c8d1d9c943f6d9a0cd7d09aebd2e..e8cddbf1f9b83fa5e05655c4582be3ff53c981d7 100644 GIT binary patch delta 83022 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 delta 81 zcmeyd!hdzQS3?V93sVbo3rh=Y3tJ0&3r7oQ3s(zw3r`Dg3ttQW76H-Z>BbKPrP_7s g1c6v+yH1^OhLQ*?8v_t 0) { getBaseMetaTileEntity().decreaseStoredEnergyUnits(tCost, true); - tCost = GT_Utility.moveOneItemStack(getBaseMetaTileEntity(), tTileEntity2, getBaseMetaTileEntity().getFrontFacing(), getBaseMetaTileEntity().getBackFacing(), null, false, (byte)64, (byte)1, (byte)64, (byte)1); - if (tCost > 0) { - getBaseMetaTileEntity().decreaseStoredEnergyUnits(tCost, true); - } } } } diff --git a/src/main/java/gregtechmod/api/recipe/RecipeLogic.java b/src/main/java/gregtechmod/api/recipe/RecipeLogic.java index e5a92cd4..80557c00 100644 --- a/src/main/java/gregtechmod/api/recipe/RecipeLogic.java +++ b/src/main/java/gregtechmod/api/recipe/RecipeLogic.java @@ -76,7 +76,7 @@ public boolean update() { } if (progressTime == 0) { - if (base.hasInventoryBeenModified() || base.hasWorkJustBeenEnabled() || success || base.getTimer() % 600 == 0 || wasNoEnergy || isInputNonEmpty()) { + if (base.hasInventoryBeenModified() || base.hasWorkJustBeenEnabled() || success || base.getTimer() % 600 == 0 || wasNoEnergy) {// || isInputNonEmpty()) { if (base.isUniversalEnergyStored(getMachine().getMinimumStoredEU() - 100)) { trySerachRecipe(); wasNoEnergy = false; @@ -149,8 +149,8 @@ protected boolean match(Recipe recipe) { return recipe.matches(false, getMachine().getInputItems()); } - protected void consumeInputs(Recipe recipe) { - recipe.matches(true, getMachine().getInputItems()); + protected boolean consumeInputs(Recipe recipe) { + return recipe.matches(true, getMachine().getInputItems()); } protected void startRecipe(Recipe recipe) { @@ -159,9 +159,17 @@ protected void startRecipe(Recipe recipe) { maxProgressTime = GT_Utility.isDebugItem(getMachine().getStackInSlot(batterySlot)) ? 1 : recipe.getDuration(); progressTime = 1; EUt = recipe.getEUt(); - consumeInputs(recipe); - getMachine().getBaseMetaTileEntity().setActive(true); - getMachine().startProcess(); + if (consumeInputs(recipe)) { + getMachine().getBaseMetaTileEntity().setActive(true); + getMachine().startProcess(); + } else { + GT_Log.log.catching(new IllegalStateException("Error state detected! RecipeMap passed recipe, but it's not matching! Report about this!!!")); + EUt = 0; + progressTime = 0; + maxProgressTime = 0; + previousRecipe = null; + } + } else { getMachine().getBaseMetaTileEntity().setActive(false); } @@ -177,19 +185,24 @@ protected void endRecipe(Recipe recipe) { for (ItemStack recipeOut : recipeOutputs) { int amount = recipeOut.stackSize; - for (int i = 0; i < outputs.size(); i++) { + for (int i = 0; i < outputs.size() && amount > 0; i++) { ItemStack slot = outputs.get(i); - if (slot == null) { - outputs.set(i, recipeOut.copy()); - amount = 0; - } else if (GT_Utility.areStacksEqual(recipeOut, slot)) { + if (GT_Utility.areStacksEqual(recipeOut, slot)) { int newSize = Math.min(slot.getMaxStackSize(), slot.stackSize + amount); + amount -= newSize - slot.stackSize; slot.stackSize = newSize; - amount -= newSize; } - - if (amount <= 0) + } + + for (int i = 0; i < outputs.size() && amount > 0; i++) { + ItemStack slot = outputs.get(i); + if (slot == null) { + ItemStack stack = recipeOut.copy(); + stack.stackSize = amount; + outputs.set(i, stack); + amount = 0; break; + } } if (amount > 0) diff --git a/src/main/java/gregtechmod/api/recipe/RecipeMap.java b/src/main/java/gregtechmod/api/recipe/RecipeMap.java index da519a21..c39da7b5 100644 --- a/src/main/java/gregtechmod/api/recipe/RecipeMap.java +++ b/src/main/java/gregtechmod/api/recipe/RecipeMap.java @@ -65,16 +65,18 @@ public Recipe findRecipe(List input) { if (recipes != null) result = findRecipe(recipes, input); if (result == null && recipesWild != null) - result = findRecipe(recipes, input); + result = findRecipe(recipesWild, input); } - return result; + return result != null && result.enabled ? result : null; } private Recipe findRecipe(List recipes, List input) { - for (Recipe recipe : recipes) { - if (recipe.matches(false, input)) { - return recipe; + if (recipes != null) { + for (Recipe recipe : recipes) { + if (recipe.matches(false, input)) { + return recipe; + } } } diff --git a/src/main/java/gregtechmod/api/util/GT_ModHandler.java b/src/main/java/gregtechmod/api/util/GT_ModHandler.java index e7a45238..917e0bb6 100644 --- a/src/main/java/gregtechmod/api/util/GT_ModHandler.java +++ b/src/main/java/gregtechmod/api/util/GT_ModHandler.java @@ -627,6 +627,39 @@ public static Map getMassFabricatorList() { return sMassfabRecipes; } + public static List getMaceratorResult(ItemStack input) { + try { + ic2.api.recipe.RecipeOutput recipe = ic2.api.recipe.Recipes.macerator.getOutputFor(input, true); + if (recipe != null) { + return GT_Utility.copy(recipe.items); + } + } catch (Throwable e) {} + + return null; + } + + public static List getExtractorResult(ItemStack input) { + try { + ic2.api.recipe.RecipeOutput recipe = ic2.api.recipe.Recipes.extractor.getOutputFor(input, true); + if (recipe != null) { + return GT_Utility.copy(recipe.items); + } + } catch (Throwable e) {} + + return null; + } + + public static List getCompressorResult(ItemStack input) { + try { + ic2.api.recipe.RecipeOutput recipe = ic2.api.recipe.Recipes.compressor.getOutputFor(input, true); + if (recipe != null) { + return GT_Utility.copy(recipe.items); + } + } catch (Throwable e) {} + + return null; + } + /** * IC2-ThermalCentrifuge Recipe. Overloads old Recipes automatically */ diff --git a/src/main/java/gregtechmod/api/util/GT_Utility.java b/src/main/java/gregtechmod/api/util/GT_Utility.java index 7eb1d7a2..0a0c6c0f 100644 --- a/src/main/java/gregtechmod/api/util/GT_Utility.java +++ b/src/main/java/gregtechmod/api/util/GT_Utility.java @@ -361,7 +361,8 @@ public static byte moveStackIntoPipe(IInventory aTileEntity1, Object aTileEntity ItemStack rStack = ((cofh.api.transport.IItemDuct)aTileEntity2).insertItem(ForgeDirection.getOrientation(aPutTo), copy(tStack)); byte tMovedItemCount = (byte)(tStack.stackSize - (rStack == null ? 0 : rStack.stackSize)); if (tMovedItemCount >= 1/*Math.max(aMinMoveAtOnce, aMinTargetStackSize)*/) { - //((cofh.api.transport.IItemConduit)aTileEntity2).insertItem(ForgeDirection.getOrientation(aPutTo), copyAmount(tMovedItemCount, tStack), false); + ItemStack remains = ((cofh.api.transport.IItemDuct)aTileEntity2).insertItem(ForgeDirection.getOrientation(aPutTo), copyAmount(tMovedItemCount, tStack)); + tMovedItemCount = (byte) (tStack.stackSize - remains.stackSize); aTileEntity1.decrStackSize(aGrabSlots[i], tMovedItemCount); aTileEntity1.markDirty(); return tMovedItemCount; @@ -484,13 +485,11 @@ private static byte moveOneItemStack(IInventory aTileEntity1, Object aTileEntity } for (int i = 0; i < tGrabSlots.length; i++) { - for (int j = 0; j < tPutSlots.length; j++) { - if (listContainsItem(aFilter, aTileEntity1.getStackInSlot(tGrabSlots[i]), true, aInvertFilter)) { - if (isAllowedToTakeFromSlot(aTileEntity1, tGrabSlots[i], aGrabFrom, aTileEntity1.getStackInSlot(tGrabSlots[i]))) { - if (isAllowedToPutIntoSlot((IInventory)aTileEntity2, tPutSlots[j], aPutTo, aTileEntity1.getStackInSlot(tGrabSlots[i]))) { - byte tMovedItemCount = moveStackFromSlotAToSlotB(aTileEntity1, (IInventory)aTileEntity2, tGrabSlots[i], tPutSlots[j], aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce); - if (tMovedItemCount > 0) return tMovedItemCount; - } + if (listContainsItem(aFilter, aTileEntity1.getStackInSlot(tGrabSlots[i]), true, aInvertFilter) && isAllowedToTakeFromSlot(aTileEntity1, tGrabSlots[i], aGrabFrom, aTileEntity1.getStackInSlot(tGrabSlots[i]))) { + for (int j = 0; j < tPutSlots.length; j++) { + if (isAllowedToPutIntoSlot((IInventory)aTileEntity2, tPutSlots[j], aPutTo, aTileEntity1.getStackInSlot(tGrabSlots[i]))) { + byte tMovedItemCount = moveStackFromSlotAToSlotB(aTileEntity1, (IInventory)aTileEntity2, tGrabSlots[i], tPutSlots[j], aMaxTargetStackSize, aMinTargetStackSize, aMaxMoveAtOnce, aMinMoveAtOnce); + if (tMovedItemCount > 0) return tMovedItemCount; } } } diff --git a/src/main/java/gregtechmod/common/GT_GUIHandler.java b/src/main/java/gregtechmod/common/GT_GUIHandler.java index afcb21c2..4680e77c 100644 --- a/src/main/java/gregtechmod/common/GT_GUIHandler.java +++ b/src/main/java/gregtechmod/common/GT_GUIHandler.java @@ -58,6 +58,7 @@ import gregtechmod.common.containers.GT_Container_TradeOMat_Settings; import gregtechmod.common.containers.GT_Container_Translocator; import gregtechmod.common.containers.GT_Container_VacuumFreezer; +import gregtechmod.common.containers.UniversalMacerator; import gregtechmod.common.gui.GT_GUIContainerMetaID_Machine; import gregtechmod.common.gui.GT_GUIContainer_1by1; import gregtechmod.common.gui.GT_GUIContainer_2by2; @@ -133,6 +134,7 @@ import gregtechmod.common.gui.GT_GUIContainer_TradeOMat_Settings; import gregtechmod.common.gui.GT_GUIContainer_Translocator; import gregtechmod.common.gui.GT_GUIContainer_VacuumFreezer; +import gregtechmod.common.gui.GUI_UniversalMacerator; import gregtechmod.common.tileentities.deprecated.GT_TileEntityMetaID_Machine; import gregtechmod.common.tileentities.deprecated.GT_TileEntity_Sonictron; import net.minecraft.entity.player.EntityPlayer; @@ -207,7 +209,7 @@ public Object getServerGuiElement(int ID, EntityPlayer player, World world, int if (ID == 146) return new GT_Container_Centrifuge (player.inventory, (IGregTechTileEntity) tTileEntity); if (ID == 147) return new GT_Container_RedstoneCircuitBlock (player.inventory, (IGregTechTileEntity) tTileEntity); if (ID == 148) return new GT_Container_BasicMachine (player.inventory, (IGregTechTileEntity) tTileEntity); - if (ID == 149) return new GT_Container_BasicMachine (player.inventory, (IGregTechTileEntity) tTileEntity); + if (ID == 149) return new UniversalMacerator (player.inventory, (IGregTechTileEntity) tTileEntity); if (ID == 150) return new GT_Container_AESU_Meta (player.inventory, (IGregTechTileEntity) tTileEntity); if (ID == 151) return new GT_Container_IDSU_Meta (player.inventory, (IGregTechTileEntity) tTileEntity); if (ID == 152) return new GT_Container_Teleporter (player.inventory, (IGregTechTileEntity) tTileEntity); @@ -306,7 +308,7 @@ public Object getClientGuiElement(int ID, EntityPlayer player, World world, int if (ID == 146) return new GT_GUIContainer_Centrifuge (player.inventory, (IGregTechTileEntity)tTileEntity); if (ID == 147) return new GT_GUIContainer_RedstoneCircuitBlock (player.inventory, (IGregTechTileEntity)tTileEntity); if (ID == 148) return new GT_GUIContainer_BasicMachine_E_Furnace (player.inventory, (IGregTechTileEntity)tTileEntity, "Microwave Oven", "E_Furnace.png"); - if (ID == 149) return new GT_GUIContainer_BasicMachine_Macerator (player.inventory, (IGregTechTileEntity)tTileEntity, "Universal Macerator", "Macerator.png"); + if (ID == 149) return new GUI_UniversalMacerator (player.inventory, (IGregTechTileEntity)tTileEntity, "Universal Macerator", "Macerator.png"); // TODO fix textures for usual macerator if (ID == 150) return new GT_GUIContainer_AESU_Meta (player.inventory, (IGregTechTileEntity)tTileEntity); if (ID == 151) return new GT_GUIContainer_IDSU_Meta (player.inventory, (IGregTechTileEntity)tTileEntity); if (ID == 152) return new GT_GUIContainer_Teleporter (player.inventory, (IGregTechTileEntity)tTileEntity); diff --git a/src/main/java/gregtechmod/common/containers/UniversalMacerator.java b/src/main/java/gregtechmod/common/containers/UniversalMacerator.java new file mode 100644 index 00000000..a6a59d85 --- /dev/null +++ b/src/main/java/gregtechmod/common/containers/UniversalMacerator.java @@ -0,0 +1,117 @@ +package gregtechmod.common.containers; + +import java.util.Iterator; +import java.util.List; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtechmod.api.gui.GT_ContainerMetaTile_Machine; +import gregtechmod.api.gui.GT_Slot_Holo; +import gregtechmod.api.gui.GT_Slot_Output; +import gregtechmod.api.interfaces.IGregTechTileEntity; +import gregtechmod.api.interfaces.IRecipeWorkable; +import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +/** + * @author TheDarkDnKTv + * + */ +public class UniversalMacerator extends GT_ContainerMetaTile_Machine { + + public boolean mOutputting = false, mItemTransfer = false, mSeperatedInputs = false; + + /** + * @param aInventoryPlayer + * @param aTileEntity + */ + public UniversalMacerator(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { + super(aInventoryPlayer, aTileEntity); + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addSlotToContainer(new Slot(mTileEntity, 1, 35, 25)); + addSlotToContainer(new Slot(mTileEntity, 2, 53, 25)); + addSlotToContainer(new Slot(mTileEntity, 7, 80, 63)); + List outputs = ((IRecipeWorkable) mTileEntity.getMetaTileEntity()).getOutputItems(); + for (int i = 0; i < outputs.size(); i++) { + int xOffset = 18 * (i % 2); + int yOffset = 18 * (i / 2); + + addSlotToContainer(new GT_Slot_Output(mTileEntity, 3 + i, 107 + xOffset, 16 + yOffset)); + } + addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 8, 63, false, true, 1)); + addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 26, 63, false, true, 1)); + addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 44, 63, false, true, 1)); + } + + @Override + public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { + if (aSlotIndex < 7) return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + + Slot tSlot = (Slot)inventorySlots.get(aSlotIndex); + if (tSlot != null) { + if (mTileEntity.getMetaTileEntity() == null) return null; + if (aSlotIndex == 7) { + ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bOutput = !((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bOutput; + return null; + } + if (aSlotIndex == 8) { + ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bItemTransfer = !((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bItemTransfer; + return null; + } + if (aSlotIndex == 9) { + ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bSeperatedInputs = !((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bSeperatedInputs; + return null; + } + } + + return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + if (mTileEntity.isClientSide() || mTileEntity.getMetaTileEntity() == null) return; + + mOutputting = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bOutput; + mItemTransfer = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bItemTransfer; + mSeperatedInputs = ((GT_MetaTileEntity_BasicMachine)mTileEntity.getMetaTileEntity()).bSeperatedInputs; + + @SuppressWarnings("rawtypes") + Iterator var2 = this.crafters.iterator(); + while (var2.hasNext()) { + ICrafting var1 = (ICrafting)var2.next(); + var1.sendProgressBarUpdate(this, 101, mOutputting?1:0); + var1.sendProgressBarUpdate(this, 102, mItemTransfer?1:0); + var1.sendProgressBarUpdate(this, 103, mSeperatedInputs?1:0); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void updateProgressBar(int par1, int par2) { + super.updateProgressBar(par1, par2); + switch (par1) { + case 101: mOutputting = (par2 != 0); break; + case 102: mItemTransfer = (par2 != 0); break; + case 103: mSeperatedInputs = (par2 != 0); break; + } + } + + @Override + public int getSlotCount() { + return 7; + } + + @Override + public int getShiftClickSlotCount() { + return 2; + } +} diff --git a/src/main/java/gregtechmod/common/gui/GUI_UniversalMacerator.java b/src/main/java/gregtechmod/common/gui/GUI_UniversalMacerator.java new file mode 100644 index 00000000..9cdbd96d --- /dev/null +++ b/src/main/java/gregtechmod/common/gui/GUI_UniversalMacerator.java @@ -0,0 +1,49 @@ +package gregtechmod.common.gui; + +import gregtechmod.api.GregTech_API; +import gregtechmod.api.gui.GT_GUIContainerMetaTile_Machine; +import gregtechmod.api.interfaces.IGregTechTileEntity; +import gregtechmod.common.containers.UniversalMacerator; +import net.minecraft.entity.player.InventoryPlayer; + +/** + * @author TheDarkDnKTv + * + */ +public class GUI_UniversalMacerator extends GT_GUIContainerMetaTile_Machine { + + private final String mName; + /** + * @param aInventoryPlayer + * @param aTileEntity + * @param aName + * @param aTextureFile + */ + public GUI_UniversalMacerator(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, String aName, String aTextureFile) { + super(new UniversalMacerator(aInventoryPlayer, aTileEntity), GregTech_API.GUI_PATH + aTextureFile); + mName = aName; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) { + fontRenderer.drawString(mName, 8, 4, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + super.drawGuiContainerBackgroundLayer(par1, par2, par3); + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + if (mContainer != null) { + if (((UniversalMacerator)mContainer).mOutputting) drawTexturedModalRect(x + 7, y + 62, 176, 18, 18, 18); + if (((UniversalMacerator)mContainer).mItemTransfer) drawTexturedModalRect(x + 25, y + 62, 176, 36, 18, 18); + if (((UniversalMacerator)mContainer).mSeperatedInputs) drawTexturedModalRect(x + 43, y + 62, 176, 54, 18, 18); + + if (mContainer.mMaxProgressTime > 0) { + int tSize = 20, tProgress = Math.max(1, Math.min(tSize, (mContainer.mProgressTime>0?1:0) + (mContainer.mProgressTime * tSize) / mContainer.mMaxProgressTime)) % (tSize+1); + drawTexturedModalRect(x + 78, y + 24, 176, 0, tProgress , 18); + } + } + } +} diff --git a/src/main/java/gregtechmod/common/recipe/ChancedStack.java b/src/main/java/gregtechmod/common/recipe/ChancedStack.java index 8f356c30..f039d8e9 100644 --- a/src/main/java/gregtechmod/common/recipe/ChancedStack.java +++ b/src/main/java/gregtechmod/common/recipe/ChancedStack.java @@ -3,7 +3,11 @@ import java.util.Optional; import java.util.Random; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + import gregtechmod.api.recipe.ChancedOutput; +import gregtechmod.api.util.GT_Utility; import gregtechmod.common.recipe.factory.SimpleRecipeFactory; import net.minecraft.item.ItemStack; @@ -34,4 +38,28 @@ public ItemStack getStack() { public Optional get(Random random) { return Optional.ofNullable(random.nextInt(SimpleRecipeFactory.MAX_CHANCE) <= chance ? stack.copy() : null); } + + @Override + public int hashCode() { + return GT_Utility.stackToInt(stack) + chance; + } + + @Override + public boolean equals(Object o) { + if (o instanceof ChancedOutput) { + ChancedOutput ch = (ChancedOutput) o; + return ch.getStack().isItemEqual(stack) && ch.getChance() == chance; + } + + return false; + } + + @Override + public String toString() { + ToStringBuilder.setDefaultStyle(ToStringStyle.SHORT_PREFIX_STYLE); + return new ToStringBuilder(this) + .append("stack", stack) + .append("chance", (chance * 1.0D / 100) + "%") + .toString(); + } } diff --git a/src/main/java/gregtechmod/common/recipe/RecipeEntry.java b/src/main/java/gregtechmod/common/recipe/RecipeEntry.java index d2965d0b..85a940d2 100644 --- a/src/main/java/gregtechmod/common/recipe/RecipeEntry.java +++ b/src/main/java/gregtechmod/common/recipe/RecipeEntry.java @@ -232,7 +232,7 @@ public String toString() { ToStringBuilder.setDefaultStyle(ToStringStyle.SHORT_PREFIX_STYLE); return new ToStringBuilder(this) .append("count=" + count) - .append("variants=" + Collections2.transform(variants, stack -> stack.getItem())) + .append("variants=" + variants) .append("matches=" + options) .build(); } diff --git a/src/main/java/gregtechmod/common/recipe/RecipeMaps.java b/src/main/java/gregtechmod/common/recipe/RecipeMaps.java index e89807ee..9e52d3f4 100644 --- a/src/main/java/gregtechmod/common/recipe/RecipeMaps.java +++ b/src/main/java/gregtechmod/common/recipe/RecipeMaps.java @@ -4,7 +4,9 @@ import gregtechmod.api.util.GT_ModHandler; import gregtechmod.common.recipe.factory.SimpleRecipeFactory; import gregtechmod.common.recipe.maps.IC2RecipeMap; +import gregtechmod.common.recipe.maps.PulverizerRecipeMap; import gregtechmod.common.recipe.maps.RecyclerRecipeMap; +import gregtechmod.common.recipe.maps.ScannerRecipeMap; /** * @@ -27,12 +29,12 @@ public class RecipeMaps { public static final RecipeMap ALLOY_SMELTING = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); public static final RecipeMap ASSEMBLING = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); public static final RecipeMap CANINNING = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); -// public static final RecipeMap sCNCRecipes = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); public static final RecipeMap LATHE = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); public static final RecipeMap CUTTING = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); public static final RecipeMap EXTRUDING = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); public static final RecipeMap HAMMER = new RecipeMap<>(1, 2, 1, 2, new SimpleRecipeFactory()); public static final RecipeMap PRINTER = new RecipeMap<>(1, 3, 1, 2, new SimpleRecipeFactory()); + public static final PulverizerRecipeMap PULVERIZING = new PulverizerRecipeMap(1, 2, 1, 4); public static final RecipeMap DIESEL_FUELS = new RecipeMap<>(1, 1, 0, 0, new SimpleRecipeFactory()); // TODO generators recipemaps public static final RecipeMap TURBINE_FUELS = new RecipeMap<>(1, 1, 0, 0, new SimpleRecipeFactory()); @@ -42,8 +44,9 @@ public class RecipeMaps { public static final RecipeMap MAGIC_FUELS = new RecipeMap<>(1, 1, 0, 1, new SimpleRecipeFactory()); // Fake RecipeMaps - public static final IC2RecipeMap MACERATION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getMaceratorRecipeList); - public static final IC2RecipeMap EXTRACTION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getExtractorRecipeList); - public static final IC2RecipeMap COMPRESSION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getCompressorRecipeList); - public static final RecyclerRecipeMap RECYCLING = new RecyclerRecipeMap(1, 2, 1, 2); + public static final IC2RecipeMap MACERATION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getMaceratorResult); + public static final IC2RecipeMap EXTRACTION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getExtractorResult); + public static final IC2RecipeMap COMPRESSION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getCompressorResult); + public static final RecyclerRecipeMap RECYCLING = new RecyclerRecipeMap(1, 2, 1, 2); + public static final ScannerRecipeMap SCANNING = new ScannerRecipeMap(1, 2, 1, 2); } diff --git a/src/main/java/gregtechmod/common/recipe/maps/IC2RecipeMap.java b/src/main/java/gregtechmod/common/recipe/maps/IC2RecipeMap.java index 8b9b9deb..07ef3335 100644 --- a/src/main/java/gregtechmod/common/recipe/maps/IC2RecipeMap.java +++ b/src/main/java/gregtechmod/common/recipe/maps/IC2RecipeMap.java @@ -2,17 +2,12 @@ import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.function.Supplier; +import java.util.function.Function; import gregtechmod.api.recipe.Recipe; import gregtechmod.api.util.GT_Utility; import gregtechmod.common.recipe.RecipeEntry; -import ic2.api.recipe.IRecipeInput; -import ic2.api.recipe.RecipeOutput; - import net.minecraft.item.ItemStack; /** A Recipe map for usual IC2 machines, used as adapter @@ -20,11 +15,11 @@ * */ public class IC2RecipeMap extends DummyRecipeMap { - private final Map recipeList; + private final Function> recipeGetter; - public IC2RecipeMap(int minInputs, int maxInputs, int minOutputs, int maxOutputs, Supplier> recipeMapGetter) { + public IC2RecipeMap(int minInputs, int maxInputs, int minOutputs, int maxOutputs, Function> recipeGetter) { super(minInputs, maxInputs, minOutputs, maxOutputs); - this.recipeList = recipeMapGetter.get(); + this.recipeGetter = recipeGetter; } @Override @@ -32,14 +27,13 @@ public Recipe findRecipe(List input) { for (ItemStack in : input) { if (GT_Utility.isStackValid(in)) { ItemStack inValid = in.copy(); - for (Entry e : recipeList.entrySet()) { - if (e.getKey().matches(inValid)) { - inValid.stackSize = e.getKey().getAmount(); - return new Recipe(0, 2, 400, false, - Collections.singleton(RecipeEntry.singleton(inValid)), - e.getValue().items, - Collections.emptyList()); - } + List results = recipeGetter.apply(inValid); + if (results != null && !results.isEmpty()) { + inValid.stackSize = in.stackSize - inValid.stackSize; + return new Recipe(0, 2, 200, false, + Collections.singleton(RecipeEntry.singleton(inValid)), + results, + Collections.emptyList()); } } } diff --git a/src/main/java/gregtechmod/common/recipe/maps/PulverizerRecipeMap.java b/src/main/java/gregtechmod/common/recipe/maps/PulverizerRecipeMap.java new file mode 100644 index 00000000..f2fa7998 --- /dev/null +++ b/src/main/java/gregtechmod/common/recipe/maps/PulverizerRecipeMap.java @@ -0,0 +1,129 @@ +package gregtechmod.common.recipe.maps; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.Random; + +import gregtechmod.api.recipe.ChancedOutput; +import gregtechmod.api.recipe.Recipe; +import gregtechmod.api.recipe.RecipeMap; +import gregtechmod.api.util.GT_Utility; +import gregtechmod.common.recipe.ChancedStack; +import gregtechmod.common.recipe.RecipeEntry; +import gregtechmod.common.recipe.factory.SimpleRecipeFactory; + +import cpw.mods.fml.common.Loader; + +import net.minecraft.item.ItemStack; + +/** + * @author TheDarkDnKTv + * + */ +public class PulverizerRecipeMap extends RecipeMap { + + // Made NOT to spam with throwing exceptions every recipe check + public final static boolean RC = Loader.isModLoaded("Railcraft"), TE = Loader.isModLoaded("ThermalExpansion"); + + public PulverizerRecipeMap(int minInputs, int maxInputs, int minOutputs, int maxOutputs) { + super(minInputs, maxInputs, minOutputs, maxOutputs, new SimpleRecipeFactory()); + } + + @Override + public Recipe findRecipe(List inputs) { + Recipe result = super.findRecipe(inputs); + + for (int i = 0; i < inputs.size() && result == null; i++) { + ItemStack input = inputs.get(i); + if (GT_Utility.isStackValid(input)) { + input = input.copy(); + + if (RC) try { // RailCraft recipes + mods.railcraft.api.crafting.IRockCrusherRecipe recipe = mods.railcraft.api.crafting.RailcraftCraftingManager.rockCrusher.getRecipe(input); + if (recipe != null) { + input.stackSize = recipe.getInput().stackSize; + if (recipe.getPossibleOuputs().size() <= maxOutputs) { + List chanced = new ArrayList<>(); + List outputs = new ArrayList<>(); + + for (Entry e : recipe.getOutputs()) { + if (e.getValue() == 1.0F) { + outputs.add(e.getKey().copy()); + } else { + int chance = (int)(e.getValue() * 10000); // This weird thingy was invented to find duplicates and create PiecedStack + ChancedStack val = new ChancedStack(e.getKey(), chance == 0 ? 1 : chance); + Optional opt = chanced.stream().filter(a -> a.equals(val)).findFirst(); + if (opt.isPresent()) { + ChancedOutput listStack = opt.get(); + chanced.remove(listStack); + ItemStack total = val.getStack(); + total.stackSize += listStack.getStack().stackSize; + chanced.add(new PiecedChancedStack(total, listStack.getChance())); + } else chanced.add(val); + } + } + + return new Recipe(0, 32, 500, false, // 25 seconds per 32 EU/t will be total 16,000EU + Collections.singleton(RecipeEntry.singleton(input)), // In RC Recipe running 5 seconds and with consumption 160RF total 16,000RF = 64,000EU + outputs, + chanced); + } + } + } catch (Throwable e) {} + + try { // IC2 recipes + ItemStack copy2 = input.copy(); + ic2.api.recipe.RecipeOutput recipe = ic2.api.recipe.Recipes.macerator.getOutputFor(copy2, true); + if (recipe != null) { + input.stackSize = input.stackSize - copy2.stackSize; + return new Recipe(0, 2, 400, false, + Collections.singleton(RecipeEntry.singleton(input)), + GT_Utility.copy(recipe.items), + Collections.emptyList()); + } + } catch (Throwable e) {} + + if (TE) try { // ThermalExpansion recipes + cofh.thermalexpansion.api.crafting.recipes.IPulverizerRecipe recipe = cofh.thermalexpansion.util.crafting.PulverizerManager.getRecipe(input); + if (recipe != null) { + ItemStack secondary = recipe.getSecondaryOutput(); + input.stackSize = recipe.getInput().stackSize; + return new Recipe(0, 16, recipe.getEnergy() / 16, false, + Collections.singleton(RecipeEntry.singleton(input)), + Collections.singleton(recipe.getPrimaryOutput()), + secondary == null ? Collections.emptyList() : Collections.singleton(new ChancedStack(secondary, recipe.getSecondaryOutputChance() * 100))); + } + } catch(Throwable e) {} + } + } + + return result; + } + + /** + * Instead of ChancedStack will check chacne for every single item in stack + * @author TheDarkDnKTv + * + */ + private static class PiecedChancedStack extends ChancedStack { + + public PiecedChancedStack(ItemStack stack, int chance) { + super(stack, chance); + } + + @Override + public Optional get(Random random) { + ItemStack stack = this.getStack(); + int amount = stack.stackSize; + stack.stackSize = 0; + for (int i = 0; i < amount; i++) + if (random.nextInt(SimpleRecipeFactory.MAX_CHANCE) <= getChance()) + stack.stackSize++; + + return Optional.ofNullable(stack.stackSize > 0 ? stack : null); + } + } +} diff --git a/src/main/java/gregtechmod/common/recipe/maps/ScannerRecipeMap.java b/src/main/java/gregtechmod/common/recipe/maps/ScannerRecipeMap.java new file mode 100644 index 00000000..a4d5135b --- /dev/null +++ b/src/main/java/gregtechmod/common/recipe/maps/ScannerRecipeMap.java @@ -0,0 +1,51 @@ +package gregtechmod.common.recipe.maps; + +import java.util.Collections; +import java.util.List; + +import gregtechmod.api.enums.GT_Items; +import gregtechmod.api.recipe.Recipe; +import gregtechmod.api.util.GT_Utility; +import gregtechmod.common.recipe.RecipeEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +/** + * @author TheDarkDnKTv + * + */ +public class ScannerRecipeMap extends DummyRecipeMap { + + public ScannerRecipeMap(int minInputs, int maxInputs, int minOutputs, int maxOutputs) { + super(minInputs, maxInputs, minOutputs, maxOutputs); + } + + @Override + public Recipe findRecipe(List inputs) { + for (int i = 0; i < inputs.size(); i++) { + ItemStack input = inputs.get(i); + if (GT_Utility.isStackValid(input) && GT_Items.IC2_Crop_Seeds.isStackEqual(input, true, true)) { + NBTTagCompound data = input.getTagCompound(); + if (data == null) return null; // May not work + int dur = 0, eut = 0; + if (data.getByte("scan") < 4) { + data.setByte("scan", (byte)4); + dur = 20; + eut = 500; + } else { + dur = 1; + eut = 1; + } + + ItemStack output = input.copy(); + output.setTagCompound(data); + return new Recipe(0, eut, dur, false, + Collections.singleton(RecipeEntry.singleton(input)), + Collections.singleton(output), + Collections.emptyList()); + } + } + + return null; + } +} diff --git a/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Microwave.java b/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Microwave.java index 4c1231b3..8baaa369 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Microwave.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Microwave.java @@ -1,5 +1,6 @@ package gregtechmod.common.tileentities.machines.basic; +import java.util.Collections; import java.util.List; import java.util.UUID; @@ -13,8 +14,11 @@ import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; import gregtechmod.api.recipe.Recipe; +import gregtechmod.api.recipe.RecipeLogic; +import gregtechmod.api.recipe.RecipeMap; import gregtechmod.api.util.GT_ModHandler; import gregtechmod.api.util.GT_Utility; +import gregtechmod.common.recipe.RecipeEntry; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -27,11 +31,11 @@ public class GT_MetaTileEntity_Microwave extends GT_MetaTileEntity_BasicMachine { - public GT_MetaTileEntity_Microwave(int aID, String mName, List recipeMap) { + public GT_MetaTileEntity_Microwave(int aID, String mName, RecipeMap recipeMap) { super(aID, mName, recipeMap); } - public GT_MetaTileEntity_Microwave(List recipeMap) { + public GT_MetaTileEntity_Microwave(RecipeMap recipeMap) { super(recipeMap); } @@ -46,50 +50,57 @@ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { } @Override - public void initRecipeLogic(List recipeMap) { - super.initRecipeLogic(recipeMap); - recipeLogic.setRecipeProvider(() -> { - ItemStack output = null; - if (GT_Utility.isStackValid(mInventory[2]) && (output = checkForExlosion()) != null) { - if (TileEntityFurnace.getItemBurnTime(mInventory[2]) > 0 || TileEntityFurnace.getItemBurnTime(output) > 0) { - mInventory[2] = null; - getBaseMetaTileEntity().setOnFire(); - } else { - ItemStack input = mInventory[2].copy(); - input.stackSize = 1; - return new Recipe(input, null, output, null, null, null, 25, 4, 0, false); + public void initRecipeLogic(RecipeMap recipeMap) { + recipeLogic = new RecipeLogic(recipeMap, this) { + @Override + protected Recipe findRecipe() { + ItemStack output = null; + + List inputs = getInputItems(); + for (int i = 0; i < inputs.size(); i++) { + ItemStack input = inputs.get(i); + if (GT_Utility.isStackValid(input) && (output = checkForExlosion(input, i)) != null) { + if (TileEntityFurnace.getItemBurnTime(input) > 0 || TileEntityFurnace.getItemBurnTime(output) > 0) { + inputs.set(i, null); + getBaseMetaTileEntity().setOnFire(); + } else { + ItemStack input1 = input.copy(); + input1.stackSize = 1; + return new Recipe(0, 4, 25, false, + Collections.singleton(RecipeEntry.singleton(input1)), + Collections.singleton(output.copy()), + Collections.emptyList()); + } + } } + + return null; } - - return null; - }); + }; } - private ItemStack checkForExlosion() { - ItemStack tOutput = GT_ModHandler.getSmeltingOutput(mInventory[2], false, mInventory[3]); - if (mInventory[2].getItem() == GT_Items.Spray_CFoam.getItem() || - GT_Utility.areStacksEqual(mInventory[2], GT_ModHandler.getIC2Item("constructionFoamSprayer", 1, GregTech_API.ITEM_WILDCARD_DAMAGE)) || - GT_Utility.areStacksEqual(mInventory[2], GT_ModHandler.getIC2Item("constructionFoam", 1, GregTech_API.ITEM_WILDCARD_DAMAGE)) || - GT_Utility.areStacksEqual(mInventory[2], GT_ModHandler.getIC2Item("CFCell", 1))) { -// mInventory[2] = null; -// getBaseMetaTileEntity().doExplosion(128); // FIXME get filled sprayer + private ItemStack checkForExlosion(ItemStack input, int inIdx) { + ItemStack tOutput = GT_ModHandler.getSmeltingOutput(input, false, null); + if (input.getItem() == GT_Items.Spray_CFoam.getItem() || + GT_Utility.areStacksEqual(input, GT_ModHandler.getIC2Item("constructionFoamSprayer", 1, GregTech_API.ITEM_WILDCARD_DAMAGE)) || + GT_Utility.areStacksEqual(input, GT_ModHandler.getIC2Item("constructionFoam", 1, GregTech_API.ITEM_WILDCARD_DAMAGE)) || + GT_Utility.areStacksEqual(input, GT_ModHandler.getIC2Item("CFCell", 1))) { + IGregTechTileEntity ent = getBaseMetaTileEntity(); + getInputItems().set(inIdx, null); + ent.doExplosion(128); try { ItemStack foamSprayer = GT_ModHandler.getIC2Item("constructionFoamSprayer", 1, new ItemStack(Blocks.sponge, 1)); NBTTagCompound data = new NBTTagCompound(); NBTTagCompound fluid = new NBTTagCompound(); - fluid.setInteger("Amount", 10000); - fluid.setString("Fluid", "ic2constructionfoam"); + fluid.setInteger("Amount", 32000); + fluid.setString("FluidName", "ic2constructionfoam"); data.setTag("Fluid", fluid); foamSprayer.setTagCompound(data); - - - for (int i = 0; i < 6; i++) { - foamSprayer.getItem().onItemUse(foamSprayer, new FakePlayer((WorldServer) getBaseMetaTileEntity().getWorld(), new GameProfile(UUID.randomUUID(),"Foo")), - getBaseMetaTileEntity().getWorld(), - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord(), i, 0, 0, 0); + foamSprayer.getItem().onItemUse(foamSprayer, new FakePlayer((WorldServer) ent.getWorld(), new GameProfile(UUID.randomUUID(),"Foo")), ent.getWorld(), + ent.getXCoord(), + ent.getYCoord(), + ent.getZCoord(), i, 0, 0, 0); } } catch (Throwable e) { e.printStackTrace(); @@ -97,15 +108,15 @@ private ItemStack checkForExlosion() { return null; } else { - if (OrePrefixes.ingot.contains(mInventory[2]) + if (OrePrefixes.ingot.contains(input) || OrePrefixes.ingot.contains(tOutput) - || Materials.Netherrack.contains(mInventory[2]) - || Materials.Gunpowder.contains(mInventory[2]) + || Materials.Netherrack.contains(input) + || Materials.Gunpowder.contains(input) || Materials.Gunpowder.contains(tOutput) - || mInventory[2].isItemEqual(new ItemStack(Blocks.netherrack)) - || mInventory[2].getItem() == Items.egg) { + || input.isItemEqual(new ItemStack(Blocks.netherrack)) + || input.getItem() == Items.egg) { - mInventory[2] = null; + getInputItems().set(inIdx, null); getBaseMetaTileEntity().doExplosion(128); return null; } diff --git a/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Pulverizer.java b/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Pulverizer.java index fb5d3f65..3465bd0d 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Pulverizer.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Pulverizer.java @@ -5,17 +5,18 @@ import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtechmod.api.recipe.Recipe; - +import gregtechmod.api.recipe.RecipeMap; +import gregtechmod.api.util.ListAdapter; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; public class GT_MetaTileEntity_Pulverizer extends GT_MetaTileEntity_BasicMachine { - public GT_MetaTileEntity_Pulverizer(int aID, String mName, List recipeMap) { + public GT_MetaTileEntity_Pulverizer(int aID, String mName, RecipeMap recipeMap) { super(aID, mName, recipeMap); } - public GT_MetaTileEntity_Pulverizer(List recipeMap) { + public GT_MetaTileEntity_Pulverizer(RecipeMap recipeMap) { super(recipeMap); } @@ -27,82 +28,32 @@ public GT_MetaTileEntity_Pulverizer(List recipeMap) { public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_Pulverizer(recipeLogic.recipeMap); } - - public void checkRecipe() { // TODO register new recipe map with pulv recipes & chanded output -// if (mInventory[2] != null) { -// if (mInventory[3] == null && mInventory[4] == null) { -// if (mInventory[2].isItemEqual(new ItemStack(Blocks.gravel, 1))) { -// Object tObject = GT_ModHandler.getPulverizerRecipe(mInventory[2]); -// try { -// if (tObject instanceof GT_PulverizerRecipe) { -// GT_PulverizerRecipe tRecipe = (GT_PulverizerRecipe)tObject; -// if (tRecipe != null && tRecipe.getInput().stackSize <= mInventory[2].stackSize) { -// if ((mOutputItem1 = tRecipe.getPrimaryOutput()) != null) { -// if (getBaseMetaTileEntity().getRandomNumber(100) < tRecipe.getSecondaryOutputChance()) { -// mOutputItem2 = tRecipe.getSecondaryOutput(); -// } -// mInventory[2].stackSize-=tRecipe.getInput().stackSize; -// mMaxProgresstime = 300*tRecipe.getInput().stackSize; -// mEUt = 3; -// return; -// } -// } -// } else { -// IPulverizerRecipe tRecipe = (IPulverizerRecipe)tObject; -// if (tRecipe != null && tRecipe.getInput().stackSize <= mInventory[2].stackSize) { -// if ((mOutputItem1 = tRecipe.getPrimaryOutput()) != null) { -// if (getBaseMetaTileEntity().getRandomNumber(100) < tRecipe.getSecondaryOutputChance()) { -// mOutputItem2 = tRecipe.getSecondaryOutput(); -// } -// mInventory[2].stackSize-=tRecipe.getInput().stackSize; -// mMaxProgresstime = 300*tRecipe.getInput().stackSize; -// mEUt = 3; -// return; -// } -// } -// } -// } catch(Throwable e) {if (GregTech_API.DEBUG_MODE) GT_Log.log.catching(e);} -// } -// try { -// for (ItemStack tOutput : mods.railcraft.api.crafting.RailcraftCraftingManager.rockCrusher.getRecipe(mInventory[2]).getRandomizedOuputs()) { -// if (tOutput != null) { -// if (mOutputItem1 == null) { -// mOutputItem1 = GT_Utility.copy(tOutput); -// continue; -// } -// if (GT_Utility.areStacksEqual(mOutputItem1, tOutput)) { -// mOutputItem1.stackSize += tOutput.stackSize; -// continue; -// } -// if (mOutputItem2 == null) { -// mOutputItem2 = GT_Utility.copy(tOutput); -// continue; -// } -// if (GT_Utility.areStacksEqual(mOutputItem2, tOutput)) { -// mOutputItem2.stackSize += tOutput.stackSize; -// continue; -// } -// } -// } -// if (mOutputItem1 != null) { -// mInventory[2].stackSize--; -// mMaxProgresstime = 300; -// mEUt = 4; -// return; -// } -// } catch(Throwable e) {if (GregTech_API.DEBUG_MODE) GT_Log.log.catching(e);} -// if (null != (mOutputItem1 = GT_ModHandler.getMaceratorOutput(mInventory[2], true, mInventory[3]))) { -// mOutputItem2 = null; -// mMaxProgresstime = 400; -// mEUt = 2; -// return; -// } -// } else { -// bOutputBlocked = true; -// } -// } - } + @Override + public List getInputItems() { + return new ListAdapter<>(mInventory, 1, 2); + } + + @Override + public List getOutputItems() { + return new ListAdapter<>(mInventory, 3, 6); + } + + @Override + public boolean allowPullStack(int aIndex, byte aSide, ItemStack aStack) { + return aSide!=mMainFacing?aIndex>=3||aIndex<8:false; + } + + @Override + public int getInvSize() { + return 8; + } + + @Override + public int dechargerSlotStartIndex() { + return 7; + } + @Override public int getFrontFacingInactive() { return 256; diff --git a/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java b/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java index 83be532b..ab2dca51 100644 --- a/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java +++ b/src/main/java/gregtechmod/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java @@ -1,26 +1,23 @@ package gregtechmod.common.tileentities.machines.basic; -import java.util.List; - import gregtechmod.api.GregTech_API; import gregtechmod.api.enums.GT_Items; import gregtechmod.api.interfaces.IGregTechTileEntity; import gregtechmod.api.metatileentity.MetaTileEntity; import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtechmod.api.recipe.Recipe; -import gregtechmod.api.recipe.RecipeLogic; +import gregtechmod.api.recipe.RecipeMap; import gregtechmod.api.util.GT_Utility; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; public class GT_MetaTileEntity_Scanner extends GT_MetaTileEntity_BasicMachine { - public GT_MetaTileEntity_Scanner(int aID, String aName, List recipeMap) { + public GT_MetaTileEntity_Scanner(int aID, String aName, RecipeMap recipeMap) { super(aID, aName, recipeMap); } - public GT_MetaTileEntity_Scanner(List recipeMap) { + public GT_MetaTileEntity_Scanner(RecipeMap recipeMap) { super(recipeMap); } @@ -36,39 +33,6 @@ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { return new GT_MetaTileEntity_Scanner(recipeLogic.recipeMap); } - @Override - public void initRecipeLogic(List recipeMap) { - recipeLogic = new RecipeLogic(recipeMap, this) { - @Override - protected void moveItems() { - GT_Utility.moveStackFromSlotAToSlotB(getBaseMetaTileEntity(), getBaseMetaTileEntity(), 3, 4, (byte)64, (byte)1, (byte)64, (byte)1); - } - - @Override - protected Recipe findRecipe() { - if (GT_Utility.isStackValid(mInventory[1]) && GT_Items.IC2_Crop_Seeds.isStackEqual(mInventory[1], true, true)) { - NBTTagCompound data = mInventory[1].getTagCompound(); - if (data == null) return null; // May not work - int dur = 0, eut = 0; - if (data.getByte("scan") < 4) { - data.setByte("scan", (byte)4); - dur = 20; - eut = 500; - } else { - dur = 1; - eut = 1; - } - - ItemStack output = mInventory[1].copy(); - output.setTagCompound(data); - return new Recipe(mInventory[1].copy(), null, output, null, null, null, dur, eut, 0, false); - } - - return null; - } - }; - } - public boolean allowPutStack(int aIndex, byte aSide, ItemStack aStack) { return super.allowPutStack(aIndex, aSide, aStack) && GT_Items.IC2_Crop_Seeds.isStackEqual(aStack, true, true); } diff --git a/src/main/java/gregtechmod/loaders/preload/GT_MetaTileEntityLoader.java b/src/main/java/gregtechmod/loaders/preload/GT_MetaTileEntityLoader.java index 0bd833f4..ad607634 100644 --- a/src/main/java/gregtechmod/loaders/preload/GT_MetaTileEntityLoader.java +++ b/src/main/java/gregtechmod/loaders/preload/GT_MetaTileEntityLoader.java @@ -1,7 +1,5 @@ package gregtechmod.loaders.preload; -import java.util.Collections; - import gregtechmod.api.enums.GT_Items; import gregtechmod.api.enums.Materials; import gregtechmod.api.enums.OrePrefixes; @@ -74,8 +72,8 @@ public void run() { new GT_MetaTileEntity_Assembler ( 60, "GT_Assembler" , RecipeMaps.ASSEMBLING); new GT_MetaTileEntity_Printer ( 61, "GT_Printer" , RecipeMaps.PRINTER); new GT_MetaTileEntity_Centrifuge ( 62, "GT_Centrifuge"); -// new GT_MetaTileEntity_Microwave ( 63, "GT_Microwave" , Collections.emptyList()); // TODO custom recipes -// new GT_MetaTileEntity_Pulverizer ( 64, "GT_Pulverizer" , Collections.emptyList()); // TODO custom recipes + new GT_MetaTileEntity_Microwave ( 63, "GT_Microwave" , null); + new GT_MetaTileEntity_Pulverizer ( 64, "GT_Pulverizer" , RecipeMaps.PULVERIZING); new GT_MetaTileEntity_RedstoneLamp ( 65, "GT_RedstoneLamp"); new GT_MetaTileEntity_RedstoneNoteBlock ( 66, "GT_RedstoneNoteBlock"); new GT_MetaTileEntity_RedstoneButtonPanel ( 67, "GT_RedstoneButtonPanel"); @@ -124,7 +122,7 @@ public void run() { new GT_MetaTileEntity_Lathe (111, "GT_Lathe" , RecipeMaps.LATHE); new GT_MetaTileEntity_AdvancedCraftingTable (112, "GT_ProjectTable"); new GT_MetaTileEntity_PlateCutter (113, "GT_Cutter" , RecipeMaps.CUTTING); -// new GT_MetaTileEntity_Scanner (114, "GT_Scanner" , Collections.emptyList()); // TODO custom recipes + new GT_MetaTileEntity_Scanner (114, "GT_Scanner" , RecipeMaps.SCANNING); new GT_MetaTileEntity_Extruder (115, "GT_Extruder" , RecipeMaps.EXTRUDING); new GT_MetaTileEntity_ElectricRetrieverAdvanced (116, "GT_RetrieverAdvanced"); diff --git a/src/main/resources/assets/gregtech_addon/textures/gui/Macerator.png b/src/main/resources/assets/gregtech_addon/textures/gui/Macerator.png index fa37877c0324a3c0b6a04bd259b688291427e8ba..b27a95035639a577fa91301ca9ae1071708d6884 100644 GIT binary patch literal 4380 zcmbtX2{@Gd8vm?g6vmb=Vj5J|`DSbxjZv2DAzK_V#$dwCG&2}mCbW>Xu7j2%bV#yQ zk}QLgijI(oP*EgHSt6qQX>rcE&$;(L_uhG)nfZU;|M&mB@B4d~ZzjRsZm)>2tS|ro zB9<1WjsU;|EqMSTUg)a}LBK#4`VIHqfgMCnUW0IvuBGRqc4bQyuX`%m3 zbeb69m3*vzI~qA@_jy?raQ`w90UCE;|7155zeAi4JD0nVP^3;_I- z6el;9o2?CwL<`m;uIa1A4yHqB0N6!f(}|=&G7ITL_NP$ssOcIm3Q6(Bqg-`uL0h^B zIe=mj!65ICuyZ0s1d@-!ffhzjM@J9TKw?2Ghz51h7_25n4+rYtF#5>vFBD{r z;p>NUG&TQj3%bIi0$40M4vh{A3)2eI)}k@|(NM7%pg}Aei`9e>n#^!2i^$fbGL?QX zn39-Kwr{2jvm4Y z`fA*lgeC`(gUM7D6T)KFvGf2Mi^dF~{R`^#?LQfSq_wqOxAB+01P8C1V6x0Yp)kG+ z@|S3)Q#hTBb|f=tAq*1PEEIB6X)PK$&V)fGvSoVd@XhAdvWEk>J`>PkW zwm3^FlSQPG$d;yf6cn=-h2o3THqh49A?j*tl5`9}O&@I?KTV>ZE>=@d&kqFkKwW(U ztnZKWrZiH>T4sNo_x&%=?_*G)&LRf=&pd1WwpJ223knlTR`~ah*iSzEeHBDOeysu= zk+fFbcobG@LPO4@*ZS~V z9O!=z@$23ndiDn#8U$<0^$7%Btj{nq6&hR&XhLmO%bf=R;nS9;yPeqQCkMEx{d!Uj zhjBu+bBc-ijpiGkcXnGBu8N3GRKI0k=J_I$jk_C|31~*ewZondb(x(qEZ@prvh2jF z%tRA*2w&J|!#{%mkS_K5*?fdE$I+^&^)6C$UYQExx+!8w8hD#;0pkNjq5X0EwujPazw zJ-fKIwXB>1ZPNw80`-&h@Hi!&_s3KGJV!47Z1Y(E2)Uc^=FCVMaQXJZvV!}V?2EV_ z;kE{(fiiGgM=&~C{;JIB@J&LF@}jW)pD+8ufJFX=WH%V%k;bXp9%Vf(!KVKWwQrhh~T<|kr%iF)YKM|aWQN9+J195f5#ZldviC3s{YBT!x-^2AT0OY{Ol+B z-0l~=53jQ%IT8VEzZ>JaK_Y?DUDTR^;3|?=bAtuvsB=>f=IkB!=D&N51u8eB*}Ul6 zU{cp1|5R<8QA$PV4D0!@)OLnPvNts2n zb|T*^*-*qid!AX_f2=YwALAQ2yz^>z-Lw3` zo8olA1We!Ni`aMmUt-?7h&!DwUuF4{em-8=#3{Ij2sO&#n|fVeQrZ)^aOPmdRiEkb zkeE(uuOy?==Ul^5@TxO^aM(iIcwR5w*g+~o)?AU*a@bAX>)a#1x`SmsfwTAIm=j}B zMy{oWs}Jl;%+n9d72n5mJR5qy+$%Uu`Rpnd7*ccRB|=X^q~;fjd95aQ%r!sL_)R_a zRjRxD zGK;+K$wtpIyyl7>tdLB@vY|dh!5Csm5Mgz$Yd&IS?(Lb?3XJ4jve$uk_H~{|;|1z9 zOuSBA0P<7gCRKl1${Av>N^K(NTbAysNxvEbc=XHB#)rKPI?DE(x^3ub!>^RYGcJ(y zDdSM}g%g#+!-k^NyD8;PNsswhQs5R9Teo5lei_1i_?6|#+r=?o#>L(#9$8gt%6Q(M zrD9*lIjl-)a;MbOYO7V29;Ir@Y89RFo-K3Mu_d_OnwXTZ!MK0~sotzqQ0 zQd?HEktd<-UVY-ritTKRdD;_4QJS4-p!CqhEM>xavjQBvbUrj*_aPc)!67;cXY2}% ze`J)?7W45$zUSjDX+T^>TzBAJH)HjUWVO^iBe^pTH)pcD*KFa(b@f-M3P`e!o`-BmY$xTl=dz&-iz6InHxW8 z*biguObF5S)SC-sj z+zenx;Ez9sWJ^D&bJDnuYB3F;J`t>-sF>OM>+XD6^K^RhQ72gh}B-4eMps#HGT7{k+c?r5&`;(#$B{ z!@UWkL3vya>&T@3O+y7H_E&suuFh|7KzgOUInAdvtIcP(%U^QEs_0V`wf$4C;#tK> z(q=r|J2j%;ydfn4QHD?#2Ak(dvrm7^KFRqqbz6N9~lqQmI)Va8Dnt7d7YDBis6``Nt zE~^WxQ?LBz;BPMFd#UQ?v`-*2iqvk3JNDj!!;>H5h?Z_u zT57#^V>q&6v3d1y_2w7@#6gub>$$>3#|nrh8vQ{%Du;u(uf!uy`z*O}iduBy zi0A7@m@Ps4Q5`qWfal|K-E@CCs!I6Gf^rx+ATTxI5eso=C=q%hb?;4}E*ryU7vqj- zTqK|&_btN0BdT6}rJphsNt$6>vnf@BFGbEWra3<__plI~JSln`qAz0LmY z&cBf2p2t>*{#6O$FqPaeoyS{%+O0`=& zgHNQ5(adWOnCu z1CbLmaNF9hwV`_Jh`&kA4FISisL(2ossn@k_y!z=3GFr@750#?vc$$5r6d zYM*!6D>@&=@$@gu>OdZ|Wfs)g2!GAmM7*EgEFwfIwQXMIb)`(|642Vu`XDVEovXqp z0fB>Dn`HT_)E%d<7l3~Bf?nsw;W+iEx5o#^@gpp(;IdE+fT?)=p)C=3U*O1#Lrwz*=tm+_g zCTIz>m6{#I97U6`Xf4e0#YpuZKeoQZ?yyT(<@9H#Zh30CySsaTq|8YTXyAEWN^J>! zOsgXfz36N%3OCkZ$piI`T+;&o2RNbs(T{5D*nqk#C41<#5)4|+>u{hx1$6thEQHE$ zMb<3gANE8h^!sM{F^rk&>)h6YkGt)8SRx~6HnhlL&jf)McJbz1+6}%yy{Lr z*e??WIdfq1vXb_MnkPoB^})_(iwevyJ2F(#G9H|zf$MQ~SO_qvXMQWdIo(TfNwaS_r~n>AHmS#EZ;)~<Iu;VzOhXItagT(J9S6N6t8k zd<%oRz2mcqaIlz`Lj*OPKABEL?HDwvfR=dk8HI;_%=XNi!PTy!JB{0HW+yxa{p=s! zO{)r3SO=w(Rn_=lY!A7LcV=uCtaAj-e)e@IGHMV$y<*KwVYt)PwvZ(ouelCwiDM^* zYE2vVCab{(Up#O%p=))>^&7rMXnm+w4FdQ=B}xexP&(M%tX75XnW{wakYsp8LWr!s60aT zzMpu#Ru@jW)ofe71^11|oB2L9sLoR==h8aDoTcTmHFn@V)bz6j(0G=<&THkh7Z>>1L@yy`tI(JDPoO>3?JDAK5aDLceppf{ zGH^(^hWnSNFY$EjE#IOW5=PWd9mw(*KwaXfnNHg*a1~+y&Y;3ppO9BAReq5xvO>Lh z?RJyvpkN;_Ob_1eS2-luc(^}*%<=$&s=lw{vJishvqKFRSSHJ&({~ZcK`T4lr-KK8h2$5tp zd*b+#DV-C?fLcS~;4uYbDUjI9A(^D7L-GZ&&8PY^M_a$^16yB#d>P579ZI^0rmxc& zf243-#U{Eldu_89<=~__nVX`CKVMcR?iDH_3o6u2W7Uc344g#1AXR~&$w0mbwanRn ze4B+;K2ALTvPW_9tOj5*g5o9|pkaD(U{$WZ2^shc2}(*pMo}{zZeiR4$#P7|sKUX1 z=2vDf^eNRA7!LnEW=EzQsSb^ejg@#D=!x`&M&Kw(>7HH)cIECOcN_oMFKwv;VT?ey zyF6DZ<#wTrz>DE}#l}y;wKpoW01qqvM#49o+nQfYZ^>Ge#VV=w zR38ZNQI+s|qJvv&v6zT9nYHbHf0cfIy=%XT3`D33)_rabvE?!4f@fWxHcx$PJeEfgxECfrcE9G=V0~J z$I7$m2#Yqwn0nJR_sin>Z7X!9J(WPS!U5`}!DlEP>Lz>jwGo!elp~0KXsVG;JW)S4 zYhMwgY^O(XH6dW~iivW0I}OKA|1lsw@u9@kW#vx%ewmp^c>3ITWxPOmQK~k!9GnSg zlPCaT^*8U@3k6%unb)t#U^C?maN|9DJChUtlsjI9gXf}4nN+YXZ$y3TgRO6j0KM!42UW5lWP{HaIkAm#=P4R~c68#iL(ctf_4ula-;NR>E#D*{`_Whiem$ z$J}v)`v#p})z{dJS?Pt{i|-3(>JjYZCc<}ceCDwpHWoSzhxY$ZjbG^NH9xdF)|Q0O zbik4hXdeC_(PmK--br>!2cDx=2%l|he*p6xAw4(i%m#+HytU*@FzCMATtCP!dfv|` zFi(%t#Vx}{FQ!`xIWB!BjT;ahlBp%jS0-J431-5T7E)0Sbl3Ng)@D?9+$LPm8cH*kKh7k`cRNWBoG%GV-+f zi=BT3%va{PdVagt`a6&^`4!Jo$@RxPwA1{;zSif> z2WM$`xwg-CGS@oG=u1IRH6;~;m(z`#iw$KX=SsuYWg8P%NRB2ap0fYG&ZeJViY?#y z>wtg*GRB_ouoz=ldW5UV9^Qm3uWOP3u}#~;a>V7)IEMMD4fB3(*6&22_IXABMBe;Q z&Lq-Z_a-yFAO_o}e=~U@GwVp&&!kEWByZLj_UiiQYEl`v=Vm$YZLJ~}?7z7|7oiV? z&qPH;X~dK{H_x9k<}ap#aJ?02abzR~LvdxIe!giKsvtoGV7f^9Tt}i`NN$d?yvf7- z<&SWe!#)XkU#2(C;jHSc5@sNLZ)Wia@x_)m->z1h7XFYN97P0A8-pUkwN-9d8fb^Y zp2z+RRQS3o@a_4yf1*ZRJ>6P$o3(xy!Y|BSjkPHk<^MZ&Of5P+iF_XBhqK5){+*M< z66KIrqQ*Y;SWrZMjxx$PwjG!WfZwwdWWU z|FGwr{ei>q9lE*~qX-9TWS*Yu{ywAJL*YhLRJvabDIPFCErosMKU3O@gGr~HT5$h0 z^~>s&gy8>gh2`u2PA0elim6(>cWvkB=xC3+nfOsqJ9BMiI%O#OqIsR_V}NiCL4XJk zBGP8JD;C9LE###nmUUB{3v=9*c){(O9M&E!+nY-{fv8Fq^0w0^8iFc%5%hVb_OY~- zQlma69BaF%xds7(nF~)-{e?WTCE6|VyT14a7zYy09@wBN)+PHGJW!Igr?OKdBH_!; zrLdunHkI+vVju!?-c9W5`?k8MsM>cUnku@SDk)MjW^)1P@?GtnAl%#O=dIYv*uH~( z2RVj+9IA#H=%CNd0p_WqnMd|CJx;0)gu8zPl*xk0i}t@F>GN*~1O(I$c9iqX+d4`- zcU>AemnpY(cbtZBuhc{PrTG&sZmiho0sNYXYUcJ*@g7x#)ic$4nl+C3gu5pZ^^-^f zd8)zh79V0%s6-0Zy&2FexMA5C(r_t!D>aiyw}UC5DW87h+Bl`XfLX9w@*h2JcIHf zk$=!^=?T~fC~BuX6y3HS`_Vhvj1-WLnC#=K91;rm1u