From ac2bc0124a8915c102950b4e40afe115fb184690 Mon Sep 17 00:00:00 2001 From: Shadows_of_Fire Date: Fri, 22 Jun 2018 19:39:30 -0400 Subject: [PATCH] We're just gonna hope nothing is on fire. --- .../api/ActuallyAdditionsAPI.java | 67 +- .../api/internal/IFarmer.java | 8 +- .../api/internal/IMethodHandler.java | 6 +- .../api/recipe/CrusherRecipe.java | 47 +- .../mod/ActuallyAdditions.java | 2 + .../mod/blocks/BlockAtomicReconstructor.java | 12 +- .../mod/blocks/BlockBatteryBox.java | 8 +- .../mod/blocks/BlockCompost.java | 28 +- .../mod/blocks/BlockDisplayStand.java | 77 ++- .../mod/blocks/BlockEmpowerer.java | 18 +- .../mod/blocks/BlockGiantChest.java | 18 +- .../mod/blocks/BlockLaserRelay.java | 13 +- .../mod/blocks/BlockSlabs.java | 23 +- .../mod/blocks/BlockTreasureChest.java | 15 +- .../mod/blocks/base/BlockContainerBase.java | 6 +- .../mod/blocks/base/BlockPlant.java | 2 +- .../mod/blocks/render/RenderBatteryBox.java | 2 +- .../mod/blocks/render/RenderCompost.java | 4 +- .../mod/blocks/render/RenderDisplayStand.java | 2 +- .../mod/blocks/render/RenderEmpowerer.java | 2 +- .../mod/blocks/render/RenderLaserRelay.java | 4 +- .../render/RenderReconstructorLens.java | 2 +- .../mod/booklet/page/PageCrafting.java | 2 +- .../mod/booklet/page/PageCrusherRecipe.java | 24 +- .../mod/crafting/CrusherCrafting.java | 41 +- .../mod/crafting/InitCrafting.java | 6 - .../mod/event/CommonEvents.java | 18 +- .../mod/gen/village/BasicTradeList.java | 9 +- .../VillageComponentEngineerHouse.java | 8 +- .../mod/inventory/ContainerBag.java | 8 +- .../mod/inventory/ContainerBioReactor.java | 4 +- .../mod/inventory/ContainerBreaker.java | 4 +- .../mod/inventory/ContainerCanolaPress.java | 4 +- .../mod/inventory/ContainerCoalGenerator.java | 4 +- .../mod/inventory/ContainerCoffeeMachine.java | 10 +- .../ContainerDirectionalBreaker.java | 4 +- .../mod/inventory/ContainerDrill.java | 6 +- .../mod/inventory/ContainerDropper.java | 4 +- .../mod/inventory/ContainerEnergizer.java | 91 ++- .../mod/inventory/ContainerEnervator.java | 6 +- .../mod/inventory/ContainerFarmer.java | 6 +- .../mod/inventory/ContainerFeeder.java | 4 +- .../inventory/ContainerFermentingBarrel.java | 2 +- .../mod/inventory/ContainerFilter.java | 6 +- .../inventory/ContainerFluidCollector.java | 2 +- .../mod/inventory/ContainerFurnaceDouble.java | 10 +- .../mod/inventory/ContainerGiantChest.java | 4 +- .../mod/inventory/ContainerGrinder.java | 14 +- .../mod/inventory/ContainerInputter.java | 4 +- .../ContainerLaserRelayItemWhitelist.java | 2 +- .../mod/inventory/ContainerMiner.java | 4 +- .../mod/inventory/ContainerOilGenerator.java | 2 +- .../mod/inventory/ContainerPhantomPlacer.java | 4 +- .../inventory/ContainerRangedCollector.java | 4 +- .../mod/inventory/ContainerRepairer.java | 6 +- .../mod/inventory/ContainerXPSolidifier.java | 6 +- .../mod/inventory/gui/GuiRepairer.java | 2 +- .../mod/inventory/slot/SlotDeletion.java | 4 +- .../mod/inventory/slot/SlotFilter.java | 10 +- .../slot/SlotItemHandlerUnconditioned.java | 62 +- .../mod/inventory/slot/SlotOutput.java | 4 +- .../actuallyadditions/mod/items/ItemBag.java | 23 +- .../mod/items/ItemChestToCrateUpgrade.java | 4 +- .../mod/items/ItemDrill.java | 14 +- .../mod/items/ItemFillingWand.java | 2 +- .../mod/items/ItemFilter.java | 8 +- .../mod/items/ItemHairyBall.java | 15 +- .../mod/items/ItemKnife.java | 4 +- .../mod/items/ItemMagnetRing.java | 9 +- .../mod/items/ItemResonantRice.java | 3 +- .../mod/items/ItemSolidifiedExperience.java | 9 +- .../mod/items/ItemSpawnerChanger.java | 2 +- .../mod/items/ItemWaterBowl.java | 2 +- .../actuallyadditions/mod/items/ItemWorm.java | 10 +- .../mod/items/lens/LensDisenchanting.java | 2 +- .../mod/items/lens/LensDisruption.java | 6 +- .../jei/crusher/CrusherRecipeCategory.java | 10 +- .../mod/jei/crusher/CrusherRecipeWrapper.java | 21 +- .../mod/misc/apiimpl/MethodHandler.java | 22 +- .../apiimpl/farmer/CactusFarmerBehavior.java | 4 +- .../apiimpl/farmer/DefaultFarmerBehavior.java | 8 +- .../farmer/MelonPumpkinFarmerBehavior.java | 4 +- .../farmer/NetherWartFarmerBehavior.java | 8 +- .../apiimpl/farmer/ReedFarmerBehavior.java | 4 +- .../farmer/exu/ExUPlantFarmerBehavior.java | 8 +- .../mod/recipe/CrusherRecipeRegistry.java | 63 +- .../mod/tile/FilterSettings.java | 13 +- .../tile/TileEntityAtomicReconstructor.java | 71 +-- .../mod/tile/TileEntityBatteryBox.java | 20 +- .../mod/tile/TileEntityBioReactor.java | 10 +- .../mod/tile/TileEntityBreaker.java | 24 +- .../mod/tile/TileEntityCanolaPress.java | 16 +- .../mod/tile/TileEntityCoalGenerator.java | 21 +- .../mod/tile/TileEntityCoffeeMachine.java | 25 +- .../mod/tile/TileEntityCompost.java | 13 +- .../tile/TileEntityDirectionalBreaker.java | 14 +- .../mod/tile/TileEntityDisplayStand.java | 21 +- .../mod/tile/TileEntityDropper.java | 21 +- .../mod/tile/TileEntityEmpowerer.java | 18 +- .../mod/tile/TileEntityEnergizer.java | 22 +- .../mod/tile/TileEntityEnervator.java | 21 +- .../mod/tile/TileEntityFarmer.java | 132 ++-- .../mod/tile/TileEntityFeeder.java | 11 +- .../mod/tile/TileEntityFurnaceDouble.java | 56 +- .../mod/tile/TileEntityGiantChest.java | 15 +- .../mod/tile/TileEntityGrinder.java | 56 +- .../mod/tile/TileEntityInputter.java | 16 +- .../mod/tile/TileEntityInventoryBase.java | 106 +-- .../mod/tile/TileEntityItemRepairer.java | 21 +- .../mod/tile/TileEntityLaserRelay.java | 2 +- .../TileEntityLaserRelayItemWhitelist.java | 6 +- .../mod/tile/TileEntityMiner.java | 121 ++-- .../mod/tile/TileEntityPhantomItemface.java | 8 +- .../mod/tile/TileEntityPhantomPlacer.java | 22 +- .../mod/tile/TileEntityRangedCollector.java | 47 +- .../mod/tile/TileEntityXPSolidifier.java | 142 ++--- .../mod/util/ItemStackHandlerAA.java | 58 ++ .../mod/util/ItemStackHandlerCustom.java | 133 ---- .../actuallyadditions/mod/util/StackUtil.java | 278 +++++--- .../actuallyadditions/mod/util/WorldUtil.java | 601 ++++++++---------- .../mod/util/compat/CommonCapsUtil.java | 2 +- 121 files changed, 1582 insertions(+), 1627 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemStackHandlerAA.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemStackHandlerCustom.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 54aa34b83..d298fd572 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -10,6 +10,11 @@ package de.ellpeck.actuallyadditions.api; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.booklet.IBookletPage; @@ -18,39 +23,44 @@ import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; import de.ellpeck.actuallyadditions.api.laser.ILaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.lens.LensConversion; -import de.ellpeck.actuallyadditions.api.recipe.*; +import de.ellpeck.actuallyadditions.api.recipe.BallOfFurReturn; +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe; +import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; +import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe; +import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; +import de.ellpeck.actuallyadditions.api.recipe.OilGenRecipe; +import de.ellpeck.actuallyadditions.api.recipe.TreasureChestLoot; +import de.ellpeck.actuallyadditions.api.recipe.WeightedOre; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import net.minecraft.item.crafting.Ingredient; public final class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "33"; + public static final String API_VERSION = "34"; - public static final List CRUSHER_RECIPES = new ArrayList(); - public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList(); - public static final List TREASURE_CHEST_LOOT = new ArrayList(); - public static final List RECONSTRUCTOR_LENS_CONVERSION_RECIPES = new ArrayList(); - public static final List EMPOWERER_RECIPES = new ArrayList(); - public static final Map RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap(); - public static final List FARMER_BEHAVIORS = new ArrayList(); - public static final List COFFEE_MACHINE_INGREDIENTS = new ArrayList(); - public static final List COMPOST_RECIPES = new ArrayList(); - public static final List OIL_GENERATOR_RECIPES = new ArrayList(); - public static final List BOOKLET_ENTRIES = new ArrayList(); + public static final List CRUSHER_RECIPES = new ArrayList<>(); + public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList<>(); + public static final List TREASURE_CHEST_LOOT = new ArrayList<>(); + public static final List RECONSTRUCTOR_LENS_CONVERSION_RECIPES = new ArrayList<>(); + public static final List EMPOWERER_RECIPES = new ArrayList<>(); + public static final Map RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap<>(); + public static final List FARMER_BEHAVIORS = new ArrayList<>(); + public static final List COFFEE_MACHINE_INGREDIENTS = new ArrayList<>(); + public static final List COMPOST_RECIPES = new ArrayList<>(); + public static final List OIL_GENERATOR_RECIPES = new ArrayList<>(); + public static final List BOOKLET_ENTRIES = new ArrayList<>(); //This is added to automatically, you don't need to add anything to this list - public static final List ALL_CHAPTERS = new ArrayList(); + public static final List ALL_CHAPTERS = new ArrayList<>(); //This is added to automatically, you don't need to add anything to this list - public static final List BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA = new ArrayList(); - public static final List STONE_ORES = new ArrayList(); - public static final List NETHERRACK_ORES = new ArrayList(); + public static final List BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA = new ArrayList<>(); + public static final List STONE_ORES = new ArrayList<>(); + public static final List NETHERRACK_ORES = new ArrayList<>(); /** * Use this to handle things that aren't based in the API itself @@ -126,6 +136,18 @@ public final class ActuallyAdditionsAPI{ * @param outputTwoChance The chance of the second output (0 won't occur at all, 100 will all the time) */ public static void addCrusherRecipe(ItemStack input, ItemStack outputOne, ItemStack outputTwo, int outputTwoChance){ + CRUSHER_RECIPES.add(new CrusherRecipe(Ingredient.fromStacks(input), outputOne, outputTwo.isEmpty() ? ItemStack.EMPTY : outputTwo, outputTwoChance)); + } + + /** + * Adds a Recipe to the Crusher Recipe Registry + * + * @param input The input as an Ingredient + * @param outputOne The first output as an ItemStack + * @param outputTwo The second output as an ItemStack (can be ItemStack.EMPTY if there should be none) + * @param outputTwoChance The chance of the second output (0 won't occur at all, 100 will all the time) + */ + public static void addCrusherRecipe(Ingredient input, ItemStack outputOne, ItemStack outputTwo, int outputTwoChance){ CRUSHER_RECIPES.add(new CrusherRecipe(input, outputOne, outputTwo.isEmpty() ? ItemStack.EMPTY : outputTwo, outputTwoChance)); } @@ -145,6 +167,7 @@ public final class ActuallyAdditionsAPI{ } //Same thing as above, but with ItemStack outputs. + @Deprecated //Use Ingredient public static boolean addCrusherRecipes(List inputs, ItemStack outputOne, int outputOneAmount, ItemStack outputTwo, int outputTwoAmount, int outputTwoChance){ return methodHandler.addCrusherRecipes(inputs, outputOne, outputOneAmount, outputTwo, outputTwoAmount, outputTwoChance); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IFarmer.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IFarmer.java index fab12d42a..d21deaedb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IFarmer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IFarmer.java @@ -25,7 +25,11 @@ public interface IFarmer extends IEnergyTile{ EnumFacing getOrientation(); - boolean addToSeedInventory(List stacks, boolean actuallyDo); + boolean canAddToSeeds(List stacks); - boolean addToOutputInventory(List stacks, boolean actuallyDo); + boolean canAddToOutput(List stacks); + + void addToSeeds(List stacks); + + void addToOutput(List stacks); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java index a821113b3..57ae83457 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java @@ -10,6 +10,8 @@ package de.ellpeck.actuallyadditions.api.internal; +import java.util.List; + import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.booklet.IBookletPage; @@ -21,8 +23,6 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; -import java.util.List; - /** * This is the internal method handler. * Use ActuallyAdditionsAPI.methodHandler for calling @@ -43,9 +43,9 @@ public interface IMethodHandler{ boolean invokeConversionLens(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile); boolean invokeReconstructor(IAtomicReconstructor tile); - boolean addCrusherRecipes(List inputs, List outputOnes, int outputOneAmounts, List outputTwos, int outputTwoAmounts, int outputTwoChance); + @Deprecated //Use Ingredient input on AA API class boolean addCrusherRecipes(List inputs, ItemStack outputOne, int outputOneAmount, ItemStack outputTwo, int outputTwoAmount, int outputTwoChance); IBookletPage generateTextPage(int id); diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java index 2d8cff7cd..bf2c24683 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java @@ -11,20 +11,49 @@ package de.ellpeck.actuallyadditions.api.recipe; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; -public class CrusherRecipe{ +public class CrusherRecipe { - public ItemStack inputStack; + @Deprecated //ModTweaker compat, will be removed soon. public ItemStack outputOneStack; - public ItemStack outputTwoStack; - public int outputTwoChance; + + private Ingredient input; + private ItemStack outputOne; + private ItemStack outputTwo; + private int outputChance; - public CrusherRecipe(ItemStack inputStack, ItemStack outputOneStack, ItemStack outputTwoStack, int outputTwoChance){ - this.inputStack = inputStack; - this.outputOneStack = outputOneStack; - this.outputTwoStack = outputTwoStack; - this.outputTwoChance = outputTwoChance; + @Deprecated //ModTweaker compat, will be removed soon. + public CrusherRecipe(ItemStack input, ItemStack outputOne, ItemStack outputTwo, int outputChance) { + this(Ingredient.fromStacks(input), outputOne, outputTwo, outputChance); + } + + public CrusherRecipe(Ingredient input, ItemStack outputOne, ItemStack outputTwo, int outputChance) { + this.input = input; + this.outputOne = outputOne; + this.outputTwo = outputTwo; + this.outputChance = outputChance; + outputOneStack = outputOne; } + public boolean matches(ItemStack stack) { + return input.apply(stack); + } + + public ItemStack getOutputOne() { + return outputOne; + } + + public ItemStack getOutputTwo() { + return outputTwo; + } + + public int getSecondChance() { + return outputChance; + } + + public Ingredient getInput() { + return input; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 133e0ab26..a14dbfb91 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -40,6 +40,7 @@ import de.ellpeck.actuallyadditions.mod.recipe.TreasureChestHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.compat.CompatUtil; +import net.minecraft.launchwrapper.Launch; import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; @@ -64,6 +65,7 @@ public class ActuallyAdditions { public static final String VERSION = "@VERSION@"; public static final String GUIFACTORY = "de.ellpeck.actuallyadditions.mod.config.GuiFactory"; public static final String DEPS = "before:craftingtweaks;after:fastbench@[1.3.2,)"; + public static final boolean DEOBF = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); @Instance public static ActuallyAdditions INSTANCE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 9472751e1..8213984fc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -78,10 +78,10 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud if(reconstructor != null){ if(StackUtil.isValid(heldItem)){ Item item = heldItem.getItem(); - if(item instanceof ILensItem && !StackUtil.isValid(reconstructor.slots.getStackInSlot(0))){ + if(item instanceof ILensItem && !StackUtil.isValid(reconstructor.inv.getStackInSlot(0))){ ItemStack toPut = heldItem.copy(); - toPut = StackUtil.setStackSize(toPut, 1); - reconstructor.slots.setStackInSlot(0, toPut); + toPut.setCount(1); + reconstructor.inv.setStackInSlot(0, toPut); player.inventory.decrStackSize(player.inventory.currentItem, 1); } //Shush, don't tell anyone! @@ -91,10 +91,10 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud } } else{ - ItemStack slot = reconstructor.slots.getStackInSlot(0); + ItemStack slot = reconstructor.inv.getStackInSlot(0); if(StackUtil.isValid(slot)){ player.setHeldItem(hand, slot.copy()); - reconstructor.slots.setStackInSlot(0, StackUtil.getEmpty()); + reconstructor.inv.setStackInSlot(0, StackUtil.getEmpty()); } } } @@ -113,7 +113,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, ScaledResolution resolution){ TileEntity tile = minecraft.world.getTileEntity(posHit.getBlockPos()); if(tile instanceof TileEntityAtomicReconstructor){ - ItemStack slot = ((TileEntityAtomicReconstructor)tile).slots.getStackInSlot(0); + ItemStack slot = ((TileEntityAtomicReconstructor)tile).inv.getStackInSlot(0); String strg; if(!StackUtil.isValid(slot)){ strg = StringUtil.localize("info."+ActuallyAdditions.MODID+".noLens"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBatteryBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBatteryBox.java index d228d7947..e8f3685af 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBatteryBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBatteryBox.java @@ -56,17 +56,17 @@ public class BlockBatteryBox extends BlockContainerBase{ ItemStack stack = player.getHeldItem(hand); if(StackUtil.isValid(stack)){ - if(stack.getItem() instanceof ItemBattery && !StackUtil.isValid(box.slots.getStackInSlot(0))){ - box.slots.setStackInSlot(0, stack.copy()); + if(stack.getItem() instanceof ItemBattery && !StackUtil.isValid(box.inv.getStackInSlot(0))){ + box.inv.setStackInSlot(0, stack.copy()); player.setHeldItem(hand, StackUtil.getEmpty()); return true; } } else{ - ItemStack inSlot = box.slots.getStackInSlot(0); + ItemStack inSlot = box.inv.getStackInSlot(0); if(StackUtil.isValid(inSlot)){ player.setHeldItem(hand, inSlot.copy()); - box.slots.setStackInSlot(0, StackUtil.getEmpty()); + box.inv.setStackInSlot(0, StackUtil.getEmpty()); return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 9784e57ff..1418bffb1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -88,27 +88,27 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityCompost){ TileEntityCompost compost = (TileEntityCompost)tile; - ItemStack slot = compost.slots.getStackInSlot(0); + ItemStack slot = compost.inv.getStackInSlot(0); CompostRecipe recipeIn = TileEntityCompost.getRecipeForInput(slot); if(!StackUtil.isValid(slot) || recipeIn != null){ if(StackUtil.isValid(stackPlayer)){ CompostRecipe recipeHand = TileEntityCompost.getRecipeForInput(stackPlayer); if(recipeHand != null && (recipeIn == null || recipeIn == recipeHand)){ - int maxAdd = StackUtil.getStackSize(stackPlayer); + int maxAdd = stackPlayer.getCount(); if(!StackUtil.isValid(slot)){ ItemStack stackToAdd = stackPlayer.copy(); - stackToAdd = StackUtil.setStackSize(stackToAdd, maxAdd); - compost.slots.setStackInSlot(0, stackToAdd); + stackToAdd.setCount(maxAdd); + compost.inv.setStackInSlot(0, stackToAdd); player.inventory.decrStackSize(player.inventory.currentItem, maxAdd); return true; } else{ ItemStack stackIn = slot.copy(); - if(StackUtil.getStackSize(stackIn) < recipeHand.input.getMaxStackSize()){ - int sizeAdded = Math.min(maxAdd, recipeHand.input.getMaxStackSize()-StackUtil.getStackSize(stackIn)); - stackIn = StackUtil.addStackSize(stackIn, sizeAdded); - compost.slots.setStackInSlot(0, stackIn); + if(stackIn.getCount() < recipeHand.input.getMaxStackSize()){ + int sizeAdded = Math.min(maxAdd, recipeHand.input.getMaxStackSize()-stackIn.getCount()); + stackIn.grow(sizeAdded); + compost.inv.setStackInSlot(0, stackIn); player.inventory.decrStackSize(player.inventory.currentItem, sizeAdded); return true; } @@ -119,15 +119,15 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ else{ if(!StackUtil.isValid(stackPlayer)){ player.setHeldItem(hand, slot.copy()); - compost.slots.setStackInSlot(0, StackUtil.getEmpty()); + compost.inv.setStackInSlot(0, StackUtil.getEmpty()); return true; } else if(ItemUtil.canBeStacked(stackPlayer, slot)){ - int addedStackSize = Math.min(StackUtil.getStackSize(slot), stackPlayer.getMaxStackSize()-StackUtil.getStackSize(stackPlayer)); + int addedStackSize = Math.min(slot.getCount(), stackPlayer.getMaxStackSize()-stackPlayer.getCount()); ItemStack stackToAdd = stackPlayer.copy(); - stackToAdd = StackUtil.addStackSize(stackToAdd, addedStackSize); + stackToAdd.grow(addedStackSize); player.setHeldItem(hand, stackToAdd); - compost.slots.decrStackSize(0, addedStackSize); + compost.inv.getStackInSlot(0).shrink(addedStackSize); return true; } @@ -156,13 +156,13 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, ScaledResolution resolution){ TileEntity tile = minecraft.world.getTileEntity(posHit.getBlockPos()); if(tile instanceof TileEntityCompost){ - ItemStack slot = ((TileEntityCompost)tile).slots.getStackInSlot(0); + ItemStack slot = ((TileEntityCompost)tile).inv.getStackInSlot(0); String strg; if(!StackUtil.isValid(slot)){ strg = "Empty"; } else{ - strg = slot.getItem().getItemStackDisplayName(slot); + strg = slot.getDisplayName(); AssetUtil.renderStackToGui(slot, resolution.getScaledWidth()/2+15, resolution.getScaledHeight()/2-29, 1F); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java index 7be16680e..6abd656c9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java @@ -29,9 +29,9 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class BlockDisplayStand extends BlockContainerBase{ +public class BlockDisplayStand extends BlockContainerBase { - public BlockDisplayStand(String name){ + public BlockDisplayStand(String name) { super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); @@ -41,74 +41,71 @@ public class BlockDisplayStand extends BlockContainerBase{ } @Override - public TileEntity createNewTileEntity(World worldIn, int meta){ + public TileEntity createNewTileEntity(World worldIn, int meta) { return new TileEntityDisplayStand(); } @Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return BlockSlabs.AABB_BOTTOM_HALF; } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing par6, float par7, float par8, float par9) { ItemStack heldItem = player.getHeldItem(hand); - if(!world.isRemote){ - TileEntityDisplayStand stand = (TileEntityDisplayStand)world.getTileEntity(pos); - if(stand != null){ - ItemStack display = stand.slots.getStackInSlot(0); - if(StackUtil.isValid(heldItem)){ - if(!StackUtil.isValid(display)){ + if (!world.isRemote) { + TileEntityDisplayStand stand = (TileEntityDisplayStand) world.getTileEntity(pos); + if (stand != null) { + ItemStack display = stand.inv.getStackInSlot(0); + if (StackUtil.isValid(heldItem)) { + if (!StackUtil.isValid(display)) { ItemStack toPut = heldItem.copy(); - toPut = StackUtil.setStackSize(toPut, 1); - stand.slots.setStackInSlot(0, toPut); - player.setHeldItem(hand, StackUtil.addStackSize(heldItem, -1)); + toPut.setCount(1); + stand.inv.setStackInSlot(0, toPut); + if(!player.capabilities.isCreativeMode) heldItem.shrink(1); return true; - } - else if(ItemUtil.canBeStacked(heldItem, display)){ - int maxTransfer = Math.min(StackUtil.getStackSize(display), heldItem.getMaxStackSize()-StackUtil.getStackSize(heldItem)); - if(maxTransfer > 0){ - player.setHeldItem(hand, StackUtil.addStackSize(heldItem, maxTransfer)); + } else if (ItemUtil.canBeStacked(heldItem, display)) { + int maxTransfer = Math.min(display.getCount(), heldItem.getMaxStackSize() - heldItem.getCount()); + if (maxTransfer > 0) { + heldItem.grow(maxTransfer); ItemStack newDisplay = display.copy(); - newDisplay = StackUtil.addStackSize(newDisplay, -maxTransfer); - stand.slots.setStackInSlot(0, StackUtil.validateCheck(newDisplay)); + newDisplay.shrink(maxTransfer); + stand.inv.setStackInSlot(0, newDisplay); return true; } } - } - else{ - if(StackUtil.isValid(display)){ + } else { + if (StackUtil.isValid(display)) { player.setHeldItem(hand, display.copy()); - stand.slots.setStackInSlot(0, StackUtil.getEmpty()); + stand.inv.setStackInSlot(0, StackUtil.getEmpty()); return true; } } } return false; - } - else{ + } else { return true; } } @Override - public boolean isOpaqueCube(IBlockState state){ + public boolean isOpaqueCube(IBlockState state) { return false; } - - @Override - public boolean isFullCube(IBlockState state){ - return false; - } - - @Override - public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) { - if(face == EnumFacing.DOWN) return BlockFaceShape.SOLID; - return BlockFaceShape.UNDEFINED; - } @Override - public EnumRarity getRarity(ItemStack stack){ + public boolean isFullCube(IBlockState state) { + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face) { + if (face == EnumFacing.DOWN) return BlockFaceShape.SOLID; + return BlockFaceShape.UNDEFINED; + } + + @Override + public EnumRarity getRarity(ItemStack stack) { return EnumRarity.RARE; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEmpowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEmpowerer.java index 8c854b683..b36d9a1a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEmpowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEmpowerer.java @@ -55,22 +55,22 @@ public class BlockEmpowerer extends BlockContainerBase{ if(!world.isRemote){ TileEntityEmpowerer empowerer = (TileEntityEmpowerer)world.getTileEntity(pos); if(empowerer != null){ - ItemStack stackThere = empowerer.slots.getStackInSlot(0); + ItemStack stackThere = empowerer.inv.getStackInSlot(0); if(StackUtil.isValid(heldItem)){ if(!StackUtil.isValid(stackThere) && !TileEntityEmpowerer.getRecipesForInput(heldItem).isEmpty()){ ItemStack toPut = heldItem.copy(); - toPut = StackUtil.setStackSize(toPut, 1); - empowerer.slots.setStackInSlot(0, toPut); - player.setHeldItem(hand, StackUtil.addStackSize(heldItem, -1)); + toPut.grow(1); + empowerer.inv.setStackInSlot(0, toPut); + player.setHeldItem(hand, StackUtil.shrink(heldItem, 1)); return true; } else if(ItemUtil.canBeStacked(heldItem, stackThere)){ - int maxTransfer = Math.min(StackUtil.getStackSize(stackThere), heldItem.getMaxStackSize()-StackUtil.getStackSize(heldItem)); + int maxTransfer = Math.min(stackThere.getCount(), heldItem.getMaxStackSize()-heldItem.getCount()); if(maxTransfer > 0){ - player.setHeldItem(hand, StackUtil.addStackSize(heldItem, maxTransfer)); + player.setHeldItem(hand, StackUtil.grow(heldItem, maxTransfer)); ItemStack newStackThere = stackThere.copy(); - newStackThere = StackUtil.addStackSize(newStackThere, -maxTransfer); - empowerer.slots.setStackInSlot(0, StackUtil.validateCheck(newStackThere)); + newStackThere = StackUtil.shrink(newStackThere, maxTransfer); + empowerer.inv.setStackInSlot(0, newStackThere); return true; } } @@ -78,7 +78,7 @@ public class BlockEmpowerer extends BlockContainerBase{ else{ if(StackUtil.isValid(stackThere)){ player.setHeldItem(hand, stackThere.copy()); - empowerer.slots.setStackInSlot(0, StackUtil.getEmpty()); + empowerer.inv.setStackInSlot(0, StackUtil.getEmpty()); return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 7dcc20f33..6dfceee45 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -10,6 +10,8 @@ package de.ellpeck.actuallyadditions.mod.blocks; +import java.util.List; + import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; @@ -18,7 +20,10 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChestLarge; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChestMedium; -import de.ellpeck.actuallyadditions.mod.util.*; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -38,8 +43,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; - -import java.util.List; +import net.minecraftforge.items.IItemHandlerModifiable; public class BlockGiantChest extends BlockContainerBase{ @@ -102,12 +106,12 @@ public class BlockGiantChest extends BlockContainerBase{ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityGiantChest){ NBTTagList list = stack.getTagCompound().getTagList("Items", 10); - ItemStackHandlerCustom slots = ((TileEntityGiantChest)tile).slots; + IItemHandlerModifiable inv = ((TileEntityGiantChest)tile).inv; for(int i = 0; i < list.tagCount(); i++){ NBTTagCompound compound = list.getCompoundTagAt(i); if(compound != null && compound.hasKey("id")){ - slots.setStackInSlot(i, new ItemStack(list.getCompoundTagAt(i))); + inv.setStackInSlot(i, new ItemStack(list.getCompoundTagAt(i))); } } } @@ -122,7 +126,7 @@ public class BlockGiantChest extends BlockContainerBase{ super.getDrops(drops, world, pos, state, fortune); TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityGiantChest){ - ItemStackHandlerCustom slots = ((TileEntityGiantChest)tile).slots; + ItemStackHandlerAA slots = ((TileEntityGiantChest)tile).inv; int place = ItemUtil.getPlaceAt(slots.getItems(), new ItemStack(InitItems.itemCrateKeeper), false); if(place >= 0){ NBTTagList list = new NBTTagList(); @@ -153,7 +157,7 @@ public class BlockGiantChest extends BlockContainerBase{ @Override public boolean shouldDropInventory(World world, BlockPos pos) { TileEntity tile = world.getTileEntity(pos); - return !(tile instanceof TileEntityGiantChest) || !ItemUtil.contains(((TileEntityGiantChest) tile).slots.getItems(), new ItemStack(InitItems.itemCrateKeeper), false); + return !(tile instanceof TileEntityGiantChest) || !ItemUtil.contains(((TileEntityGiantChest) tile).inv.getItems(), new ItemStack(InitItems.itemCrateKeeper), false); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 06eb5f906..384bb531a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -186,15 +186,16 @@ public class BlockLaserRelay extends BlockContainerBase implements IHudDisplay{ return true; } else if(stack.getItem() instanceof ItemLaserRelayUpgrade){ - ItemStack inRelay = relay.slots.getStackInSlot(0); + ItemStack inRelay = relay.inv.getStackInSlot(0); if(!StackUtil.isValid(inRelay)){ if(!world.isRemote){ if(!player.isCreative()){ - player.setHeldItem(hand, StackUtil.addStackSize(stack, -1)); + player.setHeldItem(hand, StackUtil.shrink(stack, 1)); } - ItemStack set = StackUtil.validateCopy(stack); - relay.slots.setStackInSlot(0, StackUtil.setStackSize(set, 1)); + ItemStack set = stack.copy(); + set.setCount(1); + relay.inv.setStackInSlot(0, set); } return true; } @@ -203,10 +204,10 @@ public class BlockLaserRelay extends BlockContainerBase implements IHudDisplay{ } if(player.isSneaking()){ - ItemStack inRelay = StackUtil.validateCopy(relay.slots.getStackInSlot(0)); + ItemStack inRelay = relay.inv.getStackInSlot(0).copy(); if(StackUtil.isValid(inRelay)){ if(!world.isRemote){ - relay.slots.setStackInSlot(0, StackUtil.getEmpty()); + relay.inv.setStackInSlot(0, StackUtil.getEmpty()); if(!player.inventory.addItemStackToInventory(inRelay)){ player.entityDropItem(inRelay, 0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index 508b1db14..fa124928a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -51,25 +51,6 @@ public class BlockSlabs extends BlockBase{ this.fullBlockState = fullBlockState; } - /*@Override - public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB axis, List list, Entity entity){ - this.setBlockBoundsBasedOnState(world, pos); - super.addCollisionBoxesToList(world, pos, state, axis, list, entity); - } - - @Override - public void setBlockBoundsBasedOnState(IBlockAccess world, BlockPos pos){ - int meta = PosUtil.getMetadata(pos, world); - float minY = meta == 1 ? 0.5F : 0.0F; - float maxY = meta == 1 ? 1.0F : 0.5F; - this.setBlockBounds(0.0F, minY, 0F, 1.0F, maxY, 1.0F); - } - - @Override - public void setBlockBoundsForItemRender(){ - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); - }*/ - @Override public boolean isOpaqueCube(IBlockState state){ return false; @@ -144,7 +125,7 @@ public class BlockSlabs extends BlockBase{ if(bound != Block.NULL_AABB && world.checkNoEntityCollision(bound.offset(pos)) && world.setBlockState(pos, newState, 11)){ SoundType soundtype = theBlock.fullBlockState.getBlock().getSoundType(theBlock.fullBlockState, world, pos, player); world.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume()+1.0F)/2.0F, soundtype.getPitch()*0.8F); - player.setHeldItem(hand, StackUtil.addStackSize(stack, -1)); + player.setHeldItem(hand, StackUtil.shrink(stack, 1)); } return EnumActionResult.SUCCESS; @@ -184,7 +165,7 @@ public class BlockSlabs extends BlockBase{ SoundType soundtype = theBlock.fullBlockState.getBlock().getSoundType(theBlock.fullBlockState, world, pos, player); world.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume()+1.0F)/2.0F, soundtype.getPitch()*0.8F); - player.setHeldItem(hand, StackUtil.addStackSize(stack, -1)); + player.setHeldItem(hand, StackUtil.shrink(stack, 1)); } return true; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index a300f0c4e..ea58ca9a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -10,10 +10,11 @@ package de.ellpeck.actuallyadditions.mod.blocks; +import java.util.Random; + import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.TreasureChestLoot; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.block.BlockHorizontal; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -27,15 +28,19 @@ import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.*; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.WeightedRandom; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.Random; - public class BlockTreasureChest extends BlockBase{ public BlockTreasureChest(String name){ @@ -92,7 +97,7 @@ public class BlockTreasureChest extends BlockBase{ for(int i = 0; i < MathHelper.getInt(world.rand, 3, 6); i++){ TreasureChestLoot theReturn = WeightedRandom.getRandomItem(world.rand, ActuallyAdditionsAPI.TREASURE_CHEST_LOOT); ItemStack itemStack = theReturn.returnItem.copy(); - itemStack = StackUtil.setStackSize(itemStack, MathHelper.getInt(world.rand, theReturn.minAmount, theReturn.maxAmount)); + itemStack.setCount(MathHelper.getInt(world.rand, theReturn.minAmount, theReturn.maxAmount)); float dX = world.rand.nextFloat()*0.8F+0.1F; float dY = world.rand.nextFloat()*0.8F+0.1F; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 9d850033a..b68667545 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -88,8 +88,8 @@ public abstract class BlockContainerBase extends BlockContainer implements ItemB TileEntity aTile = world.getTileEntity(position); if(aTile instanceof TileEntityInventoryBase){ TileEntityInventoryBase tile = (TileEntityInventoryBase)aTile; - if(tile.slots.getSlots() > 0){ - for(int i = 0; i < tile.slots.getSlots(); i++){ + if(tile.inv.getSlots() > 0){ + for(int i = 0; i < tile.inv.getSlots(); i++){ this.dropSlotFromInventory(i, tile, world, position); } } @@ -98,7 +98,7 @@ public abstract class BlockContainerBase extends BlockContainer implements ItemB } private void dropSlotFromInventory(int i, TileEntityInventoryBase tile, World world, BlockPos pos){ - ItemStack stack = tile.slots.getStackInSlot(i); + ItemStack stack = tile.inv.getStackInSlot(i); if(StackUtil.isValid(stack)){ float dX = world.rand.nextFloat()*0.8F+0.1F; float dY = world.rand.nextFloat()*0.8F+0.1F; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 6f28303eb..0162c99d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -99,7 +99,7 @@ public class BlockPlant extends BlockCrops implements ItemBlockBase.ICustomRarit for(ItemStack drop : drops){ if(StackUtil.isValid(drop)){ if(drop.getItem() == this.seedItem && !deductedSeedSize){ - StackUtil.addStackSize(drop, -1); + drop.shrink(1); deductedSeedSize = true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderBatteryBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderBatteryBox.java index 8cf26070a..a4f2a644f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderBatteryBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderBatteryBox.java @@ -37,7 +37,7 @@ public class RenderBatteryBox extends TileEntitySpecialRenderer{ @Override public void render(TileEntityCompost compost, double x, double y, double z, float partialTicks, int destroyStage, float f){ if(compost instanceof TileEntityCompost){ - ItemStack slot = compost.slots.getStackInSlot(0); + ItemStack slot = compost.inv.getStackInSlot(0); if(StackUtil.isValid(slot)){ Block display = null; @@ -47,7 +47,7 @@ public class RenderCompost extends TileEntitySpecialRenderer{ } } if(display != null){ - float i = (float)StackUtil.getStackSize(slot)/(float)maxAmount; + float i = (float)slot.getCount()/(float)maxAmount; GlStateManager.pushMatrix(); GlStateManager.translate((float)x+0.5F, (float)y+(i/3F)+0.01F, (float)z+0.5F); //Hehe diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderDisplayStand.java index 892eedef0..783545037 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderDisplayStand.java @@ -31,7 +31,7 @@ public class RenderDisplayStand extends TileEntitySpecialRenderer MISC_RECIPES = new ArrayList(); + public static final ArrayList MISC_RECIPES = new ArrayList<>(); public static CrusherRecipe recipeIronHorseArmor; public static CrusherRecipe recipeGoldHorseArmor; public static CrusherRecipe recipeDiamondHorseArmor; public static void init(){ ActuallyAdditions.LOGGER.info("Initializing Crusher Recipes..."); - - final NonNullList LIST = NonNullList.withSize(1, StackUtil.getEmpty()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.BONE), new ItemStack(Items.DYE, 6, 15), StackUtil.getEmpty(), 0); MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); @@ -75,15 +74,15 @@ public final class CrusherCrafting{ ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 5), new ItemStack(Items.DYE, 4, 9), StackUtil.getEmpty(), 0); MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("oreRedstone", false), new ItemStack(Items.REDSTONE), 10, StackUtil.getEmpty(), 0, 0); - ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("oreLapis", false), new ItemStack(Items.DYE, 1, 4), 12, StackUtil.getEmpty(), 0, 0); - ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("coal", false), OreDictionary.getOres("dustCoal", false), 1, LIST, 0, 0); - ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("oreCoal", false), new ItemStack(Items.COAL), 3, StackUtil.getEmpty(), 0, 0); - ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("blockCoal", false), new ItemStack(Items.COAL), 9, StackUtil.getEmpty(), 0, 0); - ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("oreQuartz", false), new ItemStack(Items.QUARTZ), 3, StackUtil.getEmpty(), 0, 0); - ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("cobblestone", false), new ItemStack(Blocks.SAND), 1, StackUtil.getEmpty(), 0, 0); + ActuallyAdditionsAPI.addCrusherRecipe(new OreIngredient("oreRedstone"), new ItemStack(Items.REDSTONE, 10), StackUtil.getEmpty(), 0); + ActuallyAdditionsAPI.addCrusherRecipe(new OreIngredient("oreLapis"), new ItemStack(Items.DYE, 12, 4), StackUtil.getEmpty(), 0); + ActuallyAdditionsAPI.addCrusherRecipe(new OreIngredient("coal"), new ItemStack(InitItems.itemDust, 1, TheDusts.COAL.ordinal()), StackUtil.getEmpty(), 0); + ActuallyAdditionsAPI.addCrusherRecipe(new OreIngredient("oreCoal"), new ItemStack(Items.COAL,3), StackUtil.getEmpty(), 0); + ActuallyAdditionsAPI.addCrusherRecipe(new OreIngredient("blockCoal"), new ItemStack(Items.COAL,9), StackUtil.getEmpty(), 0); + ActuallyAdditionsAPI.addCrusherRecipe(new OreIngredient("oreQuartz"), new ItemStack(Items.QUARTZ,3), StackUtil.getEmpty(), 0); + ActuallyAdditionsAPI.addCrusherRecipe(new OreIngredient("cobblestone"), new ItemStack(Blocks.SAND), StackUtil.getEmpty(), 0); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.GRAVEL), new ItemStack(Items.FLINT), new ItemStack(Items.FLINT), 50); - ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("stone", false), OreDictionary.getOres("cobblestone", false), 1, LIST, 0, 0); + ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("stone", false), OreDictionary.getOres("cobblestone", false), 1, NonNullList.withSize(1, StackUtil.getEmpty()), 0, 0); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(Items.SUGAR, 2), StackUtil.getEmpty(), 0); MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); @@ -94,13 +93,19 @@ public final class CrusherCrafting{ ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("oreNickel", false), OreDictionary.getOres("dustNickel", false), 2, OreDictionary.getOres("dustPlatinum", false), 1, 15); ActuallyAdditionsAPI.addCrusherRecipes(OreDictionary.getOres("oreIron", false), OreDictionary.getOres("dustIron", false), 2, OreDictionary.getOres("dustGold", false), 1, 20); - ActuallyAdditionsAPI.addCrusherRecipes(Collections.singletonList(new ItemStack(Items.IRON_HORSE_ARMOR)), OreDictionary.getOres("dustIron", false), 6, LIST, 0, 0); + ItemStack temp = OreDictionary.getOres("dustIron").get(0).copy(); + temp.setCount(6); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.IRON_HORSE_ARMOR), temp, StackUtil.getEmpty(), 0); recipeIronHorseArmor = RecipeUtil.lastCrusherRecipe(); - ActuallyAdditionsAPI.addCrusherRecipes(Collections.singletonList(new ItemStack(Items.GOLDEN_HORSE_ARMOR)), OreDictionary.getOres("dustGold"), 6, LIST, 0, 0); + temp = OreDictionary.getOres("dustGold").get(0).copy(); + temp.setCount(6); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.GOLDEN_HORSE_ARMOR), temp, StackUtil.getEmpty(), 0); recipeGoldHorseArmor = RecipeUtil.lastCrusherRecipe(); - ActuallyAdditionsAPI.addCrusherRecipes(Collections.singletonList(new ItemStack(Items.DIAMOND_HORSE_ARMOR)), OreDictionary.getOres("dustDiamond"), 6, LIST, 0, 0); + temp = OreDictionary.getOres("dustDiamond").get(0).copy(); + temp.setCount(6); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.DIAMOND_HORSE_ARMOR), temp, StackUtil.getEmpty(), 0); recipeDiamondHorseArmor = RecipeUtil.lastCrusherRecipe(); CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("oreNether", 6)); @@ -108,8 +113,8 @@ public final class CrusherCrafting{ CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("denseore", 8)); CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("gem", 1)); CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("ingot", 1)); + CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("ore", 2, "gem")); //Search for gems first so removeDuplicates doesn't clear gem recipes. CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("ore", 2)); - CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("ore", 2, "gem")); //If no dust is found for certain ores, make gems directly CrusherRecipeRegistry.registerFinally(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java index 8c0dbb541..15879896c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java @@ -52,13 +52,7 @@ public final class InitCrafting{ ActuallyAdditionsAPI.addFarmerBehavior(new EnderlillyFarmerBehavior()); ActuallyAdditionsAPI.addFarmerBehavior(new RedOrchidFarmerBehavior()); - //RecipeSorter.register(ModUtil.MOD_ID+":recipeKeepDataShaped", RecipeKeepDataShaped.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped"); - //RecipeSorter.register(ModUtil.MOD_ID+":recipeKeepDataShapeless", RecipeKeepDataShapeless.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless"); - new RecipePotionRingCharging(new ResourceLocation(ActuallyAdditions.MODID, "potion_ring_charging")); - //RecipeSorter.register(ModUtil.MOD_ID+":recipePotionRingCharging", RecipePotionRingCharging.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless"); - new RecipeBioMash(new ResourceLocation(ActuallyAdditions.MODID, "bio_mash")); - //RecipeSorter.register(ModUtil.MOD_ID+":recipeBioMash", RecipeBioMash.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java index 82e936ed7..dbd80a85f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java @@ -10,6 +10,8 @@ package de.ellpeck.actuallyadditions.mod.event; +import java.util.Locale; + import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.data.PlayerData; @@ -22,7 +24,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.misc.DungeonLoot; import de.ellpeck.actuallyadditions.mod.network.PacketHandlerHelper; import de.ellpeck.actuallyadditions.mod.tile.FilterSettings; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.block.state.IBlockState; @@ -41,8 +43,6 @@ import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent; -import java.util.Locale; - public class CommonEvents{ public CommonEvents(){ @@ -78,14 +78,14 @@ public class CommonEvents{ boolean changed = false; boolean isVoid = ((ItemBag)invStack.getItem()).isVoid; - ItemStackHandlerCustom inv = new ItemStackHandlerCustom(ContainerBag.getSlotAmount(isVoid)); + ItemStackHandlerAA inv = new ItemStackHandlerAA(ContainerBag.getSlotAmount(isVoid)); ItemDrill.loadSlotsFromNBT(inv, invStack); FilterSettings filter = new FilterSettings(4, false, false, false, false, 0, 0); filter.readFromNBT(invStack.getTagCompound(), "Filter"); if(filter.check(stack)){ if(isVoid){ - stack = StackUtil.setStackSize(stack, 0); + stack.setCount(0); changed = true; } else{ @@ -93,17 +93,17 @@ public class CommonEvents{ ItemStack bagStack = inv.getStackInSlot(j); if(StackUtil.isValid(bagStack)){ if(ItemUtil.canBeStacked(bagStack, stack)){ - int maxTransfer = Math.min(StackUtil.getStackSize(stack), stack.getMaxStackSize()-StackUtil.getStackSize(bagStack)); + int maxTransfer = Math.min(stack.getCount(), stack.getMaxStackSize()-bagStack.getCount()); if(maxTransfer > 0){ - inv.setStackInSlot(j, StackUtil.addStackSize(bagStack, maxTransfer)); - stack = StackUtil.addStackSize(stack, -maxTransfer); + inv.setStackInSlot(j, StackUtil.grow(bagStack, maxTransfer)); + stack.shrink(maxTransfer); changed = true; } } } else{ inv.setStackInSlot(j, stack.copy()); - stack = StackUtil.setStackSize(stack, 0); + stack.setCount(0); changed = true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/village/BasicTradeList.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/village/BasicTradeList.java index 7454d1ca1..51c8c6835 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/village/BasicTradeList.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/village/BasicTradeList.java @@ -10,7 +10,8 @@ package de.ellpeck.actuallyadditions.mod.gen.village; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import java.util.Random; + import net.minecraft.entity.IMerchant; import net.minecraft.entity.passive.EntityVillager.ITradeList; import net.minecraft.entity.passive.EntityVillager.PriceInfo; @@ -19,8 +20,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.village.MerchantRecipe; import net.minecraft.village.MerchantRecipeList; -import java.util.Random; - public class BasicTradeList implements ITradeList{ private final ItemStack input; @@ -46,9 +45,9 @@ public class BasicTradeList implements ITradeList{ @Override public void addMerchantRecipe(IMerchant merchant, MerchantRecipeList recipeList, Random random){ ItemStack in = this.input.copy(); - in = StackUtil.setStackSize(in, this.inputAmount.getPrice(random)); + in.setCount(this.inputAmount.getPrice(random)); ItemStack out = this.output.copy(); - out = StackUtil.setStackSize(out, this.outputAmount.getPrice(random)); + out.setCount(this.outputAmount.getPrice(random)); recipeList.add(new MerchantRecipe(in, out)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/village/component/VillageComponentEngineerHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/village/component/VillageComponentEngineerHouse.java index a6134798a..ac1c3f5c7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/village/component/VillageComponentEngineerHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/village/component/VillageComponentEngineerHouse.java @@ -110,7 +110,7 @@ public class VillageComponentEngineerHouse extends StructureVillagePieces.House1 if(compost instanceof TileEntityCompost){ TileEntityCompost tile = (TileEntityCompost)compost; tile.stopFromDropping = true; - tile.slots.setStackInSlot(0, new ItemStack(InitItems.itemFertilizer, 10)); + tile.inv.setStackInSlot(0, new ItemStack(InitItems.itemFertilizer, 10)); } } @@ -135,7 +135,7 @@ public class VillageComponentEngineerHouse extends StructureVillagePieces.House1 TileEntityCanolaPress tile = (TileEntityCanolaPress)press; tile.stopFromDropping = true; tile.storage.setEnergyStored(world.rand.nextInt(tile.storage.getMaxEnergyStored()/3)); - tile.slots.setStackInSlot(0, new ItemStack(InitItems.itemMisc, world.rand.nextInt(60)+1, TheMiscItems.CANOLA.ordinal())); + tile.inv.setStackInSlot(0, new ItemStack(InitItems.itemMisc, world.rand.nextInt(60)+1, TheMiscItems.CANOLA.ordinal())); } TileEntity crusher = this.getTileAtPos(world, 2, 1, 6, sbb); @@ -144,7 +144,7 @@ public class VillageComponentEngineerHouse extends StructureVillagePieces.House1 tile.stopFromDropping = true; tile.storage.setEnergyStored(world.rand.nextInt(tile.storage.getMaxEnergyStored()/2)); if(world.rand.nextFloat() >= 0.25F){ - tile.slots.setStackInSlot(TileEntityGrinder.SLOT_INPUT_1, new ItemStack(InitBlocks.blockMisc, world.rand.nextInt(10)+1, TheMiscBlocks.ORE_QUARTZ.ordinal())); + tile.inv.setStackInSlot(TileEntityGrinder.SLOT_INPUT_1, new ItemStack(InitBlocks.blockMisc, world.rand.nextInt(10)+1, TheMiscBlocks.ORE_QUARTZ.ordinal())); } } @@ -152,7 +152,7 @@ public class VillageComponentEngineerHouse extends StructureVillagePieces.House1 if(coal instanceof TileEntityCoalGenerator){ TileEntityCoalGenerator tile = (TileEntityCoalGenerator)coal; tile.stopFromDropping = true; - tile.slots.setStackInSlot(0, new ItemStack(Items.COAL, world.rand.nextInt(25)+3, 1)); + tile.inv.setStackInSlot(0, new ItemStack(Items.COAL, world.rand.nextInt(25)+3, 1)); } TileEntity reconstructor = this.getTileAtPos(world, 8, 4, 3, sbb); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java index 637412599..310a41f03 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java @@ -25,7 +25,7 @@ import de.ellpeck.actuallyadditions.mod.items.ItemBag; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.tile.FilterSettings; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -44,7 +44,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class ContainerBag extends Container implements IButtonReactor{ public final FilterSettings filter = new FilterSettings(4, false, true, false, false, 0, -1000); - private final ItemStackHandlerCustom bagInventory; + private final ItemStackHandlerAA bagInventory; private final InventoryPlayer inventory; private final boolean isVoid; public boolean autoInsert; @@ -53,7 +53,7 @@ public class ContainerBag extends Container implements IButtonReactor{ public ContainerBag(ItemStack sack, InventoryPlayer inventory, boolean isVoid){ this.inventory = inventory; - this.bagInventory = new ItemStackHandlerCustom(getSlotAmount(isVoid)) { + this.bagInventory = new ItemStackHandlerAA(getSlotAmount(isVoid)) { @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { if(isBlacklisted(stack)) return stack; @@ -198,7 +198,7 @@ public class ContainerBag extends Container implements IButtonReactor{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBioReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBioReactor.java index ff35d4ee0..a7102916a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBioReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBioReactor.java @@ -29,7 +29,7 @@ public class ContainerBioReactor extends Container{ for(int i = 0; i < 4; i++){ for(int j = 0; j < 2; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tile.slots, j+i*2, 50+j*18, 13+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tile.inv, j+i*2, 50+j*18, 13+i*18)); } } @@ -86,7 +86,7 @@ public class ContainerBioReactor extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index 898ffaba2..fb8853405 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -30,7 +30,7 @@ public class ContainerBreaker extends Container{ for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.breaker.slots, j+i*3, 62+j*18, 21+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.breaker.inv, j+i*3, 62+j*18, 21+i*18)); } } @@ -83,7 +83,7 @@ public class ContainerBreaker extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index 78a2be649..3efd28468 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -30,7 +30,7 @@ public class ContainerCanolaPress extends Container{ public ContainerCanolaPress(InventoryPlayer inventory, TileEntityBase tile){ this.press = (TileEntityCanolaPress)tile; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.press.slots, 0, 81, 10)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.press.inv, 0, 81, 10)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -85,7 +85,7 @@ public class ContainerCanolaPress extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index 263c2b86a..c6a18dd9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -29,7 +29,7 @@ public class ContainerCoalGenerator extends Container{ public ContainerCoalGenerator(InventoryPlayer inventory, TileEntityBase tile){ this.generator = (TileEntityCoalGenerator)tile; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.generator.slots, 0, 87, 43)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.generator.inv, 0, 87, 43)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -84,7 +84,7 @@ public class ContainerCoalGenerator extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index 8504f6a38..d0ac123f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -32,13 +32,13 @@ public class ContainerCoffeeMachine extends Container{ public ContainerCoffeeMachine(InventoryPlayer inventory, TileEntityBase tile){ this.machine = (TileEntityCoffeeMachine)tile; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.machine.slots, TileEntityCoffeeMachine.SLOT_COFFEE_BEANS, 37, 6)); - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.machine.slots, TileEntityCoffeeMachine.SLOT_INPUT, 80, 42)); - this.addSlotToContainer(new SlotOutput(this.machine.slots, TileEntityCoffeeMachine.SLOT_OUTPUT, 80, 73)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.machine.inv, TileEntityCoffeeMachine.SLOT_COFFEE_BEANS, 37, 6)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.machine.inv, TileEntityCoffeeMachine.SLOT_INPUT, 80, 42)); + this.addSlotToContainer(new SlotOutput(this.machine.inv, TileEntityCoffeeMachine.SLOT_OUTPUT, 80, 73)); for(int i = 0; i < 4; i++){ for(int j = 0; j < 2; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.machine.slots, j+i*2+3, 125+j*18, 6+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.machine.inv, j+i*2+3, 125+j*18, 6+i*18)); } } @@ -112,7 +112,7 @@ public class ContainerCoffeeMachine extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index a7da1bb55..49a1a2466 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -30,7 +30,7 @@ public class ContainerDirectionalBreaker extends Container{ for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.breaker.slots, j+i*3, 74+j*18, 21+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.breaker.inv, j+i*3, 74+j*18, 21+i*18)); } } @@ -83,7 +83,7 @@ public class ContainerDirectionalBreaker extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index b0eb4a635..8db8a06de 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotImmovable; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotItemHandlerUnconditioned; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.items.ItemDrillUpgrade; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -28,7 +28,7 @@ public class ContainerDrill extends Container{ public static final int SLOT_AMOUNT = 5; - private final ItemStackHandlerCustom drillInventory = new ItemStackHandlerCustom(SLOT_AMOUNT); + private final ItemStackHandlerAA drillInventory = new ItemStackHandlerAA(SLOT_AMOUNT); private final InventoryPlayer inventory; public ContainerDrill(InventoryPlayer inventory){ @@ -106,7 +106,7 @@ public class ContainerDrill extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index 250da5f15..e467d2846 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -33,7 +33,7 @@ public class ContainerDropper extends Container{ InventoryPlayer inventory = player.inventory; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.dropper.slots, j+i*3, 62+j*18, 21+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.dropper.inv, j+i*3, 62+j*18, 21+i*18)); } } @@ -86,7 +86,7 @@ public class ContainerDropper extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index 056fb3c2d..b61bb3529 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnergizer; import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -26,49 +27,54 @@ import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +public class ContainerEnergizer extends Container { -public class ContainerEnergizer extends Container{ - - public static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[]{EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; + public static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[] { EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET }; private final TileEntityEnergizer energizer; - public ContainerEnergizer(final EntityPlayer player, TileEntityBase tile){ - this.energizer = (TileEntityEnergizer)tile; + public ContainerEnergizer(final EntityPlayer player, TileEntityBase tile) { + this.energizer = (TileEntityEnergizer) tile; InventoryPlayer inventory = player.inventory; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.energizer.slots, 0, 76, 73) { + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.energizer.inv, 0, 76, 73) { @Override public boolean isItemValid(ItemStack stack) { return super.isItemValid(stack) && stack.hasCapability(CapabilityEnergy.ENERGY, null); } }); - this.addSlotToContainer(new SlotOutput(this.energizer.slots, 1, 76, 42)); + this.addSlotToContainer(new SlotOutput(this.energizer.inv, 1, 76, 42)); - for(int i = 0; i < 3; i++){ - for(int j = 0; j < 9; j++){ - this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 97+i*18)); + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18)); } } - for(int i = 0; i < 9; i++){ - this.addSlotToContainer(new Slot(inventory, i, 8+i*18, 155)); + for (int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 155)); } - for(int k = 0; k < 4; ++k){ + for (int k = 0; k < 4; ++k) { final EntityEquipmentSlot slot = VALID_EQUIPMENT_SLOTS[k]; - this.addSlotToContainer(new Slot(player.inventory, 36+(3-k), 102, 19+k*18){ + this.addSlotToContainer(new Slot(player.inventory, 36 + (3 - k), 102, 19 + k * 18) { @Override - public int getSlotStackLimit(){ + public int getSlotStackLimit() { return 1; } @Override - public boolean isItemValid(ItemStack stack){ + public boolean isItemValid(ItemStack stack) { return StackUtil.isValid(stack) && stack.getItem().isValidArmor(stack, slot, player); } + @Override + public boolean canTakeStack(EntityPlayer player) { + ItemStack itemstack = this.getStack(); + return !itemstack.isEmpty() && !player.isCreative() && EnchantmentHelper.hasBindingCurse(itemstack) ? false : super.canTakeStack(player); + } + @Override @SideOnly(Side.CLIENT) - public String getSlotTexture(){ + public String getSlotTexture() { return ItemArmor.EMPTY_SLOT_NAMES[slot.getIndex()]; } }); @@ -76,58 +82,43 @@ public class ContainerEnergizer extends Container{ } @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slot){ + public ItemStack transferStackInSlot(EntityPlayer player, int slot) { int inventoryStart = 2; - int inventoryEnd = inventoryStart+26; - int hotbarStart = inventoryEnd+1; - int hotbarEnd = hotbarStart+8; + int inventoryEnd = inventoryStart + 26; + int hotbarStart = inventoryEnd + 1; + int hotbarEnd = hotbarStart + 8; Slot theSlot = this.inventorySlots.get(slot); - if(theSlot != null && theSlot.getHasStack()){ + if (theSlot != null && theSlot.getHasStack()) { ItemStack newStack = theSlot.getStack(); ItemStack currentStack = newStack.copy(); //Slots in Inventory to shift from - if(slot == 1){ - if(!this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, true)){ - return StackUtil.getEmpty(); - } + if (slot == 1) { + if (!this.mergeItemStack(newStack, inventoryStart, hotbarEnd + 1, true)) { return StackUtil.getEmpty(); } theSlot.onSlotChange(newStack, currentStack); } //Other Slots in Inventory excluded - else if(slot >= inventoryStart){ + else if (slot >= inventoryStart) { //Shift from Inventory - if(newStack.hasCapability(CapabilityEnergy.ENERGY, null)){ - if(!this.mergeItemStack(newStack, 0, 1, false)){ - return StackUtil.getEmpty(); - } + if (newStack.hasCapability(CapabilityEnergy.ENERGY, null)) { + if (!this.mergeItemStack(newStack, 0, 1, false)) { return StackUtil.getEmpty(); } } // - else if(slot >= inventoryStart && slot <= inventoryEnd){ - if(!this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false)){ - return StackUtil.getEmpty(); - } - } - else if(slot >= inventoryEnd+1 && slot < hotbarEnd+1 && !this.mergeItemStack(newStack, inventoryStart, inventoryEnd+1, false)){ - return StackUtil.getEmpty(); - } - } - else if(!this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, false)){ - return StackUtil.getEmpty(); - } + else if (slot >= inventoryStart && slot <= inventoryEnd) { + if (!this.mergeItemStack(newStack, hotbarStart, hotbarEnd + 1, false)) { return StackUtil.getEmpty(); } + } else if (slot >= inventoryEnd + 1 && slot < hotbarEnd + 1 && !this.mergeItemStack(newStack, inventoryStart, inventoryEnd + 1, false)) { return StackUtil.getEmpty(); } + } else if (!this.mergeItemStack(newStack, inventoryStart, hotbarEnd + 1, false)) { return StackUtil.getEmpty(); } - if(!StackUtil.isValid(newStack)){ + if (!StackUtil.isValid(newStack)) { theSlot.putStack(StackUtil.getEmpty()); - } - else{ + } else { theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ - return StackUtil.getEmpty(); - } + if (newStack.getCount() == currentStack.getCount()) { return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); return currentStack; @@ -136,7 +127,7 @@ public class ContainerEnergizer extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player) { return this.energizer.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index d986bd4e6..41ec62a31 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -35,8 +35,8 @@ public class ContainerEnervator extends Container{ this.enervator = (TileEntityEnervator)tile; InventoryPlayer inventory = player.inventory; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.enervator.slots, 0, 76, 73)); - this.addSlotToContainer(new SlotOutput(this.enervator.slots, 1, 76, 42)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.enervator.inv, 0, 76, 73)); + this.addSlotToContainer(new SlotOutput(this.enervator.inv, 1, 76, 42)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -119,7 +119,7 @@ public class ContainerEnervator extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFarmer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFarmer.java index d9bd64770..726fc5e14 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFarmer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFarmer.java @@ -30,12 +30,12 @@ public class ContainerFarmer extends Container{ for(int i = 0; i < 3; i++){ for(int j = 0; j < 2; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.farmer.slots, j+i*2, 67+j*18, 21+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.farmer.inv, j+i*2, 67+j*18, 21+i*18)); } } for(int i = 0; i < 3; i++){ for(int j = 0; j < 2; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.farmer.slots, 6+j+i*2, 105+j*18, 21+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.farmer.inv, 6+j+i*2, 105+j*18, 21+i*18)); } } @@ -88,7 +88,7 @@ public class ContainerFarmer extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index 65682f122..45e3c0e04 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -27,7 +27,7 @@ public class ContainerFeeder extends Container{ public ContainerFeeder(InventoryPlayer inventory, TileEntityBase tile){ this.tileFeeder = (TileEntityFeeder)tile; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileFeeder.slots, 0, 80, 45)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileFeeder.inv, 0, 80, 45)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -78,7 +78,7 @@ public class ContainerFeeder extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index e62a62f17..99133544f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -72,7 +72,7 @@ public class ContainerFermentingBarrel extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java index 187bb9ba1..b502f7e75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotImmovable; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -27,7 +27,7 @@ public class ContainerFilter extends Container{ public static final int SLOT_AMOUNT = 24; - private final ItemStackHandlerCustom filterInventory = new ItemStackHandlerCustom(SLOT_AMOUNT); + private final ItemStackHandlerAA filterInventory = new ItemStackHandlerAA(SLOT_AMOUNT); private final InventoryPlayer inventory; public ContainerFilter(InventoryPlayer inventory){ @@ -96,7 +96,7 @@ public class ContainerFilter extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 60a1f378b..39b316a91 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -79,7 +79,7 @@ public class ContainerFluidCollector extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index 10eee858d..bef7cb0d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -30,10 +30,10 @@ public class ContainerFurnaceDouble extends Container{ public ContainerFurnaceDouble(InventoryPlayer inventory, TileEntityBase tile){ this.tileFurnace = (TileEntityFurnaceDouble)tile; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileFurnace.slots, TileEntityFurnaceDouble.SLOT_INPUT_1, 51, 21)); - this.addSlotToContainer(new SlotOutput(this.tileFurnace.slots, TileEntityFurnaceDouble.SLOT_OUTPUT_1, 51, 69)); - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileFurnace.slots, TileEntityFurnaceDouble.SLOT_INPUT_2, 109, 21)); - this.addSlotToContainer(new SlotOutput(this.tileFurnace.slots, TileEntityFurnaceDouble.SLOT_OUTPUT_2, 108, 69)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileFurnace.inv, TileEntityFurnaceDouble.SLOT_INPUT_1, 51, 21)); + this.addSlotToContainer(new SlotOutput(this.tileFurnace.inv, TileEntityFurnaceDouble.SLOT_OUTPUT_1, 51, 69)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileFurnace.inv, TileEntityFurnaceDouble.SLOT_INPUT_2, 109, 21)); + this.addSlotToContainer(new SlotOutput(this.tileFurnace.inv, TileEntityFurnaceDouble.SLOT_OUTPUT_2, 108, 69)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -97,7 +97,7 @@ public class ContainerFurnaceDouble extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 2d0a75b18..12d1cd483 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -31,7 +31,7 @@ public class ContainerGiantChest extends Container{ for(int i = 0; i < 9; i++){ for(int j = 0; j < 13; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileChest.slots, (9*13*page)+j+(i*13), 5+j*18, 5+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileChest.inv, (9*13*page)+j+(i*13), 5+j*18, 5+i*18)); } } @@ -84,7 +84,7 @@ public class ContainerGiantChest extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index 17ceb27ea..df625cc1f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -32,13 +32,13 @@ public class ContainerGrinder extends Container{ this.tileGrinder = (TileEntityGrinder)tile; this.isDouble = isDouble; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileGrinder.slots, TileEntityGrinder.SLOT_INPUT_1, this.isDouble ? 51 : 80, 21)); - this.addSlotToContainer(new SlotOutput(this.tileGrinder.slots, TileEntityGrinder.SLOT_OUTPUT_1_1, this.isDouble ? 37 : 66, 69)); - this.addSlotToContainer(new SlotOutput(this.tileGrinder.slots, TileEntityGrinder.SLOT_OUTPUT_1_2, this.isDouble ? 64 : 92, 69)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileGrinder.inv, TileEntityGrinder.SLOT_INPUT_1, this.isDouble ? 51 : 80, 21)); + this.addSlotToContainer(new SlotOutput(this.tileGrinder.inv, TileEntityGrinder.SLOT_OUTPUT_1_1, this.isDouble ? 37 : 66, 69)); + this.addSlotToContainer(new SlotOutput(this.tileGrinder.inv, TileEntityGrinder.SLOT_OUTPUT_1_2, this.isDouble ? 64 : 92, 69)); if(this.isDouble){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileGrinder.slots, TileEntityGrinder.SLOT_INPUT_2, 109, 21)); - this.addSlotToContainer(new SlotOutput(this.tileGrinder.slots, TileEntityGrinder.SLOT_OUTPUT_2_1, 96, 69)); - this.addSlotToContainer(new SlotOutput(this.tileGrinder.slots, TileEntityGrinder.SLOT_OUTPUT_2_2, 121, 69)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileGrinder.inv, TileEntityGrinder.SLOT_INPUT_2, 109, 21)); + this.addSlotToContainer(new SlotOutput(this.tileGrinder.inv, TileEntityGrinder.SLOT_OUTPUT_2_1, 96, 69)); + this.addSlotToContainer(new SlotOutput(this.tileGrinder.inv, TileEntityGrinder.SLOT_OUTPUT_2_2, 121, 69)); } for(int i = 0; i < 3; i++){ @@ -108,7 +108,7 @@ public class ContainerGrinder extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 945d6ce0e..00c8b4e54 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -34,7 +34,7 @@ public class ContainerInputter extends Container{ this.tileInputter = (TileEntityInputter)tile; this.isAdvanced = isAdvanced; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileInputter.slots, 0, 80, 21+(isAdvanced ? 12 : 0))); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileInputter.inv, 0, 80, 21+(isAdvanced ? 12 : 0))); if(isAdvanced){ for(int i = 0; i < 2; i++){ @@ -95,7 +95,7 @@ public class ContainerInputter extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 7d95dc3a4..db546dd31 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -82,7 +82,7 @@ public class ContainerLaserRelayItemWhitelist extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index 387214453..77e1189ef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -30,7 +30,7 @@ public class ContainerMiner extends Container{ for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.miner.slots, j+i*3, 62+j*18, 21+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.miner.inv, j+i*3, 62+j*18, 21+i*18)); } } @@ -83,7 +83,7 @@ public class ContainerMiner extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index 3329861b9..e067df46d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -71,7 +71,7 @@ public class ContainerOilGenerator extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index 7f127b6a5..0a236223a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -30,7 +30,7 @@ public class ContainerPhantomPlacer extends Container{ for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.placer.slots, j+i*3, 62+j*18, 21+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.placer.inv, j+i*3, 62+j*18, 21+i*18)); } } @@ -83,7 +83,7 @@ public class ContainerPhantomPlacer extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 24bd5bbf0..a11c15ae0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -32,7 +32,7 @@ public class ContainerRangedCollector extends Container{ for(int i = 0; i < 2; i++){ for(int j = 0; j < 3; j++){ - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.collector.slots, j+i*3, 96+j*18, 24+i*18)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.collector.inv, j+i*3, 96+j*18, 24+i*18)); } } for(int i = 0; i < 4; i++){ @@ -90,7 +90,7 @@ public class ContainerRangedCollector extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index d3853868b..12756aeb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -29,8 +29,8 @@ public class ContainerRepairer extends Container{ public ContainerRepairer(InventoryPlayer inventory, TileEntityBase tile){ this.tileRepairer = (TileEntityItemRepairer)tile; - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileRepairer.slots, TileEntityItemRepairer.SLOT_INPUT, 47, 53)); - this.addSlotToContainer(new SlotOutput(this.tileRepairer.slots, TileEntityItemRepairer.SLOT_OUTPUT, 109, 53)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.tileRepairer.inv, TileEntityItemRepairer.SLOT_INPUT, 47, 53)); + this.addSlotToContainer(new SlotOutput(this.tileRepairer.inv, TileEntityItemRepairer.SLOT_OUTPUT, 109, 53)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -85,7 +85,7 @@ public class ContainerRepairer extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index 617db96b9..ab8fe986b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -30,8 +30,8 @@ public class ContainerXPSolidifier extends Container{ public ContainerXPSolidifier(InventoryPlayer inventory, TileEntityBase tile){ this.solidifier = (TileEntityXPSolidifier)tile; - this.addSlotToContainer(new SlotOutput(this.solidifier.slots, 0, 95, 8)); - this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.solidifier.slots, 1, 65, 8)); + this.addSlotToContainer(new SlotOutput(this.solidifier.inv, 0, 95, 8)); + this.addSlotToContainer(new SlotItemHandlerUnconditioned(this.solidifier.inv, 1, 65, 8)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -83,7 +83,7 @@ public class ContainerXPSolidifier extends Container{ theSlot.onSlotChanged(); } - if(StackUtil.getStackSize(newStack) == StackUtil.getStackSize(currentStack)){ + if(newStack.getCount() == currentStack.getCount()){ return StackUtil.getEmpty(); } theSlot.onTake(player, newStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java index 24b03bf6b..682d2e131 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java @@ -61,7 +61,7 @@ public class GuiRepairer extends GuiWtfMojang{ this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); - if(TileEntityItemRepairer.canBeRepaired(this.tileRepairer.slots.getStackInSlot(TileEntityItemRepairer.SLOT_INPUT))){ + if(TileEntityItemRepairer.canBeRepaired(this.tileRepairer.inv.getStackInSlot(TileEntityItemRepairer.SLOT_INPUT))){ int i = this.tileRepairer.getItemDamageToScale(22); this.drawTexturedModalRect(this.guiLeft+73, this.guiTop+52, 176, 28, i, 16); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotDeletion.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotDeletion.java index b0c8704ff..a002a2719 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotDeletion.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotDeletion.java @@ -10,12 +10,12 @@ package de.ellpeck.actuallyadditions.mod.inventory.slot; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import net.minecraft.item.ItemStack; public class SlotDeletion extends SlotItemHandlerUnconditioned{ - public SlotDeletion(ItemStackHandlerCustom inv, int slot, int x, int y){ + public SlotDeletion(ItemStackHandlerAA inv, int slot, int x, int y){ super(inv, slot, x, y); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java index d45d09645..bdf28a162 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.inventory.slot; import de.ellpeck.actuallyadditions.mod.items.ItemFilter; import de.ellpeck.actuallyadditions.mod.tile.FilterSettings; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -21,7 +21,7 @@ import net.minecraft.item.ItemStack; public class SlotFilter extends SlotItemHandlerUnconditioned{ - public SlotFilter(ItemStackHandlerCustom inv, int slot, int x, int y){ + public SlotFilter(ItemStackHandlerAA inv, int slot, int x, int y){ super(inv, slot, x, y); } @@ -57,10 +57,10 @@ public class SlotFilter extends SlotItemHandlerUnconditioned{ } else if(StackUtil.isValid(heldStack)){ if(!isFilter(stackInSlot)){ - this.putStack(StackUtil.setStackSize(heldStack.copy(), 1)); + this.putStack(StackUtil.grow(heldStack.copy(), 1)); if(isFilter(heldStack)){ - player.inventory.setItemStack(StackUtil.addStackSize(heldStack, -1)); + player.inventory.setItemStack(StackUtil.shrink(heldStack, 1)); } } } @@ -73,7 +73,7 @@ public class SlotFilter extends SlotItemHandlerUnconditioned{ @Override public void putStack(ItemStack stack){ - super.putStack(StackUtil.validateCopy(stack)); + super.putStack(stack.copy()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotItemHandlerUnconditioned.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotItemHandlerUnconditioned.java index 9c1248242..5b6b66112 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotItemHandlerUnconditioned.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotItemHandlerUnconditioned.java @@ -10,33 +10,31 @@ package de.ellpeck.actuallyadditions.mod.inventory.slot; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import javax.annotation.Nonnull; + +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; -import javax.annotation.Nonnull; +public class SlotItemHandlerUnconditioned extends SlotItemHandler { -public class SlotItemHandlerUnconditioned extends SlotItemHandler{ + private final ItemStackHandlerAA inv; - private final ItemStackHandlerCustom handler; - - public SlotItemHandlerUnconditioned(ItemStackHandlerCustom handler, int index, int xPosition, int yPosition){ - super(handler, index, xPosition, yPosition); - this.handler = handler; + public SlotItemHandlerUnconditioned(ItemStackHandlerAA inv, int index, int xPosition, int yPosition) { + super(inv, index, xPosition, yPosition); + this.inv = inv; } @Override - public boolean isItemValid(ItemStack stack){ - if(StackUtil.isValid(stack)){ - ItemStack currentStack = this.handler.getStackInSlot(this.getSlotIndex()); - this.handler.setStackInSlot(this.getSlotIndex(), ItemStack.EMPTY); - ItemStack remainder = this.handler.insertItemInternal(this.getSlotIndex(), stack, true); - this.handler.setStackInSlot(this.getSlotIndex(), currentStack); - return remainder.isEmpty() || remainder.getCount() < stack.getCount(); - } - return false; + public boolean isItemValid(ItemStack stack) { + if (stack.isEmpty() || !inv.canAccept(getSlotIndex(), stack, false)) return false; + + ItemStack currentStack = this.inv.getStackInSlot(this.getSlotIndex()); + this.inv.setStackInSlot(this.getSlotIndex(), ItemStack.EMPTY); + ItemStack remainder = this.inv.insertItem(this.getSlotIndex(), stack, true, false); + this.inv.setStackInSlot(this.getSlotIndex(), currentStack); + return remainder.isEmpty() || remainder.getCount() < stack.getCount(); } /** @@ -44,34 +42,34 @@ public class SlotItemHandlerUnconditioned extends SlotItemHandler{ */ @Override @Nonnull - public ItemStack getStack(){ - return this.handler.getStackInSlot(this.getSlotIndex()); + public ItemStack getStack() { + return this.inv.getStackInSlot(this.getSlotIndex()); } @Override - public void putStack(ItemStack stack){ - this.handler.setStackInSlot(this.getSlotIndex(), stack); + public void putStack(ItemStack stack) { + this.inv.setStackInSlot(this.getSlotIndex(), stack); this.onSlotChanged(); } @Override - public int getItemStackLimit(ItemStack stack){ + public int getItemStackLimit(ItemStack stack) { ItemStack maxAdd = stack.copy(); maxAdd.setCount(stack.getMaxStackSize()); - ItemStack currentStack = this.handler.getStackInSlot(this.getSlotIndex()); - this.handler.setStackInSlot(this.getSlotIndex(), ItemStack.EMPTY); - ItemStack remainder = this.handler.insertItemInternal(this.getSlotIndex(), maxAdd, true); - this.handler.setStackInSlot(this.getSlotIndex(), currentStack); - return stack.getMaxStackSize()-remainder.getCount(); + ItemStack currentStack = this.inv.getStackInSlot(this.getSlotIndex()); + this.inv.setStackInSlot(this.getSlotIndex(), ItemStack.EMPTY); + ItemStack remainder = this.inv.insertItem(this.getSlotIndex(), maxAdd, true, false); + this.inv.setStackInSlot(this.getSlotIndex(), currentStack); + return stack.getMaxStackSize() - remainder.getCount(); } @Override - public boolean canTakeStack(EntityPlayer playerIn){ - return !this.handler.extractItemInternal(this.getSlotIndex(), 1, true).isEmpty(); + public boolean canTakeStack(EntityPlayer playerIn) { + return !this.inv.extractItem(this.getSlotIndex(), 1, true, false).isEmpty(); } @Override - public ItemStack decrStackSize(int amount){ - return this.handler.extractItemInternal(this.getSlotIndex(), amount, false); + public ItemStack decrStackSize(int amount) { + return this.inv.extractItem(this.getSlotIndex(), amount, false, false); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java index 608221a43..aa816b9be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java @@ -10,12 +10,12 @@ package de.ellpeck.actuallyadditions.mod.inventory.slot; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import net.minecraft.item.ItemStack; public class SlotOutput extends SlotItemHandlerUnconditioned{ - public SlotOutput(ItemStackHandlerCustom inventory, int id, int x, int y){ + public SlotOutput(ItemStackHandlerAA inventory, int id, int x, int y){ super(inventory, id, x, y); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBag.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBag.java index f093c881f..455941b2d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBag.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBag.java @@ -10,17 +10,22 @@ package de.ellpeck.actuallyadditions.mod.items; +import java.util.List; + +import javax.annotation.Nullable; + import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.inventory.ContainerBag; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler.GuiTypes; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; @@ -32,9 +37,6 @@ import net.minecraft.world.World; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import javax.annotation.Nullable; -import java.util.List; - public class ItemBag extends ItemBase{ public final boolean isVoid; @@ -47,7 +49,7 @@ public class ItemBag extends ItemBase{ @Override public void addInformation(ItemStack stack, @Nullable World playerIn, List tooltip, ITooltipFlag advanced){ - ItemStackHandlerCustom inv = new ItemStackHandlerCustom(ContainerBag.getSlotAmount(this.isVoid)); + ItemStackHandlerAA inv = new ItemStackHandlerAA(ContainerBag.getSlotAmount(this.isVoid)); ItemDrill.loadSlotsFromNBT(inv, stack); int slotsTotal = inv.getSlots(); @@ -72,7 +74,7 @@ public class ItemBag extends ItemBase{ if(handler != null){ boolean changed = false; - ItemStackHandlerCustom inv = new ItemStackHandlerCustom(ContainerBag.getSlotAmount(this.isVoid)); + ItemStackHandlerAA inv = new ItemStackHandlerAA(ContainerBag.getSlotAmount(this.isVoid)); ItemDrill.loadSlotsFromNBT(inv, stack); for(int j = 0; j < inv.getSlots(); j++){ @@ -81,7 +83,7 @@ public class ItemBag extends ItemBase{ for(int i = 0; i < handler.getSlots(); i++){ ItemStack remain = handler.insertItem(i, invStack, false); if(!ItemStack.areItemStacksEqual(remain, invStack)){ - inv.setStackInSlot(j, StackUtil.validateCopy(remain)); + inv.setStackInSlot(j, remain.copy()); changed = true; if(!StackUtil.isValid(remain)){ @@ -108,11 +110,16 @@ public class ItemBag extends ItemBase{ if(!world.isRemote && hand == EnumHand.MAIN_HAND){ player.openGui(ActuallyAdditions.INSTANCE, (this.isVoid ? GuiTypes.VOID_BAG : GuiTypes.BAG).ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); } - return new ActionResult(EnumActionResult.PASS, player.getHeldItem(hand)); + return new ActionResult<>(EnumActionResult.PASS, player.getHeldItem(hand)); } @Override public EnumRarity getRarity(ItemStack stack){ return this.isVoid ? EnumRarity.RARE : EnumRarity.UNCOMMON; } + + @Override + public NBTTagCompound getNBTShareTag(ItemStack stack){ + return null; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index 4affc7e8f..40ccf4c68 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -53,7 +53,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ chest = new InvWrapper((IInventory)tileHit); } else if(tileHit instanceof TileEntityInventoryBase){ - chest = ((TileEntityInventoryBase)tileHit).slots; + chest = ((TileEntityInventoryBase)tileHit).inv; } if(chest != null){ @@ -74,7 +74,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ //Copy Items into new Chest TileEntity newTileHit = world.getTileEntity(pos); if(newTileHit instanceof TileEntityInventoryBase){ - IItemHandlerModifiable newChest = ((TileEntityInventoryBase)newTileHit).slots; + IItemHandlerModifiable newChest = ((TileEntityInventoryBase)newTileHit).inv; for(int i = 0; i < stacks.length; i++){ if(StackUtil.isValid(stacks[i])){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index e7df6a161..2febcc811 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -23,7 +23,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -45,16 +45,18 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumFacing.Axis; import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.EnumFacing.Axis; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; public class ItemDrill extends ItemEnergy{ @@ -74,7 +76,7 @@ public class ItemDrill extends ItemEnergy{ * * @param stack The Drill */ - public static void loadSlotsFromNBT(ItemStackHandlerCustom slots, ItemStack stack){ + public static void loadSlotsFromNBT(IItemHandlerModifiable slots, ItemStack stack){ NBTTagCompound compound = stack.getTagCompound(); if(compound != null){ TileEntityInventoryBase.loadSlots(slots, compound); @@ -87,7 +89,7 @@ public class ItemDrill extends ItemEnergy{ * @param slots The Slots * @param stack The Drill */ - public static void writeSlotsToNBT(ItemStackHandlerCustom slots, ItemStack stack){ + public static void writeSlotsToNBT(IItemHandler slots, ItemStack stack){ NBTTagCompound compound = stack.getTagCompound(); if(compound == null){ compound = new NBTTagCompound(); @@ -115,7 +117,7 @@ public class ItemDrill extends ItemEnergy{ //Places the Block into the World if(toPlaceStack.onItemUse(player, world, pos, hand, side, hitX, hitY, hitZ) != EnumActionResult.FAIL){ if(!player.capabilities.isCreativeMode){ - WorldUtil.setHandItemWithoutAnnoyingSound(player, hand, StackUtil.validateCopy(toPlaceStack)); + WorldUtil.setHandItemWithoutAnnoyingSound(player, hand, toPlaceStack.copy()); } } } @@ -147,7 +149,7 @@ public class ItemDrill extends ItemEnergy{ return StackUtil.getEmpty(); } - ItemStackHandlerCustom inv = new ItemStackHandlerCustom(ContainerDrill.SLOT_AMOUNT); + ItemStackHandlerAA inv = new ItemStackHandlerAA(ContainerDrill.SLOT_AMOUNT); loadSlotsFromNBT(inv, stack); for(int i = 0; i < inv.getSlots(); i++){ ItemStack slotStack = inv.getStackInSlot(i); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFillingWand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFillingWand.java index 5a7056591..c3d1c9243 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFillingWand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFillingWand.java @@ -52,7 +52,7 @@ public class ItemFillingWand extends ItemEnergy { for (int i = 0; i < player.inventory.getSizeInventory(); i++) { ItemStack slot = player.inventory.getStackInSlot(i); if (StackUtil.isValid(slot) && slot.isItemEqual(stack)) { - slot = StackUtil.addStackSize(slot, -1); + slot.shrink(1); if (!StackUtil.isValid(slot)) { player.inventory.setInventorySlotContents(i, StackUtil.getEmpty()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java index 723cc6387..59fe4f94a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java @@ -10,11 +10,13 @@ package de.ellpeck.actuallyadditions.mod.items; +import java.util.List; + import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; @@ -25,8 +27,6 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; -import java.util.List; - public class ItemFilter extends ItemBase{ public ItemFilter(String name){ @@ -51,7 +51,7 @@ public class ItemFilter extends ItemBase{ public void addInformation(ItemStack stack, World playerIn, List tooltip, ITooltipFlag advanced){ super.addInformation(stack, playerIn, tooltip, advanced); - ItemStackHandlerCustom inv = new ItemStackHandlerCustom(ContainerFilter.SLOT_AMOUNT); + ItemStackHandlerAA inv = new ItemStackHandlerAA(ContainerFilter.SLOT_AMOUNT); ItemDrill.loadSlotsFromNBT(inv, stack); for(int i = 0; i < inv.getSlots(); i++){ ItemStack slot = inv.getStackInSlot(i); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index 8f505f3ef..19f2248ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -10,26 +10,29 @@ package de.ellpeck.actuallyadditions.mod.items; +import java.util.Random; +import java.util.UUID; + import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.*; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.WeightedRandom; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import java.util.Random; -import java.util.UUID; - public class ItemHairyBall extends ItemBase{ public ItemHairyBall(String name){ @@ -61,7 +64,7 @@ public class ItemHairyBall extends ItemBase{ entityItem.setPickupDelay(0); player.world.spawnEntity(entityItem); } - stack = StackUtil.addStackSize(stack, -1); + stack.shrink(1); world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, world.rand.nextFloat()*0.1F+0.9F); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index 396ce227c..2e1bcfb3a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.items; import com.google.common.collect.Multimap; + import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.inventory.EntityEquipmentSlot; @@ -55,6 +55,6 @@ public class ItemKnife extends ItemBase{ public ItemStack getContainerItem(ItemStack stack){ ItemStack theStack = stack.copy(); theStack.setItemDamage(theStack.getItemDamage()+1); - return StackUtil.setStackSize(theStack, 1); + return theStack; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java index 286952482..fc17aa357 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java @@ -10,9 +10,10 @@ package de.ellpeck.actuallyadditions.mod.items; +import java.util.List; + import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -24,8 +25,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; -import java.util.List; - public class ItemMagnetRing extends ItemEnergy{ public ItemMagnetRing(String name){ @@ -50,10 +49,10 @@ public class ItemMagnetRing extends ItemEnergy{ for(EntityItem item : items){ if(item.getEntityData().getBoolean("PreventRemoteMovement")) continue; if(!item.isDead && !item.cannotPickup()){ - int energyForItem = 50*StackUtil.getStackSize(item.getItem()); + int energyForItem = 50*item.getItem().getCount(); if(this.getEnergyStored(stack) >= energyForItem){ - ItemStack oldItem = StackUtil.validateCopy(item.getItem()); + ItemStack oldItem = item.getItem().copy(); item.onCollideWithPlayer(player); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 6f97bdb6e..69471a17b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; @@ -31,7 +30,7 @@ public class ItemResonantRice extends ItemBase{ public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand){ ItemStack stack = player.getHeldItem(hand); if(!world.isRemote){ - stack = StackUtil.addStackSize(stack, -1); + stack.shrink(1); world.createExplosion(null, player.posX, player.posY, player.posZ, 0.5F, true); } return new ActionResult(EnumActionResult.SUCCESS, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index 9a4b68cd3..6b8dd8a92 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityXPOrb; @@ -60,13 +59,13 @@ public class ItemSolidifiedExperience extends ItemBase{ if(!player.isSneaking()){ amount = SOLID_XP_AMOUNT; if(!player.capabilities.isCreativeMode){ - stack = StackUtil.addStackSize(stack, -1); + stack.shrink(1); } } else{ - amount = SOLID_XP_AMOUNT*StackUtil.getStackSize(stack); + amount = SOLID_XP_AMOUNT*stack.getCount(); if(!player.capabilities.isCreativeMode){ - stack = StackUtil.setStackSize(stack, 0); + stack.setCount(0); } } @@ -74,7 +73,7 @@ public class ItemSolidifiedExperience extends ItemBase{ orb.getEntityData().setBoolean(ActuallyAdditions.MODID+"FromSolidified", true); world.spawnEntity(orb); } - return new ActionResult(EnumActionResult.SUCCESS, stack); + return new ActionResult<>(EnumActionResult.SUCCESS, stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index c0a295429..6c4e0ae48 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -71,7 +71,7 @@ public class ItemSpawnerChanger extends ItemBase{ ItemPhantomConnector.clearStorage(stack, "Entity"); if(!player.capabilities.isCreativeMode){ - player.setHeldItem(hand, StackUtil.addStackSize(stack, -1)); + player.setHeldItem(hand, StackUtil.shrink(stack, 1)); } return EnumActionResult.SUCCESS; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java index 059db60cd..53bcdb77e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java @@ -61,7 +61,7 @@ public class ItemWaterBowl extends ItemBase{ if(!event.getWorld().isRemote){ event.getWorld().setBlockState(trace.getBlockPos(), Blocks.AIR.getDefaultState(), 11); - ItemStack reduced = StackUtil.addStackSize(event.getItemStack(), -1); + ItemStack reduced = StackUtil.shrink(event.getItemStack(), 1); ItemStack bowl = new ItemStack(InitItems.itemWaterBowl); if(!StackUtil.isValid(reduced)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWorm.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWorm.java index 34bab2e12..05645a45b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWorm.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWorm.java @@ -10,11 +10,12 @@ package de.ellpeck.actuallyadditions.mod.items; +import java.util.List; + import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.entity.EntityWorm; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.block.BlockGrass; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; @@ -38,8 +39,6 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.List; - public class ItemWorm extends ItemBase{ public ItemWorm(String name){ @@ -68,10 +67,7 @@ public class ItemWorm extends ItemBase{ worm.setPosition(pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5); worm.setCustomNameTag(stack.getDisplayName()); world.spawnEntity(worm); - - if(!player.capabilities.isCreativeMode){ - player.setHeldItem(hand, StackUtil.addStackSize(stack, -1)); - } + if(!player.capabilities.isCreativeMode) stack.shrink(1); } return EnumActionResult.SUCCESS; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisenchanting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisenchanting.java index 294b3fa08..181d1fd38 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisenchanting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisenchanting.java @@ -44,7 +44,7 @@ public class LensDisenchanting extends Lens{ for(EntityItem item : items){ if(item != null && !item.isDead){ ItemStack stack = item.getItem(); - if(StackUtil.isValid(stack) && StackUtil.getStackSize(stack) == 1){ + if(StackUtil.isValid(stack) && stack.getCount() == 1){ Item stackItem = stack.getItem(); if(stackItem == Items.BOOK || stackItem == Items.ENCHANTED_BOOK){ if(book == null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java index 46bd129af..45ba719ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java @@ -10,6 +10,8 @@ package de.ellpeck.actuallyadditions.mod.items.lens; +import java.util.ArrayList; + import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; @@ -25,8 +27,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import java.util.ArrayList; - public class LensDisruption extends Lens{ private static final int ENERGY_USE = 150000; @@ -52,7 +52,7 @@ public class LensDisruption extends Lens{ } while(!StackUtil.isValid(newStack)); - newStack = StackUtil.setStackSize(newStack, StackUtil.getStackSize(stack)); + newStack.setCount(stack.getCount()); if(!newStack.hasTagCompound()){ newStack.setTagCompound(new NBTTagCompound()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java index 849f7e722..568070ab1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java @@ -10,6 +10,8 @@ package de.ellpeck.actuallyadditions.mod.jei.crusher; +import java.util.Arrays; + import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; @@ -53,14 +55,14 @@ public class CrusherRecipeCategory implements IRecipeCategory list = new ArrayList(); - list.add(this.theRecipe.outputOneStack); - if(StackUtil.isValid(this.theRecipe.outputTwoStack)){ - list.add(this.theRecipe.outputTwoStack); + List list = new ArrayList<>(); + list.add(this.theRecipe.getOutputOne()); + if(StackUtil.isValid(this.theRecipe.getOutputTwo())){ + list.add(this.theRecipe.getOutputTwo()); } ingredients.setOutputs(ItemStack.class, list); } @Override public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ - if(StackUtil.isValid(this.theRecipe.outputTwoStack)){ - minecraft.fontRenderer.drawString(this.theRecipe.outputTwoChance+"%", 60, 60, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); + if(StackUtil.isValid(this.theRecipe.getOutputTwo())){ + minecraft.fontRenderer.drawString(this.theRecipe.getSecondChance()+"%", 60, 60, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); } super.drawInfo(minecraft, recipeWidth, recipeHeight, mouseX, mouseY); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java index e2449dff8..0156f8cb2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java @@ -10,6 +10,9 @@ package de.ellpeck.actuallyadditions.mod.misc.apiimpl; +import java.util.ArrayList; +import java.util.List; + import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; @@ -47,9 +50,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldServer; import net.minecraftforge.common.util.FakePlayerFactory; -import java.util.ArrayList; -import java.util.List; - public class MethodHandler implements IMethodHandler{ @Override @@ -204,22 +204,22 @@ public class MethodHandler implements IMethodHandler{ List recipes = LensRecipeHandler.getRecipesFor(stack); for(LensConversionRecipe recipe : recipes){ if(recipe != null && recipe.type == tile.getLens()){ - int itemsPossible = Math.min(tile.getEnergy()/recipe.energyUse, StackUtil.getStackSize(stack)); + int itemsPossible = Math.min(tile.getEnergy()/recipe.energyUse, stack.getCount()); if(itemsPossible > 0){ recipe.transformHook(item.getItem(), null, item.getPosition(), tile); item.setDead(); - if(StackUtil.getStackSize(stack)-itemsPossible > 0){ + if(stack.getCount()-itemsPossible > 0){ ItemStack stackCopy = stack.copy(); - stackCopy = StackUtil.addStackSize(stackCopy, -itemsPossible); + stackCopy.shrink(itemsPossible); EntityItem inputLeft = new EntityItem(tile.getWorldObject(), item.posX, item.posY, item.posZ, stackCopy); tile.getWorldObject().spawnEntity(inputLeft); } ItemStack outputCopy = recipe.outputStack.copy(); - outputCopy = StackUtil.setStackSize(outputCopy, itemsPossible); + outputCopy.setCount(itemsPossible); EntityItem newItem = new EntityItem(tile.getWorldObject(), item.posX, item.posY, item.posZ, outputCopy); tile.getWorldObject().spawnEntity(newItem); @@ -268,7 +268,7 @@ public class MethodHandler implements IMethodHandler{ for(ItemStack outputOne : outputOnes){ if(StackUtil.isValid(outputOne) && !CrusherRecipeRegistry.hasBlacklistedOutput(outputOne, ConfigStringListValues.CRUSHER_OUTPUT_BLACKLIST.getValue())){ ItemStack outputOneCopy = outputOne.copy(); - outputOneCopy = StackUtil.setStackSize(outputOneCopy, outputOneAmounts); + outputOneCopy.setCount(outputOneAmounts); if(outputTwos.isEmpty()){ ActuallyAdditionsAPI.addCrusherRecipe(input, outputOneCopy, StackUtil.getEmpty(), 0); @@ -278,7 +278,7 @@ public class MethodHandler implements IMethodHandler{ for(ItemStack outputTwo : outputTwos){ if(StackUtil.isValid(outputTwo) && !CrusherRecipeRegistry.hasBlacklistedOutput(outputTwo, ConfigStringListValues.CRUSHER_OUTPUT_BLACKLIST.getValue())){ ItemStack outputTwoCopy = outputTwo.copy(); - outputTwoCopy = StackUtil.setStackSize(outputTwoCopy, outputTwoAmounts); + outputTwoCopy.setCount(outputTwoAmounts); ActuallyAdditionsAPI.addCrusherRecipe(input, outputOneCopy, outputTwoCopy, outputTwoChance); hasWorkedOnce = true; @@ -299,7 +299,7 @@ public class MethodHandler implements IMethodHandler{ if(StackUtil.isValid(input) && CrusherRecipeRegistry.getRecipeFromInput(input) == null){ if(StackUtil.isValid(outputOne) && !CrusherRecipeRegistry.hasBlacklistedOutput(outputOne, ConfigStringListValues.CRUSHER_OUTPUT_BLACKLIST.getValue())){ ItemStack outputOneCopy = outputOne.copy(); - outputOneCopy = StackUtil.setStackSize(outputOneCopy, outputOneAmount); + outputOneCopy.setCount(outputOneAmount); if(!StackUtil.isValid(outputTwo)){ ActuallyAdditionsAPI.addCrusherRecipe(input, outputOneCopy, StackUtil.getEmpty(), 0); @@ -307,7 +307,7 @@ public class MethodHandler implements IMethodHandler{ } else if(StackUtil.isValid(outputTwo) && !CrusherRecipeRegistry.hasBlacklistedOutput(outputTwo, ConfigStringListValues.CRUSHER_OUTPUT_BLACKLIST.getValue())){ ItemStack outputTwoCopy = outputTwo.copy(); - outputTwoCopy = StackUtil.setStackSize(outputTwoCopy, outputTwoAmount); + outputTwoCopy.setCount(outputTwoAmount); ActuallyAdditionsAPI.addCrusherRecipe(input, outputOneCopy, outputTwoCopy, outputTwoChance); hasWorkedOnce = true; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/CactusFarmerBehavior.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/CactusFarmerBehavior.java index 15418ba5c..7d40b0361 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/CactusFarmerBehavior.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/CactusFarmerBehavior.java @@ -65,12 +65,12 @@ public class CactusFarmerBehavior implements IFarmerBehavior{ upState.getBlock().getDrops(drops, world, up, upState, 0); if(!drops.isEmpty()){ - if(farmer.addToOutputInventory(drops, false)){ + if(farmer.canAddToOutput(drops)){ world.playEvent(2001, up, Block.getStateId(upState)); world.setBlockToAir(up); farmer.extractEnergy(use); - farmer.addToOutputInventory(drops, true); + farmer.addToOutput(drops); result = FarmerResult.SUCCESS; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/DefaultFarmerBehavior.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/DefaultFarmerBehavior.java index 498efd8fa..4e4efbc09 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/DefaultFarmerBehavior.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/DefaultFarmerBehavior.java @@ -120,16 +120,16 @@ public class DefaultFarmerBehavior implements IFarmerBehavior{ } boolean putSeeds = true; - if(!farmer.addToSeedInventory(seeds, false)){ + if(!farmer.canAddToSeeds(seeds)){ other.addAll(seeds); putSeeds = false; } - if(farmer.addToOutputInventory(other, false)){ - farmer.addToOutputInventory(other, true); + if(farmer.canAddToOutput(other)){ + farmer.addToOutput(other); if(putSeeds){ - farmer.addToSeedInventory(seeds, true); + farmer.addToSeeds(seeds); } world.playEvent(2001, pos, Block.getStateId(state)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/MelonPumpkinFarmerBehavior.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/MelonPumpkinFarmerBehavior.java index c4b095867..d62516720 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/MelonPumpkinFarmerBehavior.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/MelonPumpkinFarmerBehavior.java @@ -58,12 +58,12 @@ public class MelonPumpkinFarmerBehavior implements IFarmerBehavior{ NonNullList drops = NonNullList.create(); block.getDrops(drops, world, pos, state, 0); if(!drops.isEmpty()){ - if(farmer.addToOutputInventory(drops, false)){ + if(farmer.canAddToOutput(drops)){ world.playEvent(2001, pos, Block.getStateId(state)); world.setBlockToAir(pos); farmer.extractEnergy(use); - farmer.addToOutputInventory(drops, true); + farmer.addToOutput(drops); return FarmerResult.SUCCESS; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/NetherWartFarmerBehavior.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/NetherWartFarmerBehavior.java index d367d6227..d352ba15c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/NetherWartFarmerBehavior.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/NetherWartFarmerBehavior.java @@ -53,16 +53,16 @@ public class NetherWartFarmerBehavior implements IFarmerBehavior{ NonNullList drops = NonNullList.create(); state.getBlock().getDrops(drops, world, pos, state, 0); if(!drops.isEmpty()){ - boolean toInput = farmer.addToSeedInventory(drops, false); - if(toInput || farmer.addToOutputInventory(drops, false)){ + boolean toInput = farmer.canAddToSeeds(drops); + if(toInput || farmer.canAddToOutput(drops)){ world.playEvent(2001, pos, Block.getStateId(state)); world.setBlockToAir(pos); if(toInput){ - farmer.addToSeedInventory(drops, true); + farmer.addToSeeds(drops); } else{ - farmer.addToOutputInventory(drops, true); + farmer.addToOutput(drops); } farmer.extractEnergy(use); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/ReedFarmerBehavior.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/ReedFarmerBehavior.java index e992d6e45..c4937e3dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/ReedFarmerBehavior.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/ReedFarmerBehavior.java @@ -58,12 +58,12 @@ public class ReedFarmerBehavior implements IFarmerBehavior{ upState.getBlock().getDrops(drops, world, pos, state, 0); if(!drops.isEmpty()){ - if(farmer.addToOutputInventory(drops, false)){ + if(farmer.canAddToOutput(drops)){ world.playEvent(2001, up, Block.getStateId(upState)); world.setBlockToAir(up); farmer.extractEnergy(use); - farmer.addToOutputInventory(drops, true); + farmer.addToOutput(drops); result = FarmerResult.STOP_PROCESSING; //Success no longer makes it not replant, and the plant logic seems sketchy right after harvesting. This works tho. } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/exu/ExUPlantFarmerBehavior.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/exu/ExUPlantFarmerBehavior.java index 6a617a51f..a49a0fcd6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/exu/ExUPlantFarmerBehavior.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/farmer/exu/ExUPlantFarmerBehavior.java @@ -79,19 +79,19 @@ public abstract class ExUPlantFarmerBehavior implements IFarmerBehavior{ if(StackUtil.isValid(stack)){ ResourceLocation itemReg = stack.getItem().getRegistryName(); if(itemReg != null && this.getPlantName().equals(itemReg.toString())){ - if(StackUtil.getStackSize(stack) <= 1){ + if(stack.getCount() <= 1){ drops.remove(stack); break; } else{ - StackUtil.addStackSize(stack, -1); + stack.shrink(1); } } } } - if(farmer.addToOutputInventory(drops, false)){ - farmer.addToOutputInventory(drops, true); + if(farmer.canAddToOutput(drops)){ + farmer.addToOutput(drops); world.playEvent(2001, pos, Block.getStateId(state)); world.setBlockState(pos, block.getDefaultState(), 2); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index 1e036d249..a5a6055e3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -10,23 +10,23 @@ package de.ellpeck.actuallyadditions.mod.recipe; +import java.util.ArrayList; +import java.util.List; + import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; - -import java.util.ArrayList; -import java.util.List; +import net.minecraftforge.oredict.OreIngredient; public final class CrusherRecipeRegistry{ - public static final ArrayList SEARCH_CASES = new ArrayList(); + public static final ArrayList SEARCH_CASES = new ArrayList<>(); public static void registerFinally(){ ArrayList oresNoResult = new ArrayList(); @@ -37,13 +37,15 @@ public final class CrusherRecipeRegistry{ for(SearchCase theCase : SEARCH_CASES){ if(ore.length() > theCase.theCase.length()){ if(ore.substring(0, theCase.theCase.length()).equals(theCase.theCase)){ - String output = theCase.resultPreString+ore.substring(theCase.theCase.length()); - List outputs = OreDictionary.getOres(output, false); - if(!ActuallyAdditionsAPI.methodHandler.addCrusherRecipes(OreDictionary.getOres(ore, false), outputs.isEmpty() ? StackUtil.getEmpty() : outputs.get(0), theCase.resultAmount, StackUtil.getEmpty(), 0, 0)){ + String outputOre = theCase.resultPreString+ore.substring(theCase.theCase.length()); + List outputs = OreDictionary.getOres(outputOre, false); + ItemStack output = outputs.isEmpty() ? ItemStack.EMPTY : outputs.get(0).copy(); + output.setCount(theCase.resultAmount); + if(output.isEmpty()){ if(!oresNoResult.contains(ore)){ oresNoResult.add(ore); } - } + } else ActuallyAdditionsAPI.addCrusherRecipe(new OreIngredient(ore), output, StackUtil.getEmpty(), 0); } } } @@ -53,11 +55,30 @@ public final class CrusherRecipeRegistry{ ArrayList addedRecipes = new ArrayList(); for(int i = recipeStartedAt; i < ActuallyAdditionsAPI.CRUSHER_RECIPES.size(); i++){ CrusherRecipe recipe = ActuallyAdditionsAPI.CRUSHER_RECIPES.get(i); - addedRecipes.add(recipe.inputStack+" -> "+recipe.outputOneStack); + addedRecipes.add(recipe.getInput().getMatchingStacks()+" -> "+recipe.getOutputOne()); } ActuallyAdditions.LOGGER.debug("Added "+addedRecipes.size()+" Crusher Recipes automatically: "+addedRecipes); ActuallyAdditions.LOGGER.debug("Couldn't add "+oresNoResult.size()+" Crusher Recipes automatically, either because the inputs were missing outputs, or because they exist already: "+oresNoResult); + removeDuplicateRecipes(); } + + public static void removeDuplicateRecipes() { + ArrayList usable = new ArrayList<>(); + ArrayList removed = new ArrayList<>(); + for(CrusherRecipe r : ActuallyAdditionsAPI.CRUSHER_RECIPES) { + boolean canUse = true; + for(CrusherRecipe re : usable) { + if(re.getInput().apply(r.getInput().getMatchingStacks()[0])) canUse = false; + } + + if(canUse) usable.add(r); + else removed.add(r); + } + + ActuallyAdditionsAPI.CRUSHER_RECIPES.clear(); + ActuallyAdditionsAPI.CRUSHER_RECIPES.addAll(usable); + ActuallyAdditions.LOGGER.debug(String.format("Removed %s crusher recipes that had dupliate inputs, %s remain.", removed.size(), usable.size())); + } public static boolean hasBlacklistedOutput(ItemStack output, String[] config){ if(StackUtil.isValid(output)){ @@ -100,30 +121,12 @@ public final class CrusherRecipeRegistry{ return false; } - public static ItemStack getOutputOnes(ItemStack input){ - CrusherRecipe recipe = getRecipeFromInput(input); - return recipe == null ? StackUtil.getEmpty() : recipe.outputOneStack; - } - public static CrusherRecipe getRecipeFromInput(ItemStack input){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ - if(ItemUtil.areItemsEqual(recipe.inputStack, input, true)){ - return recipe; - } - } + for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES) + if(recipe.matches(input)) return recipe; return null; } - public static ItemStack getOutputTwos(ItemStack input){ - CrusherRecipe recipe = getRecipeFromInput(input); - return recipe == null ? StackUtil.getEmpty() : recipe.outputTwoStack; - } - - public static int getOutputTwoChance(ItemStack input){ - CrusherRecipe recipe = getRecipeFromInput(input); - return recipe == null ? -1 : recipe.outputTwoChance; - } - public static class SearchCase{ final String theCase; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/FilterSettings.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/FilterSettings.java index d5dc2e1ac..dbdd9d121 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/FilterSettings.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/FilterSettings.java @@ -10,17 +10,18 @@ package de.ellpeck.actuallyadditions.mod.tile; +import org.apache.commons.lang3.ArrayUtils; + import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraftforge.oredict.OreDictionary; -import org.apache.commons.lang3.ArrayUtils; public class FilterSettings{ @@ -29,7 +30,7 @@ public class FilterSettings{ public final int nbtButtonId; public final int oredictButtonId; public final int modButtonId; - public final ItemStackHandlerCustom filterInventory; + public final ItemStackHandlerAA filterInventory; public boolean isWhitelist; public boolean respectMeta; public boolean respectNBT; @@ -42,7 +43,7 @@ public class FilterSettings{ private int lastRecpectOredict; public FilterSettings(int slots, boolean defaultWhitelist, boolean defaultRespectMeta, boolean defaultRespectNBT, boolean defaultRespectMod, int defaultRespectOredict, int buttonIdStart){ - this.filterInventory = new ItemStackHandlerCustom(slots); + this.filterInventory = new ItemStackHandlerAA(slots); this.isWhitelist = defaultWhitelist; this.respectMeta = defaultRespectMeta; @@ -57,14 +58,14 @@ public class FilterSettings{ this.modButtonId = buttonIdStart+4; } - public static boolean check(ItemStack stack, ItemStackHandlerCustom filter, boolean whitelist, boolean meta, boolean nbt, boolean mod, int oredict){ + public static boolean check(ItemStack stack, ItemStackHandlerAA filter, boolean whitelist, boolean meta, boolean nbt, boolean mod, int oredict){ if(StackUtil.isValid(stack)){ for(int i = 0; i < filter.getSlots(); i++){ ItemStack slot = filter.getStackInSlot(i); if(StackUtil.isValid(slot)){ if(SlotFilter.isFilter(slot)){ - ItemStackHandlerCustom inv = new ItemStackHandlerCustom(ContainerFilter.SLOT_AMOUNT); + ItemStackHandlerAA inv = new ItemStackHandlerAA(ContainerFilter.SLOT_AMOUNT); ItemDrill.loadSlotsFromNBT(inv, slot); for(int k = 0; k < inv.getSlots(); k++){ ItemStack filterSlot = inv.getStackInSlot(k); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 2d1d160ab..75202f261 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -21,6 +21,7 @@ import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.state.IBlockState; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -30,7 +31,7 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.energy.IEnergyStorage; -public class TileEntityAtomicReconstructor extends TileEntityInventoryBase implements IEnergyDisplay, IAtomicReconstructor{ +public class TileEntityAtomicReconstructor extends TileEntityInventoryBase implements IEnergyDisplay, IAtomicReconstructor { public static final int ENERGY_USE = 1000; public final CustomEnergyStorage storage; @@ -38,22 +39,22 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private int currentTime; private int oldEnergy; - public TileEntityAtomicReconstructor(){ + public TileEntityAtomicReconstructor() { super(1, "reconstructor"); int power = ConfigIntValues.RECONSTRUCTOR_POWER.getValue(); int recieve = MathHelper.ceil(power * 0.016666F); storage = new CustomEnergyStorage(power, recieve, 0); } - public static void shootLaser(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, Lens currentLens){ + public static void shootLaser(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, Lens currentLens) { world.playSound(null, startX, startY, startZ, SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); AssetUtil.spawnLaserWithTimeServer(world, startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), 25, 0, 0.2F, 0.8F); } @Override - public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type) { super.writeSyncableNBT(compound, type); - if(type != NBTType.SAVE_BLOCK){ + if (type != NBTType.SAVE_BLOCK) { compound.setInteger("CurrentTime", this.currentTime); compound.setInteger("Counter", this.counter); } @@ -61,14 +62,14 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public boolean shouldSyncSlots(){ + public boolean shouldSyncSlots() { return true; } @Override - public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type) { super.readSyncableNBT(compound, type); - if(type != NBTType.SAVE_BLOCK){ + if (type != NBTType.SAVE_BLOCK) { this.currentTime = compound.getInteger("CurrentTime"); this.counter = compound.getInteger("Counter"); } @@ -76,22 +77,21 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public void updateEntity(){ + public void updateEntity() { super.updateEntity(); - if(!this.world.isRemote){ - if(!this.isRedstonePowered && !this.isPulseMode){ - if(this.currentTime > 0){ + if (!this.world.isRemote) { + if (!this.isRedstonePowered && !this.isPulseMode) { + if (this.currentTime > 0) { this.currentTime--; - if(this.currentTime <= 0){ + if (this.currentTime <= 0) { ActuallyAdditionsAPI.methodHandler.invokeReconstructor(this); } - } - else{ + } else { this.currentTime = 100; } } - if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ + if (this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()) { this.oldEnergy = this.storage.getEnergyStored(); this.world.updateComparatorOutputLevel(pos, InitBlocks.blockAtomicReconstructor); } @@ -100,88 +100,85 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public Lens getLens(){ - if(StackUtil.isValid(this.slots.getStackInSlot(0))){ - if(this.slots.getStackInSlot(0).getItem() instanceof ILensItem){ - return ((ILensItem)this.slots.getStackInSlot(0).getItem()).getLens(); - } - } + public Lens getLens() { + Item item = inv.getStackInSlot(0).getItem(); + if (item instanceof ILensItem) return ((ILensItem) item).getLens(); return this.counter >= 500 ? ActuallyAdditionsAPI.lensDisruption : ActuallyAdditionsAPI.lensDefaultConversion; } @Override - public EnumFacing getOrientation(){ + public EnumFacing getOrientation() { IBlockState state = this.world.getBlockState(this.pos); return WorldUtil.getDirectionByPistonRotation(state); } @Override - public BlockPos getPosition(){ + public BlockPos getPosition() { return this.pos; } @Override - public int getX(){ + public int getX() { return this.getPos().getX(); } @Override - public int getY(){ + public int getY() { return this.getPos().getY(); } @Override - public int getZ(){ + public int getZ() { return this.getPos().getZ(); } @Override - public World getWorldObject(){ + public World getWorldObject() { return this.getWorld(); } @Override - public void extractEnergy(int amount){ + public void extractEnergy(int amount) { this.storage.extractEnergyInternal(amount, false); } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean canInsert(int i, ItemStack stack, boolean fromAutomation) { return StackUtil.isValid(stack) && stack.getItem() instanceof ILensItem; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ + public boolean canExtract(int slot, ItemStack stack, boolean byAutomation) { return true; } @Override - public int getEnergy(){ + public int getEnergy() { return this.storage.getEnergyStored(); } @Override - public CustomEnergyStorage getEnergyStorage(){ + public CustomEnergyStorage getEnergyStorage() { return this.storage; } @Override - public boolean needsHoldShift(){ + public boolean needsHoldShift() { return false; } @Override - public boolean isRedstoneToggle(){ + public boolean isRedstoneToggle() { return true; } @Override - public void activateOnPulse(){ + public void activateOnPulse() { ActuallyAdditionsAPI.methodHandler.invokeReconstructor(this); } @Override - public IEnergyStorage getEnergyStorage(EnumFacing facing){ + public IEnergyStorage getEnergyStorage(EnumFacing facing) { return this.storage; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBatteryBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBatteryBox.java index 38c93a95e..c3b4349ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBatteryBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBatteryBox.java @@ -10,6 +10,9 @@ package de.ellpeck.actuallyadditions.mod.tile; +import java.util.ArrayList; +import java.util.List; + import de.ellpeck.actuallyadditions.mod.items.ItemBattery; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; @@ -19,9 +22,6 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; -import java.util.ArrayList; -import java.util.List; - public class TileEntityBatteryBox extends TileEntityInventoryBase implements ISharingEnergyProvider{ private int lastEnergyStored; @@ -33,7 +33,7 @@ public class TileEntityBatteryBox extends TileEntityInventoryBase implements ISh @Override public IEnergyStorage getEnergyStorage(EnumFacing facing){ - ItemStack stack = this.slots.getStackInSlot(0); + ItemStack stack = this.inv.getStackInSlot(0); if(StackUtil.isValid(stack) && stack.getItem() instanceof ItemBattery){ if(stack.hasCapability(CapabilityEnergy.ENERGY, null)){ return stack.getCapability(CapabilityEnergy.ENERGY, null); @@ -51,7 +51,7 @@ public class TileEntityBatteryBox extends TileEntityInventoryBase implements ISh IEnergyStorage storage = this.getEnergyStorage(null); if(storage != null){ - ItemStack stack = this.slots.getStackInSlot(0); + ItemStack stack = this.inv.getStackInSlot(0); if(StackUtil.isValid(stack) && ItemUtil.isEnabled(stack)){ if(storage.getEnergyStored() > 0){ List tiles = new ArrayList(); @@ -67,7 +67,7 @@ public class TileEntityBatteryBox extends TileEntityInventoryBase implements ISh int maxPer = storage.extractEnergy(energyPer, true); for(TileEntityBatteryBox tile : tiles){ - ItemStack battery = tile.slots.getStackInSlot(0); + ItemStack battery = tile.inv.getStackInSlot(0); if(StackUtil.isValid(battery) && !ItemUtil.isEnabled(battery)){ if(tile.hasCapability(CapabilityEnergy.ENERGY, null)){ IEnergyStorage cap = tile.getCapability(CapabilityEnergy.ENERGY, null); @@ -119,7 +119,7 @@ public class TileEntityBatteryBox extends TileEntityInventoryBase implements ISh @Override public void activateOnPulse(){ - ItemStack stack = this.slots.getStackInSlot(0); + ItemStack stack = this.inv.getStackInSlot(0); if(StackUtil.isValid(stack)){ ItemUtil.changeEnabled(stack); this.markDirty(); @@ -144,13 +144,13 @@ public class TileEntityBatteryBox extends TileEntityInventoryBase implements ISh } @Override - public boolean canExtractItem(int slot, ItemStack stack){ + public boolean canExtract(int slot, ItemStack stack, boolean byAutomation){ return true; } @Override - public boolean isItemValidForSlot(int slot, ItemStack stack){ - return StackUtil.isValid(stack) && stack.getItem() instanceof ItemBattery; + public boolean canInsert(int slot, ItemStack stack, boolean fromAutomation){ + return stack.getItem() instanceof ItemBattery; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBioReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBioReactor.java index c90ff1bae..79e607365 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBioReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBioReactor.java @@ -66,8 +66,8 @@ public class TileEntityBioReactor extends TileEntityInventoryBase implements ISh List types = null; if(this.storage.getEnergyStored() < this.storage.getMaxEnergyStored()){ - for(int i = 0; i < this.slots.getSlots(); i++){ - ItemStack stack = this.slots.getStackInSlot(i); + for(int i = 0; i < this.inv.getSlots(); i++){ + ItemStack stack = this.inv.getStackInSlot(i); if(StackUtil.isValid(stack)){ Item item = stack.getItem(); if(isValidItem(stack) && (types == null || !types.contains(item))){ @@ -76,7 +76,7 @@ public class TileEntityBioReactor extends TileEntityInventoryBase implements ISh } types.add(item); - this.slots.setStackInSlot(i, StackUtil.addStackSize(stack, -1)); + this.inv.setStackInSlot(i, StackUtil.shrink(stack, 1)); } } } @@ -129,12 +129,12 @@ public class TileEntityBioReactor extends TileEntityInventoryBase implements ISh } @Override - public boolean canExtractItem(int index, ItemStack stack){ + public boolean canExtract(int index, ItemStack stack, boolean byAutomation){ return false; } @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ + public boolean canInsert(int index, ItemStack stack, boolean fromAutomation){ return isValidItem(stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 4446d7a06..fa35ba264 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -69,10 +69,11 @@ public class TileEntityBreaker extends TileEntityInventoryBase { } } } - + @Override - public boolean isItemValidForSlot(int i, ItemStack stack) { - return true; + public boolean canInsert(int slot, ItemStack stack, boolean automation) { + if(isPlacer) return true; + else return !automation; } private void doWork() { @@ -87,26 +88,19 @@ public class TileEntityBreaker extends TileEntityInventoryBase { float chance = WorldUtil.fireFakeHarvestEventsForDropChance(drops, world, breakCoords); if (chance > 0 && world.rand.nextFloat() <= chance) { - if (StackUtil.canAddAll(slots, drops)) { + if (StackUtil.canAddAll(inv, drops, false)) { world.destroyBlock(breakCoords, false); - StackUtil.addAll(slots, drops); + StackUtil.addAll(inv, drops, false); this.markDirty(); } } } else if (this.isPlacer) { - int theSlot = WorldUtil.findFirstFilledSlot(slots); - this.slots.setStackInSlot(theSlot, WorldUtil.useItemAtSide(side, world, pos, slots.getStackInSlot(theSlot))); - if (!StackUtil.isValid(slots.getStackInSlot(theSlot))) { - this.slots.setStackInSlot(theSlot, StackUtil.getEmpty()); - } + int slot = StackUtil.findFirstFilled(inv); + if(slot == -1) return; + this.inv.setStackInSlot(slot, WorldUtil.useItemAtSide(side, world, pos, inv.getStackInSlot(slot))); } } - @Override - public boolean canExtractItem(int slot, ItemStack stack) { - return true; - } - @Override public boolean isRedstoneToggle() { return true; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 8c71632dd..317a09ef1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -84,14 +84,14 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IS public void updateEntity(){ super.updateEntity(); if(!this.world.isRemote){ - if(this.isCanola(0) && PRODUCE <= this.tank.getCapacity()-this.tank.getFluidAmount()){ + if(isCanola(inv.getStackInSlot(0)) && PRODUCE <= this.tank.getCapacity()-this.tank.getFluidAmount()){ if(this.storage.getEnergyStored() >= ENERGY_USE){ this.currentProcessTime++; this.storage.extractEnergyInternal(ENERGY_USE, false); if(this.currentProcessTime >= TIME){ this.currentProcessTime = 0; - this.slots.setStackInSlot(0, StackUtil.addStackSize(this.slots.getStackInSlot(0), -1)); + this.inv.setStackInSlot(0, StackUtil.shrink(this.inv.getStackInSlot(0), 1)); this.tank.fillInternal(new FluidStack(InitFluids.fluidCanolaOil, PRODUCE), true); this.markDirty(); @@ -111,17 +111,17 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IS } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return (i == 0 && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CANOLA.ordinal()); + public boolean canInsert(int slot, ItemStack stack, boolean fromAutomation){ + return (slot == 0 && isCanola(stack)); } - public boolean isCanola(int slot){ - return StackUtil.isValid(this.slots.getStackInSlot(slot)) && this.slots.getStackInSlot(slot).getItem() == InitItems.itemMisc && this.slots.getStackInSlot(slot).getItemDamage() == TheMiscItems.CANOLA.ordinal(); + public static boolean isCanola(ItemStack stack){ + return stack.getItem() == InitItems.itemMisc && stack.getMetadata() == TheMiscItems.CANOLA.ordinal(); } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return false; + public boolean canExtract(int slot, ItemStack stack, boolean byAutomation){ + return !byAutomation; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 864a407e2..bbf776d9f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -76,17 +75,16 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements this.storage.receiveEnergyInternal(PRODUCE, false); } - if(!this.isRedstonePowered && this.currentBurnTime <= 0 && StackUtil.isValid(this.slots.getStackInSlot(0)) && TileEntityFurnace.getItemBurnTime(this.slots.getStackInSlot(0)) > 0 && this.storage.getEnergyStored() < this.storage.getMaxEnergyStored()){ - int burnTime = TileEntityFurnace.getItemBurnTime(this.slots.getStackInSlot(0)); - this.maxBurnTime = burnTime; - this.currentBurnTime = burnTime; - - this.slots.setStackInSlot(0, StackUtil.addStackSize(this.slots.getStackInSlot(0), -1, true)); + ItemStack stack = inv.getStackInSlot(0); + int burn = TileEntityFurnace.getItemBurnTime(stack); + if(!this.isRedstonePowered && this.currentBurnTime <= 0 && burn > 0 && this.storage.getEnergyStored() < this.storage.getMaxEnergyStored()){ + this.maxBurnTime = burn; + this.currentBurnTime = burn; + stack.shrink(1); } if(flag != this.currentBurnTime > 0 || this.lastCompare != this.getComparatorStrength()){ this.lastCompare = this.getComparatorStrength(); - this.markDirty(); } @@ -105,13 +103,14 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean canInsert(int i, ItemStack stack, boolean fromAutomation){ return TileEntityFurnace.getItemBurnTime(stack) > 0; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return TileEntityFurnace.getItemBurnTime(this.slots.getStackInSlot(0)) <= 0; + public boolean canExtract(int slot, ItemStack stack, boolean byAutomation){ + if(!byAutomation) return true; + return TileEntityFurnace.getItemBurnTime(this.inv.getStackInSlot(0)) <= 0; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 64795bf2d..209fd37a0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -125,15 +125,15 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean canInsert(int i, ItemStack stack, boolean automation){ return (i >= 3 && ItemCoffee.getIngredientFromStack(stack) != null) || (i == SLOT_COFFEE_BEANS && stack.getItem() == InitItems.itemCoffeeBean) || (i == SLOT_INPUT && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CUP.ordinal()); } public void storeCoffee(){ - if(StackUtil.isValid(this.slots.getStackInSlot(SLOT_COFFEE_BEANS)) && this.slots.getStackInSlot(SLOT_COFFEE_BEANS).getItem() == InitItems.itemCoffeeBean){ + if(StackUtil.isValid(this.inv.getStackInSlot(SLOT_COFFEE_BEANS)) && this.inv.getStackInSlot(SLOT_COFFEE_BEANS).getItem() == InitItems.itemCoffeeBean){ int toAdd = 2; if(toAdd <= COFFEE_CACHE_MAX_AMOUNT-this.coffeeCacheAmount){ - this.slots.setStackInSlot(SLOT_COFFEE_BEANS, StackUtil.addStackSize(this.slots.getStackInSlot(SLOT_COFFEE_BEANS), -1)); + this.inv.setStackInSlot(SLOT_COFFEE_BEANS, StackUtil.shrink(this.inv.getStackInSlot(SLOT_COFFEE_BEANS), 1)); this.coffeeCacheAmount += toAdd; } } @@ -141,7 +141,8 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements public void brew(){ if(!this.world.isRemote){ - if(StackUtil.isValid(this.slots.getStackInSlot(SLOT_INPUT)) && this.slots.getStackInSlot(SLOT_INPUT).getItem() == InitItems.itemMisc && this.slots.getStackInSlot(SLOT_INPUT).getItemDamage() == TheMiscItems.CUP.ordinal() && !StackUtil.isValid(this.slots.getStackInSlot(SLOT_OUTPUT)) && this.coffeeCacheAmount >= CACHE_USE && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == FluidRegistry.WATER && this.tank.getFluidAmount() >= WATER_USE){ + ItemStack input = this.inv.getStackInSlot(SLOT_INPUT); + if (StackUtil.isValid(input) && input.getItem() == InitItems.itemMisc && input.getItemDamage() == TheMiscItems.CUP.ordinal() && !StackUtil.isValid(this.inv.getStackInSlot(SLOT_OUTPUT)) && this.coffeeCacheAmount >= CACHE_USE && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == FluidRegistry.WATER && this.tank.getFluidAmount() >= WATER_USE){ if(this.storage.getEnergyStored() >= ENERGY_USED){ if(this.brewTime%30 == 0){ this.world.playSound(null, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), SoundHandler.coffeeMachine, SoundCategory.BLOCKS, 0.35F, 1.0F); @@ -152,18 +153,18 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements if(this.brewTime >= TIME_USED){ this.brewTime = 0; ItemStack output = new ItemStack(InitItems.itemCoffee); - for(int i = 3; i < this.slots.getSlots(); i++){ - if(StackUtil.isValid(this.slots.getStackInSlot(i))){ - CoffeeIngredient ingredient = ItemCoffee.getIngredientFromStack(this.slots.getStackInSlot(i)); + for(int i = 3; i < this.inv.getSlots(); i++){ + if(StackUtil.isValid(this.inv.getStackInSlot(i))){ + CoffeeIngredient ingredient = ItemCoffee.getIngredientFromStack(this.inv.getStackInSlot(i)); if(ingredient != null){ if(ingredient.effect(output)){ - this.slots.setStackInSlot(i, StackUtil.addStackSize(this.slots.getStackInSlot(i), -1, true)); + this.inv.setStackInSlot(i, StackUtil.shrinkForContainer(this.inv.getStackInSlot(i), 1)); } } } } - this.slots.setStackInSlot(SLOT_OUTPUT, output.copy()); - this.slots.setStackInSlot(SLOT_INPUT, StackUtil.addStackSize(this.slots.getStackInSlot(SLOT_INPUT), -1)); + this.inv.setStackInSlot(SLOT_OUTPUT, output.copy()); + this.inv.getStackInSlot(SLOT_INPUT).shrink(1); this.coffeeCacheAmount -= CACHE_USE; this.tank.drainInternal(WATER_USE, true); } @@ -176,8 +177,8 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return slot == SLOT_OUTPUT || (slot >= 3 && slot < this.slots.getSlots() && ItemCoffee.getIngredientFromStack(stack) == null); + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return slot == SLOT_OUTPUT || (slot >= 3 && slot < this.inv.getSlots() && ItemCoffee.getIngredientFromStack(stack) == null); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index 2b9f71eb3..5d84738b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -63,14 +63,15 @@ public class TileEntityCompost extends TileEntityInventoryBase{ super.updateEntity(); if(!this.world.isRemote){ boolean theFlag = this.conversionTime > 0; - - if(StackUtil.isValid(this.slots.getStackInSlot(0))){ - CompostRecipe recipe = getRecipeForInput(this.slots.getStackInSlot(0)); + ItemStack input = inv.getStackInSlot(0); + if(StackUtil.isValid(input)){ + CompostRecipe recipe = getRecipeForInput(input); if(recipe != null){ this.conversionTime++; if(this.conversionTime >= COMPOST_TIME_TICKS){ ItemStack output = recipe.output.copy(); - this.slots.setStackInSlot(0, StackUtil.setStackSize(output, StackUtil.getStackSize(this.slots.getStackInSlot(0)))); + output.setCount(input.getCount()); + this.inv.setStackInSlot(0, output); this.conversionTime = 0; this.markDirty(); } @@ -87,12 +88,12 @@ public class TileEntityCompost extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean canInsert(int i, ItemStack stack, boolean automation){ return getRecipeForInput(stack) != null; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ + public boolean canExtract(int slot, ItemStack stack, boolean automation){ return getRecipeForInput(stack) == null; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 13469f62f..a6e217404 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.tile; +import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -19,8 +20,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraftforge.energy.IEnergyStorage; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityDirectionalBreaker extends TileEntityInventoryBase{ @@ -89,10 +88,10 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase{ float chance = WorldUtil.fireFakeHarvestEventsForDropChance(drops, this.world, coordsBlock); if(chance > 0 && this.world.rand.nextFloat() <= chance){ - if(WorldUtil.addToInventory(this.slots, drops, false)){ + if(StackUtil.canAddAll(this.inv, drops, false)){ this.world.playEvent(2001, coordsBlock, Block.getStateId(this.world.getBlockState(coordsBlock))); this.world.setBlockToAir(coordsBlock); - WorldUtil.addToInventory(this.slots, drops, true); + StackUtil.addAll(this.inv, drops, false); this.storage.extractEnergyInternal(ENERGY_USE, false); this.markDirty(); } @@ -103,17 +102,16 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return false; + public boolean canInsert(int slot, ItemStack stack, boolean automation){ + return !automation; } - @SideOnly(Side.CLIENT) public int getEnergyScaled(int i){ return this.storage.getEnergyStored()*i/this.storage.getMaxEnergyStored(); } @Override - public boolean canExtractItem(int slot, ItemStack stack){ + public boolean canExtract(int slot, ItemStack stack, boolean automation){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java index be8f88021..e4a7be709 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.energy.IEnergyStorage; @@ -34,12 +33,12 @@ public class TileEntityDisplayStand extends TileEntityInventoryBase implements I super.updateEntity(); if(!this.world.isRemote){ - if(StackUtil.isValid(this.slots.getStackInSlot(0)) && !this.isRedstonePowered){ - IDisplayStandItem item = this.convertToDisplayStandItem(this.slots.getStackInSlot(0).getItem()); + if(StackUtil.isValid(this.inv.getStackInSlot(0)) && !this.isRedstonePowered){ + IDisplayStandItem item = this.convertToDisplayStandItem(this.inv.getStackInSlot(0).getItem()); if(item != null){ - int energy = item.getUsePerTick(this.slots.getStackInSlot(0), this, this.ticksElapsed); + int energy = item.getUsePerTick(this.inv.getStackInSlot(0), this, this.ticksElapsed); if(this.storage.getEnergyStored() >= energy){ - if(item.update(this.slots.getStackInSlot(0), this, this.ticksElapsed)){ + if(item.update(this.inv.getStackInSlot(0), this, this.ticksElapsed)){ this.storage.extractEnergyInternal(energy, false); } } @@ -57,11 +56,6 @@ public class TileEntityDisplayStand extends TileEntityInventoryBase implements I return true; } - @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ - return true; - } - @Override public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ super.writeSyncableNBT(compound, type); @@ -87,11 +81,6 @@ public class TileEntityDisplayStand extends TileEntityInventoryBase implements I return null; } - @Override - public boolean canExtractItem(int index, ItemStack stack){ - return true; - } - @Override public CustomEnergyStorage getEnergyStorage(){ return this.storage; @@ -103,7 +92,7 @@ public class TileEntityDisplayStand extends TileEntityInventoryBase implements I } @Override - public int getMaxStackSizePerSlot(int slot){ + public int getMaxStackSize(int slot){ return 1; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 05f1d3abb..12a3ccb21 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -58,26 +58,24 @@ public class TileEntityDropper extends TileEntityInventoryBase{ } } - @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return true; - } private void doWork(){ ItemStack theoreticalRemove = this.removeFromInventory(false); if(StackUtil.isValid(theoreticalRemove)){ IBlockState state = this.world.getBlockState(this.pos); - WorldUtil.dropItemAtSide(WorldUtil.getDirectionByPistonRotation(state), this.world, this.pos, StackUtil.setStackSize(theoreticalRemove.copy(), 1)); + ItemStack drop = theoreticalRemove.copy(); + drop.setCount(1); + WorldUtil.dropItemAtSide(WorldUtil.getDirectionByPistonRotation(state), this.world, this.pos, drop); this.removeFromInventory(true); } } public ItemStack removeFromInventory(boolean actuallyDo){ - for(int i = 0; i < this.slots.getSlots(); i++){ - if(StackUtil.isValid(this.slots.getStackInSlot(i))){ - ItemStack slot = this.slots.getStackInSlot(i).copy(); + for(int i = 0; i < this.inv.getSlots(); i++){ + if(StackUtil.isValid(this.inv.getStackInSlot(i))){ + ItemStack slot = this.inv.getStackInSlot(i).copy(); if(actuallyDo){ - this.slots.setStackInSlot(i, StackUtil.addStackSize(this.slots.getStackInSlot(i), -1)); + this.inv.setStackInSlot(i, StackUtil.shrink(this.inv.getStackInSlot(i), 1)); this.markDirty(); } return slot; @@ -86,11 +84,6 @@ public class TileEntityDropper extends TileEntityInventoryBase{ return StackUtil.getEmpty(); } - @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return true; - } - @Override public boolean isRedstoneToggle(){ return true; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEmpowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEmpowerer.java index 17606f5b7..98f1ddb84 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEmpowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEmpowerer.java @@ -53,7 +53,7 @@ public class TileEntityEmpowerer extends TileEntityInventoryBase{ super.updateEntity(); if(!this.world.isRemote){ - List recipes = getRecipesForInput(this.slots.getStackInSlot(0)); + List recipes = getRecipesForInput(this.inv.getStackInSlot(0)); if(!recipes.isEmpty()){ for(EmpowererRecipe recipe : recipes){ TileEntityDisplayStand[] modifierStands = this.getFittingModifiers(recipe, recipe.time); @@ -67,7 +67,7 @@ public class TileEntityEmpowerer extends TileEntityInventoryBase{ stand.storage.extractEnergyInternal(recipe.energyPerStand/recipe.time, false); if(done){ - stand.slots.decrStackSize(0, 1); + stand.inv.getStackInSlot(0).shrink(1); } } @@ -78,7 +78,7 @@ public class TileEntityEmpowerer extends TileEntityInventoryBase{ if(done){ ((WorldServer)this.world).spawnParticle(EnumParticleTypes.END_ROD, false, this.pos.getX()+0.5, this.pos.getY()+1.1, this.pos.getZ()+0.5, 100, 0, 0, 0, 0.25D); - this.slots.setStackInSlot(0, recipe.output.copy()); + this.inv.setStackInSlot(0, recipe.output.copy()); this.markDirty(); this.processTime = 0; @@ -112,7 +112,7 @@ public class TileEntityEmpowerer extends TileEntityInventoryBase{ if(tile instanceof TileEntityDisplayStand){ TileEntityDisplayStand stand = (TileEntityDisplayStand)tile; - ItemStack standItem = stand.slots.getStackInSlot(0); + ItemStack standItem = stand.inv.getStackInSlot(0); int containPlace = ItemUtil.getPlaceAt(itemsStillNeeded, standItem, true); if(stand.storage.getEnergyStored() >= recipe.energyPerStand/powerDivider && containPlace != -1){ modifierStands[i] = stand; @@ -158,17 +158,17 @@ public class TileEntityEmpowerer extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ - return !getRecipesForInput(stack).isEmpty(); + public boolean canInsert(int index, ItemStack stack, boolean automation){ + return !automation || !getRecipesForInput(stack).isEmpty(); } @Override - public boolean canExtractItem(int index, ItemStack stack){ - return getRecipesForInput(stack).isEmpty(); + public boolean canExtract(int index, ItemStack stack, boolean automation){ + return !automation || getRecipesForInput(stack).isEmpty(); } @Override - public int getMaxStackSizePerSlot(int slot){ + public int getMaxStackSize(int slot){ return 1; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index a8be2bc31..a12be9d72 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -11,13 +11,12 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityEnergizer extends TileEntityInventoryBase{ @@ -44,13 +43,13 @@ public class TileEntityEnergizer extends TileEntityInventoryBase{ public void updateEntity(){ super.updateEntity(); if(!this.world.isRemote){ - if(StackUtil.isValid(this.slots.getStackInSlot(0)) && !StackUtil.isValid(this.slots.getStackInSlot(1))){ + if(StackUtil.isValid(this.inv.getStackInSlot(0)) && !StackUtil.isValid(this.inv.getStackInSlot(1))){ if(this.storage.getEnergyStored() > 0){ int received = 0; boolean canTakeUp = false; - if(this.slots.getStackInSlot(0).hasCapability(CapabilityEnergy.ENERGY, null)){ - IEnergyStorage cap = this.slots.getStackInSlot(0).getCapability(CapabilityEnergy.ENERGY, null); + if(this.inv.getStackInSlot(0).hasCapability(CapabilityEnergy.ENERGY, null)){ + IEnergyStorage cap = this.inv.getStackInSlot(0).getCapability(CapabilityEnergy.ENERGY, null); if(cap != null){ received = cap.receiveEnergy(this.storage.getEnergyStored(), false); canTakeUp = cap.getEnergyStored() >= cap.getMaxEnergyStored(); @@ -61,8 +60,8 @@ public class TileEntityEnergizer extends TileEntityInventoryBase{ } if(canTakeUp){ - this.slots.setStackInSlot(1, this.slots.getStackInSlot(0).copy()); - this.slots.setStackInSlot(0, StackUtil.addStackSize(this.slots.getStackInSlot(0), -1)); + this.inv.setStackInSlot(1, this.inv.getStackInSlot(0).copy()); + this.inv.setStackInSlot(0, StackUtil.shrink(this.inv.getStackInSlot(0), 1)); } } } @@ -74,16 +73,15 @@ public class TileEntityEnergizer extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == 0 && (stack.hasCapability(CapabilityEnergy.ENERGY, null)); + public boolean canInsert(int i, ItemStack stack, boolean automation){ + return !automation || (i == 0 && (stack.hasCapability(CapabilityEnergy.ENERGY, null))); } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return slot == 1; + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !EnchantmentHelper.hasBindingCurse(stack) && !automation || (slot == 1); } - @SideOnly(Side.CLIENT) public int getEnergyScaled(int i){ return this.storage.getEnergyStored()*i/this.storage.getMaxEnergyStored(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 6d6d3815e..1428f5017 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -17,8 +17,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityEnervator extends TileEntityInventoryBase implements ISharingEnergyProvider{ @@ -45,14 +43,14 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements ISha public void updateEntity(){ super.updateEntity(); if(!this.world.isRemote){ - if(StackUtil.isValid(this.slots.getStackInSlot(0)) && !StackUtil.isValid(this.slots.getStackInSlot(1))){ + if(StackUtil.isValid(this.inv.getStackInSlot(0)) && !StackUtil.isValid(this.inv.getStackInSlot(1))){ if(this.storage.getEnergyStored() < this.storage.getMaxEnergyStored()){ int extracted = 0; boolean canTakeUp = false; int maxExtract = this.storage.getMaxEnergyStored()-this.storage.getEnergyStored(); - if(this.slots.getStackInSlot(0).hasCapability(CapabilityEnergy.ENERGY, null)){ - IEnergyStorage cap = this.slots.getStackInSlot(0).getCapability(CapabilityEnergy.ENERGY, null); + if(this.inv.getStackInSlot(0).hasCapability(CapabilityEnergy.ENERGY, null)){ + IEnergyStorage cap = this.inv.getStackInSlot(0).getCapability(CapabilityEnergy.ENERGY, null); if(cap != null){ extracted = cap.extractEnergy(maxExtract, false); canTakeUp = cap.getEnergyStored() <= 0; @@ -63,8 +61,8 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements ISha } if(canTakeUp){ - this.slots.setStackInSlot(1, this.slots.getStackInSlot(0).copy()); - this.slots.setStackInSlot(0, StackUtil.addStackSize(this.slots.getStackInSlot(0), -1)); + this.inv.setStackInSlot(1, this.inv.getStackInSlot(0).copy()); + this.inv.getStackInSlot(0).shrink(1); } } } @@ -76,18 +74,17 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements ISha } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == 0 && (stack.hasCapability(CapabilityEnergy.ENERGY, null)); + public boolean canInsert(int i, ItemStack stack, boolean automation){ + return !automation || (i == 0 && (stack.hasCapability(CapabilityEnergy.ENERGY, null))); } - @SideOnly(Side.CLIENT) public int getEnergyScaled(int i){ return this.storage.getEnergyStored()*i/this.storage.getMaxEnergyStored(); } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return slot == 1; + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !automation || slot == 1; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFarmer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFarmer.java index 311868067..a4438d2e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFarmer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFarmer.java @@ -10,6 +10,11 @@ package de.ellpeck.actuallyadditions.mod.tile; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.farmer.FarmerResult; import de.ellpeck.actuallyadditions.api.farmer.IFarmerBehavior; @@ -24,12 +29,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.energy.IEnergyStorage; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer{ +public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer { private static final List SORTED_FARMER_BEHAVIORS = new ArrayList(); public final CustomEnergyStorage storage = new CustomEnergyStorage(100000, 1000, 0); @@ -40,17 +40,17 @@ public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer private int lastEnergy; - public TileEntityFarmer(){ + public TileEntityFarmer() { super(12, "farmer"); } @Override - public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type) { super.writeSyncableNBT(compound, type); - if(type != NBTType.SAVE_BLOCK){ + if (type != NBTType.SAVE_BLOCK) { compound.setInteger("WaitTime", this.waitTime); } - if(type == NBTType.SAVE_TILE){ + if (type == NBTType.SAVE_TILE) { compound.setInteger("CheckX", this.checkX); compound.setInteger("CheckY", this.checkY); } @@ -58,12 +58,12 @@ public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer } @Override - public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type) { super.readSyncableNBT(compound, type); - if(type != NBTType.SAVE_BLOCK){ + if (type != NBTType.SAVE_BLOCK) { this.waitTime = compound.getInteger("WaitTime"); } - if(type == NBTType.SAVE_TILE){ + if (type == NBTType.SAVE_TILE) { this.checkX = compound.getInteger("CheckX"); this.checkY = compound.getInteger("CheckY"); } @@ -71,52 +71,51 @@ public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer } @Override - public void updateEntity(){ + public void updateEntity() { super.updateEntity(); - if(!this.world.isRemote){ - if(!this.isRedstonePowered && this.storage.getEnergyStored() > 0){ - if(this.waitTime > 0){ + if (!this.world.isRemote) { + if (!this.isRedstonePowered && this.storage.getEnergyStored() > 0) { + if (this.waitTime > 0) { this.waitTime--; - if(this.waitTime <= 0){ + if (this.waitTime <= 0) { int radiusAroundCenter = 4; IBlockState state = this.world.getBlockState(this.pos); int meta = state.getBlock().getMetaFromState(state); - BlockPos center = this.pos.offset(EnumFacing.getHorizontal(meta), radiusAroundCenter+1); + BlockPos center = this.pos.offset(EnumFacing.getHorizontal(meta), radiusAroundCenter + 1); BlockPos query = center.add(this.checkX, 0, this.checkY); this.checkBehaviors(query); this.checkX++; - if(this.checkX > radiusAroundCenter){ + if (this.checkX > radiusAroundCenter) { this.checkX = -radiusAroundCenter; this.checkY++; - if(this.checkY > radiusAroundCenter){ + if (this.checkY > radiusAroundCenter) { this.checkY = -radiusAroundCenter; } } } - } - else{ + } else { this.waitTime = 5; } } - if(this.lastEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ + if (this.lastEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()) { this.lastEnergy = this.storage.getEnergyStored(); } } } - private void checkBehaviors(BlockPos query){ - if(SORTED_FARMER_BEHAVIORS.size() != ActuallyAdditionsAPI.FARMER_BEHAVIORS.size()){ + private void checkBehaviors(BlockPos query) { + if (SORTED_FARMER_BEHAVIORS.size() != ActuallyAdditionsAPI.FARMER_BEHAVIORS.size()) { SORTED_FARMER_BEHAVIORS.clear(); SORTED_FARMER_BEHAVIORS.addAll(ActuallyAdditionsAPI.FARMER_BEHAVIORS); - Collections.sort(SORTED_FARMER_BEHAVIORS, new Comparator(){ + Collections.sort(SORTED_FARMER_BEHAVIORS, new Comparator() { @Override - public int compare(IFarmerBehavior behavior1, IFarmerBehavior behavior2){ + public int compare(IFarmerBehavior behavior1, IFarmerBehavior behavior2) { Integer prio1 = behavior1.getPriority(); Integer prio2 = behavior2.getPriority(); return prio2.compareTo(prio1); @@ -124,21 +123,18 @@ public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer }); } - for(IFarmerBehavior behavior : SORTED_FARMER_BEHAVIORS){ + for (IFarmerBehavior behavior : SORTED_FARMER_BEHAVIORS) { FarmerResult harvestResult = behavior.tryHarvestPlant(this.world, query, this); - if(harvestResult == FarmerResult.STOP_PROCESSING) return; - else{ - for(int i = 0; i < this.slots.getSlots(); i++){ - ItemStack stack = this.slots.getStackInSlot(i); - if(StackUtil.isValid(stack)){ + if (harvestResult == FarmerResult.STOP_PROCESSING) return; + else { + for (int i = 0; i < this.inv.getSlots(); i++) { + ItemStack stack = this.inv.getStackInSlot(i); + if (StackUtil.isValid(stack)) { FarmerResult plantResult = behavior.tryPlantSeed(stack, this.world, query, this); - if(plantResult == FarmerResult.SUCCESS){ - this.slots.decrStackSize(i, 1); + if (plantResult == FarmerResult.SUCCESS) { + this.inv.getStackInSlot(i).shrink(1); return; - } - else if(plantResult == FarmerResult.STOP_PROCESSING){ - return; - } + } else if (plantResult == FarmerResult.STOP_PROCESSING) { return; } } } } @@ -146,68 +142,78 @@ public class TileEntityFarmer extends TileEntityInventoryBase implements IFarmer } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return i < 6; + public boolean canInsert(int i, ItemStack stack, boolean automation) { + return !automation || i < 6; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return slot >= 6; + public boolean canExtract(int slot, ItemStack stack, boolean automation) { + return !automation || slot >= 6; } @Override - public IEnergyStorage getEnergyStorage(EnumFacing facing){ + public IEnergyStorage getEnergyStorage(EnumFacing facing) { return this.storage; } @Override - public EnumFacing getOrientation(){ + public EnumFacing getOrientation() { IBlockState state = this.world.getBlockState(this.pos); return WorldUtil.getDirectionByPistonRotation(state); } @Override - public boolean addToSeedInventory(List stacks, boolean actuallyDo){ - return WorldUtil.addToInventory(this.slots, 0, 6, stacks, actuallyDo); - } - - @Override - public boolean addToOutputInventory(List stacks, boolean actuallyDo){ - return WorldUtil.addToInventory(this.slots, 6, 12, stacks, actuallyDo); - } - - @Override - public BlockPos getPosition(){ + public BlockPos getPosition() { return this.pos; } @Override - public int getX(){ + public int getX() { return this.pos.getX(); } @Override - public int getY(){ + public int getY() { return this.pos.getY(); } @Override - public int getZ(){ + public int getZ() { return this.pos.getZ(); } @Override - public World getWorldObject(){ + public World getWorldObject() { return this.world; } @Override - public void extractEnergy(int amount){ + public void extractEnergy(int amount) { this.storage.extractEnergyInternal(amount, false); } @Override - public int getEnergy(){ + public int getEnergy() { return this.storage.getEnergyStored(); } + + @Override + public boolean canAddToSeeds(List stacks) { + return StackUtil.canAddAll(inv, stacks, 0, 6, false); + } + + @Override + public boolean canAddToOutput(List stacks) { + return StackUtil.canAddAll(inv, stacks, 6, 12, false); + } + + @Override + public void addToSeeds(List stacks) { + StackUtil.addAll(inv, stacks, 0, 6, false); + } + + @Override + public void addToOutput(List stacks) { + StackUtil.addAll(inv, stacks, 6, 12, false); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index 040800cc3..a0bb98b82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -64,7 +64,7 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ currentTimer = MathHelper.clamp(++currentTimer, 0, 100); if(world.isRemote) return; int range = 5; - ItemStack stack = this.slots.getStackInSlot(0); + ItemStack stack = this.inv.getStackInSlot(0); if(!stack.isEmpty() && this.currentTimer >= TIME) { List animals = this.world.getEntitiesWithinAABB(EntityAnimal.class, new AxisAlignedBB(this.pos.getX()-range, this.pos.getY()-range, this.pos.getZ()-range, this.pos.getX()+range, this.pos.getY()+range, this.pos.getZ()+range)); this.currentAnimalAmount = animals.size(); @@ -85,13 +85,8 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return true; - } - - @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return false; + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !automation; } private static void feedAnimal(EntityAnimal animal){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index dc8e87ed2..15a7c7353 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.blocks.BlockFurnaceDouble; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.block.state.IBlockState; @@ -22,8 +22,6 @@ import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.energy.IEnergyStorage; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements IButtonReactor{ @@ -47,32 +45,32 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements super(4, "furnaceDouble"); } - public static void autoSplit(ItemStackHandlerCustom slots, int slot1, int slot2){ - ItemStack first = slots.getStackInSlot(slot1); - ItemStack second = slots.getStackInSlot(slot2); + public static void autoSplit(ItemStackHandlerAA inv, int slot1, int slot2){ + ItemStack first = inv.getStackInSlot(slot1); + ItemStack second = inv.getStackInSlot(slot2); if(StackUtil.isValid(first) || StackUtil.isValid(second)){ ItemStack toSplit = StackUtil.getEmpty(); - if(!StackUtil.isValid(first) && StackUtil.isValid(second) && StackUtil.getStackSize(second) > 1){ + if(!StackUtil.isValid(first) && StackUtil.isValid(second) && second.getCount() > 1){ toSplit = second; } - else if(!StackUtil.isValid(second) && StackUtil.isValid(first) && StackUtil.getStackSize(first) > 1){ + else if(!StackUtil.isValid(second) && StackUtil.isValid(first) && first.getCount() > 1){ toSplit = first; } else if(ItemUtil.canBeStacked(first, second)){ - if(StackUtil.getStackSize(first) < first.getMaxStackSize() || StackUtil.getStackSize(second) < second.getMaxStackSize()){ - if(!((StackUtil.getStackSize(first) <= StackUtil.getStackSize(second)+1 && StackUtil.getStackSize(first) >= StackUtil.getStackSize(second)-1) || (StackUtil.getStackSize(second) <= StackUtil.getStackSize(first)+1 && StackUtil.getStackSize(second) >= StackUtil.getStackSize(first)-1))){ + if(first.getCount() < first.getMaxStackSize() || second.getCount() < second.getMaxStackSize()){ + if(!((first.getCount() <= second.getCount()+1 && first.getCount() >= second.getCount()-1) || (second.getCount() <= first.getCount()+1 && second.getCount() >= first.getCount()-1))){ toSplit = first; - toSplit = StackUtil.addStackSize(toSplit, StackUtil.getStackSize(second)); + toSplit.grow(second.getCount()); } } } if(StackUtil.isValid(toSplit)){ ItemStack splitFirst = toSplit.copy(); - ItemStack secondSplit = splitFirst.splitStack(StackUtil.getStackSize(splitFirst)/2); - slots.setStackInSlot(slot1, StackUtil.validateCheck(splitFirst)); - slots.setStackInSlot(slot2, StackUtil.validateCheck(secondSplit)); + ItemStack secondSplit = splitFirst.splitStack(splitFirst.getCount()/2); + inv.setStackInSlot(slot1, splitFirst); + inv.setStackInSlot(slot2, secondSplit); } } } @@ -104,7 +102,7 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements super.updateEntity(); if(!this.world.isRemote){ if(this.isAutoSplit){ - autoSplit(this.slots, SLOT_INPUT_1, SLOT_INPUT_2); + autoSplit(this.inv, SLOT_INPUT_1, SLOT_INPUT_2); } boolean smelted = false; @@ -161,15 +159,15 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && StackUtil.isValid(FurnaceRecipes.instance().getSmeltingResult(stack)); + public boolean canInsert(int i, ItemStack stack, boolean automation){ + return !automation || ((i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && StackUtil.isValid(FurnaceRecipes.instance().getSmeltingResult(stack))); } public boolean canSmeltOn(int theInput, int theOutput){ - if(StackUtil.isValid(this.slots.getStackInSlot(theInput))){ - ItemStack output = FurnaceRecipes.instance().getSmeltingResult(this.slots.getStackInSlot(theInput)); + if(StackUtil.isValid(this.inv.getStackInSlot(theInput))){ + ItemStack output = FurnaceRecipes.instance().getSmeltingResult(this.inv.getStackInSlot(theInput)); if(StackUtil.isValid(output)){ - if(!StackUtil.isValid(this.slots.getStackInSlot(theOutput)) || (this.slots.getStackInSlot(theOutput).isItemEqual(output) && StackUtil.getStackSize(this.slots.getStackInSlot(theOutput)) <= this.slots.getStackInSlot(theOutput).getMaxStackSize()-StackUtil.getStackSize(output))){ + if(!StackUtil.isValid(this.inv.getStackInSlot(theOutput)) || (this.inv.getStackInSlot(theOutput).isItemEqual(output) && this.inv.getStackInSlot(theOutput).getCount() <= this.inv.getStackInSlot(theOutput).getMaxStackSize()-output.getCount())){ return true; } } @@ -179,30 +177,28 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements } public void finishBurning(int theInput, int theOutput){ - ItemStack output = FurnaceRecipes.instance().getSmeltingResult(this.slots.getStackInSlot(theInput)); - if(!StackUtil.isValid(this.slots.getStackInSlot(theOutput))){ - this.slots.setStackInSlot(theOutput, output.copy()); + ItemStack output = FurnaceRecipes.instance().getSmeltingResult(this.inv.getStackInSlot(theInput)); + if(!StackUtil.isValid(this.inv.getStackInSlot(theOutput))){ + this.inv.setStackInSlot(theOutput, output.copy()); } - else if(this.slots.getStackInSlot(theOutput).getItem() == output.getItem()){ - this.slots.setStackInSlot(theOutput, StackUtil.addStackSize(this.slots.getStackInSlot(theOutput), StackUtil.getStackSize(output))); + else if(this.inv.getStackInSlot(theOutput).getItem() == output.getItem()){ + this.inv.getStackInSlot(theOutput).grow(output.getCount()); } - this.slots.setStackInSlot(theInput, StackUtil.addStackSize(this.slots.getStackInSlot(theInput), -1)); + this.inv.getStackInSlot(theInput).shrink(1); } - @SideOnly(Side.CLIENT) public int getFirstTimeToScale(int i){ return this.firstSmeltTime*i/SMELT_TIME; } - @SideOnly(Side.CLIENT) public int getSecondTimeToScale(int i){ return this.secondSmeltTime*i/SMELT_TIME; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return slot == SLOT_OUTPUT_1 || slot == SLOT_OUTPUT_2; + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !automation || (slot == SLOT_OUTPUT_1 || slot == SLOT_OUTPUT_2); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java index 623156e8a..44cdc0aab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.AwfulUtil; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.world.WorldServer; @@ -24,8 +23,6 @@ import net.minecraft.world.storage.loot.ILootContainer; import net.minecraft.world.storage.loot.LootContext; import net.minecraft.world.storage.loot.LootTable; -import java.util.Random; - public class TileEntityGiantChest extends TileEntityInventoryBase implements IButtonReactor, ILootContainer{ public ResourceLocation lootTable; @@ -56,16 +53,6 @@ public class TileEntityGiantChest extends TileEntityInventoryBase implements IBu } } - @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return true; - } - - @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return true; - } - @Override public void onButtonPressed(int buttonID, EntityPlayer player){ if(player != null && this.pos != null){ @@ -99,7 +86,7 @@ public class TileEntityGiantChest extends TileEntityInventoryBase implements IBu if(player != null){ builder.withLuck(player.getLuck()); } - AwfulUtil.fillInventory(table, this.slots, new Random(), builder.build()); + AwfulUtil.fillInventory(table, this.inv, world.rand, builder.build()); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 268a14ad1..d6b6e40dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.tile; +import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; import de.ellpeck.actuallyadditions.mod.blocks.BlockFurnaceDouble; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; @@ -24,8 +25,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; import net.minecraftforge.energy.IEnergyStorage; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityGrinder extends TileEntityInventoryBase implements IButtonReactor{ @@ -83,7 +82,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IButto super.updateEntity(); if(!this.world.isRemote){ if(this.isDouble && this.isAutoSplit){ - TileEntityFurnaceDouble.autoSplit(this.slots, SLOT_INPUT_1, SLOT_INPUT_2); + TileEntityFurnaceDouble.autoSplit(this.inv, SLOT_INPUT_1, SLOT_INPUT_2); } boolean crushed = false; @@ -108,7 +107,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IButto } this.storage.extractEnergyInternal(ENERGY_USE, false); } - crushed = true; + crushed = storage.getEnergyStored() >= ENERGY_USE; } else{ this.firstCrushTime = 0; @@ -127,7 +126,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IButto } this.storage.extractEnergyInternal(ENERGY_USE, false); } - crushed = true; + crushed = storage.getEnergyStored() >= ENERGY_USE; } else{ this.secondCrushTime = 0; @@ -157,14 +156,16 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IButto } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && CrusherRecipeRegistry.getRecipeFromInput(stack) != null; + public boolean canInsert(int i, ItemStack stack, boolean automation){ + return !automation || ((i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && CrusherRecipeRegistry.getRecipeFromInput(stack) != null); } public boolean canCrushOn(int theInput, int theFirstOutput, int theSecondOutput){ - if(StackUtil.isValid(this.slots.getStackInSlot(theInput))){ - ItemStack outputOne = CrusherRecipeRegistry.getOutputOnes(this.slots.getStackInSlot(theInput)); - ItemStack outputTwo = CrusherRecipeRegistry.getOutputTwos(this.slots.getStackInSlot(theInput)); + if(StackUtil.isValid(this.inv.getStackInSlot(theInput))){ + CrusherRecipe recipe = CrusherRecipeRegistry.getRecipeFromInput(inv.getStackInSlot(theInput)); + if(recipe == null) return false; + ItemStack outputOne = recipe.getOutputOne(); + ItemStack outputTwo = recipe.getOutputTwo(); if(StackUtil.isValid(outputOne)){ if(outputOne.getItemDamage() == Util.WILDCARD){ outputOne.setItemDamage(0); @@ -172,7 +173,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IButto if(StackUtil.isValid(outputTwo) && outputTwo.getItemDamage() == Util.WILDCARD){ outputTwo.setItemDamage(0); } - if((!StackUtil.isValid(this.slots.getStackInSlot(theFirstOutput)) || (this.slots.getStackInSlot(theFirstOutput).isItemEqual(outputOne) && StackUtil.getStackSize(this.slots.getStackInSlot(theFirstOutput)) <= this.slots.getStackInSlot(theFirstOutput).getMaxStackSize()-StackUtil.getStackSize(outputOne))) && (!StackUtil.isValid(outputTwo) || (!StackUtil.isValid(this.slots.getStackInSlot(theSecondOutput)) || (this.slots.getStackInSlot(theSecondOutput).isItemEqual(outputTwo) && StackUtil.getStackSize(this.slots.getStackInSlot(theSecondOutput)) <= this.slots.getStackInSlot(theSecondOutput).getMaxStackSize()-StackUtil.getStackSize(outputTwo))))){ + if((!StackUtil.isValid(this.inv.getStackInSlot(theFirstOutput)) || (this.inv.getStackInSlot(theFirstOutput).isItemEqual(outputOne) && this.inv.getStackInSlot(theFirstOutput).getCount() <= this.inv.getStackInSlot(theFirstOutput).getMaxStackSize()-outputOne.getCount())) && (!StackUtil.isValid(outputTwo) || (!StackUtil.isValid(this.inv.getStackInSlot(theSecondOutput)) || (this.inv.getStackInSlot(theSecondOutput).isItemEqual(outputTwo) && this.inv.getStackInSlot(theSecondOutput).getCount() <= this.inv.getStackInSlot(theSecondOutput).getMaxStackSize()-outputTwo.getCount())))){ return true; } } @@ -185,56 +186,55 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IButto } public void finishCrushing(int theInput, int theFirstOutput, int theSecondOutput){ - ItemStack outputOne = CrusherRecipeRegistry.getOutputOnes(this.slots.getStackInSlot(theInput)); + CrusherRecipe recipe = CrusherRecipeRegistry.getRecipeFromInput(inv.getStackInSlot(theInput)); + if(recipe == null) return; + ItemStack outputOne = recipe.getOutputOne(); if(StackUtil.isValid(outputOne)){ if(outputOne.getItemDamage() == Util.WILDCARD){ outputOne.setItemDamage(0); } - if(!StackUtil.isValid(this.slots.getStackInSlot(theFirstOutput))){ - this.slots.setStackInSlot(theFirstOutput, outputOne.copy()); + if(!StackUtil.isValid(this.inv.getStackInSlot(theFirstOutput))){ + this.inv.setStackInSlot(theFirstOutput, outputOne.copy()); } - else if(this.slots.getStackInSlot(theFirstOutput).getItem() == outputOne.getItem()){ - this.slots.setStackInSlot(theFirstOutput, StackUtil.addStackSize(this.slots.getStackInSlot(theFirstOutput), StackUtil.getStackSize(outputOne))); + else if(this.inv.getStackInSlot(theFirstOutput).getItem() == outputOne.getItem()){ + this.inv.setStackInSlot(theFirstOutput, StackUtil.grow(this.inv.getStackInSlot(theFirstOutput), outputOne.getCount())); } } - ItemStack outputTwo = CrusherRecipeRegistry.getOutputTwos(this.slots.getStackInSlot(theInput)); + ItemStack outputTwo = recipe.getOutputTwo(); if(StackUtil.isValid(outputTwo)){ if(outputTwo.getItemDamage() == Util.WILDCARD){ outputTwo.setItemDamage(0); } int rand = this.world.rand.nextInt(100)+1; - if(rand <= CrusherRecipeRegistry.getOutputTwoChance(this.slots.getStackInSlot(theInput))){ - if(!StackUtil.isValid(this.slots.getStackInSlot(theSecondOutput))){ - this.slots.setStackInSlot(theSecondOutput, outputTwo.copy()); + if(rand <= recipe.getSecondChance()){ + if(!StackUtil.isValid(this.inv.getStackInSlot(theSecondOutput))){ + this.inv.setStackInSlot(theSecondOutput, outputTwo.copy()); } - else if(this.slots.getStackInSlot(theSecondOutput).getItem() == outputTwo.getItem()){ - this.slots.setStackInSlot(theSecondOutput, StackUtil.addStackSize(this.slots.getStackInSlot(theSecondOutput), StackUtil.getStackSize(outputTwo))); + else if(this.inv.getStackInSlot(theSecondOutput).getItem() == outputTwo.getItem()){ + this.inv.setStackInSlot(theSecondOutput, StackUtil.grow(this.inv.getStackInSlot(theSecondOutput), outputTwo.getCount())); } } } - this.slots.setStackInSlot(theInput, StackUtil.addStackSize(this.slots.getStackInSlot(theInput), -1)); + this.inv.getStackInSlot(theInput).shrink(1); } - @SideOnly(Side.CLIENT) public int getEnergyScaled(int i){ return this.storage.getEnergyStored()*i/this.storage.getMaxEnergyStored(); } - @SideOnly(Side.CLIENT) public int getFirstTimeToScale(int i){ return this.firstCrushTime*i/this.getMaxCrushTime(); } - @SideOnly(Side.CLIENT) public int getSecondTimeToScale(int i){ return this.secondCrushTime*i/this.getMaxCrushTime(); } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return slot == SLOT_OUTPUT_1_1 || slot == SLOT_OUTPUT_1_2 || slot == SLOT_OUTPUT_2_1 || slot == SLOT_OUTPUT_2_2; + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !automation || (slot == SLOT_OUTPUT_1_1 || slot == SLOT_OUTPUT_1_2 || slot == SLOT_OUTPUT_2_1 || slot == SLOT_OUTPUT_2_2); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 04f26cc55..8b9bb0df6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -33,7 +33,7 @@ import java.util.concurrent.ConcurrentHashMap; public class TileEntityInputter extends TileEntityInventoryBase implements IButtonReactor, INumberReactor{ public static final int OKAY_BUTTON_ID = 133; - private final SlotlessableItemHandlerWrapper wrapper = new SlotlessableItemHandlerWrapper(this.slots, null); + private final SlotlessableItemHandlerWrapper wrapper = new SlotlessableItemHandlerWrapper(this.inv, null); public int sideToPut = -1; public int slotToPutStart; public int slotToPutEnd; @@ -95,7 +95,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt } private boolean newPutting(){ - if(!this.isAdvanced || this.rightFilter.check(this.slots.getStackInSlot(0))){ + if(!this.isAdvanced || this.rightFilter.check(this.inv.getStackInSlot(0))){ for(EnumFacing side : this.placeToPut.keySet()){ WorldUtil.doItemInteraction(this.wrapper, this.placeToPut.get(side), Integer.MAX_VALUE, 0, 1, this.slotToPutStart, this.slotToPutEnd, null); @@ -281,11 +281,11 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt if(!this.isRedstonePowered){ if(this.ticksElapsed%30 == 0){ if(!(this.sideToPull == this.sideToPut && this.slotToPullStart == this.slotToPutStart && this.slotToPullEnd == this.slotToPutEnd)){ - if(!StackUtil.isValid(this.slots.getStackInSlot(0)) && this.sideToPull != -1 && this.placeToPull != null){ + if(!StackUtil.isValid(this.inv.getStackInSlot(0)) && this.sideToPull != -1 && this.placeToPull != null){ this.newPulling(); } - if(StackUtil.isValid(this.slots.getStackInSlot(0)) && this.sideToPut != -1 && this.placeToPut != null){ + if(StackUtil.isValid(this.inv.getStackInSlot(0)) && this.sideToPut != -1 && this.placeToPut != null){ this.newPutting(); } } @@ -307,12 +307,12 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == 0; + public boolean canInsert(int i, ItemStack stack, boolean automation){ + return !automation || i == 0; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return slot == 0; + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !automation || slot == 0; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 95efe296f..73a1b7407 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -20,44 +20,22 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; -public abstract class TileEntityInventoryBase extends TileEntityBase{ +public abstract class TileEntityInventoryBase extends TileEntityBase { - public final ItemStackHandlerCustom slots; + public final ItemStackHandlerAA inv; - public TileEntityInventoryBase(int slots, String name){ + public TileEntityInventoryBase(int slots, String name) { super(name); - - this.slots = new ItemStackHandlerCustom(slots){ - @Override - public boolean canInsert(ItemStack stack, int slot){ - return TileEntityInventoryBase.this.isItemValidForSlot(slot, stack); - } - - @Override - public boolean canExtract(ItemStack stack, int slot){ - return TileEntityInventoryBase.this.canExtractItem(slot, stack); - } - - @Override - public int getSlotLimit(int slot){ - return TileEntityInventoryBase.this.getMaxStackSizePerSlot(slot); - } - - @Override - protected void onContentsChanged(int slot){ - super.onContentsChanged(slot); - TileEntityInventoryBase.this.markDirty(); - } - }; + inv = new TileStackHandler(slots); } - public static void saveSlots(IItemHandler slots, NBTTagCompound compound){ - if(slots != null && slots.getSlots() > 0){ + public static void saveSlots(IItemHandler slots, NBTTagCompound compound) { + if (slots != null && slots.getSlots() > 0) { NBTTagList tagList = new NBTTagList(); - for(int i = 0; i < slots.getSlots(); i++){ + for (int i = 0; i < slots.getSlots(); i++) { ItemStack slot = slots.getStackInSlot(i); NBTTagCompound tagCompound = new NBTTagCompound(); - if(StackUtil.isValid(slot)){ + if (StackUtil.isValid(slot)) { slot.writeToNBT(tagCompound); } tagList.appendTag(tagCompound); @@ -66,10 +44,10 @@ public abstract class TileEntityInventoryBase extends TileEntityBase{ } } - public static void loadSlots(IItemHandlerModifiable slots, NBTTagCompound compound){ - if(slots != null && slots.getSlots() > 0){ + public static void loadSlots(IItemHandlerModifiable slots, NBTTagCompound compound) { + if (slots != null && slots.getSlots() > 0) { NBTTagList tagList = compound.getTagList("Items", 10); - for(int i = 0; i < slots.getSlots(); i++){ + for (int i = 0; i < slots.getSlots(); i++) { NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); slots.setStackInSlot(i, tagCompound != null && tagCompound.hasKey("id") ? new ItemStack(tagCompound) : StackUtil.getEmpty()); } @@ -77,53 +55,81 @@ public abstract class TileEntityInventoryBase extends TileEntityBase{ } @Override - public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type) { super.writeSyncableNBT(compound, type); - if(type == NBTType.SAVE_TILE || (type == NBTType.SYNC && this.shouldSyncSlots())){ - saveSlots(this.slots, compound); + if (type == NBTType.SAVE_TILE || (type == NBTType.SYNC && this.shouldSyncSlots())) { + saveSlots(this.inv, compound); } } @Override - public IItemHandler getItemHandler(EnumFacing facing){ - return this.slots; + public IItemHandler getItemHandler(EnumFacing facing) { + return this.inv; } - public boolean isItemValidForSlot(int slot, ItemStack stack){ + public boolean canInsert(int slot, ItemStack stack, boolean automation) { return true; } - public boolean canExtractItem(int slot, ItemStack stack){ + public boolean canExtract(int slot, ItemStack stack, boolean automation) { return true; } - public int getMaxStackSizePerSlot(int slot){ + public int getMaxStackSize(int slot) { return 64; } - public boolean shouldSyncSlots(){ + public boolean shouldSyncSlots() { return false; } @Override - public void markDirty(){ + public void markDirty() { super.markDirty(); - if(this.shouldSyncSlots()){ + if (this.shouldSyncSlots()) { this.sendUpdate(); } } @Override - public int getComparatorStrength(){ - return ItemHandlerHelper.calcRedstoneFromInventory(this.slots); + public int getComparatorStrength() { + return ItemHandlerHelper.calcRedstoneFromInventory(this.inv); } @Override - public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type) { super.readSyncableNBT(compound, type); - if(type == NBTType.SAVE_TILE || (type == NBTType.SYNC && this.shouldSyncSlots())){ - loadSlots(this.slots, compound); + if (type == NBTType.SAVE_TILE || (type == NBTType.SYNC && this.shouldSyncSlots())) { + loadSlots(this.inv, compound); } } + + protected class TileStackHandler extends ItemStackHandlerAA { + + protected TileStackHandler(int slots) { + super(slots); + } + + @Override + public boolean canAccept(int slot, ItemStack stack, boolean fromAutomation) { + return TileEntityInventoryBase.this.canInsert(slot, stack, fromAutomation); + } + + @Override + public boolean canRemove(int slot, boolean byAutomation) { + return TileEntityInventoryBase.this.canExtract(slot, this.getStackInSlot(slot), byAutomation); + } + + @Override + public int getSlotLimit(int slot) { + return TileEntityInventoryBase.this.getMaxStackSize(slot); + } + + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + TileEntityInventoryBase.this.markDirty(); + } + }; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index 6b4fbf16e..52c9caed9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -77,11 +77,11 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase{ public void updateEntity(){ super.updateEntity(); if(!this.world.isRemote){ - ItemStack input = this.slots.getStackInSlot(SLOT_INPUT); - if(!StackUtil.isValid(this.slots.getStackInSlot(SLOT_OUTPUT)) && canBeRepaired(input)){ + ItemStack input = this.inv.getStackInSlot(SLOT_INPUT); + if(!StackUtil.isValid(this.inv.getStackInSlot(SLOT_OUTPUT)) && canBeRepaired(input)){ if(input.getItemDamage() <= 0){ - this.slots.setStackInSlot(SLOT_OUTPUT, input.copy()); - this.slots.setStackInSlot(SLOT_INPUT, StackUtil.getEmpty()); + this.inv.setStackInSlot(SLOT_OUTPUT, input.copy()); + this.inv.setStackInSlot(SLOT_INPUT, StackUtil.getEmpty()); this.nextRepairTick = 0; } else{ @@ -114,8 +114,8 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == SLOT_INPUT; + public boolean canInsert(int i, ItemStack stack, boolean automation){ + return !automation || i == SLOT_INPUT; } @SideOnly(Side.CLIENT) @@ -123,17 +123,16 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase{ return this.storage.getEnergyStored()*i/this.storage.getMaxEnergyStored(); } - @SideOnly(Side.CLIENT) public int getItemDamageToScale(int i){ - if(StackUtil.isValid(this.slots.getStackInSlot(SLOT_INPUT))){ - return (this.slots.getStackInSlot(SLOT_INPUT).getMaxDamage()-this.slots.getStackInSlot(SLOT_INPUT).getItemDamage())*i/this.slots.getStackInSlot(SLOT_INPUT).getMaxDamage(); + if(StackUtil.isValid(this.inv.getStackInSlot(SLOT_INPUT))){ + return (this.inv.getStackInSlot(SLOT_INPUT).getMaxDamage()-this.inv.getStackInSlot(SLOT_INPUT).getItemDamage())*i/this.inv.getStackInSlot(SLOT_INPUT).getMaxDamage(); } return 0; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return slot == SLOT_OUTPUT; + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !automation || slot == SLOT_OUTPUT; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 0143eed07..df8d07254 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -166,7 +166,7 @@ public abstract class TileEntityLaserRelay extends TileEntityInventoryBase{ } public int getMaxRange(){ - ItemStack upgrade = this.slots.getStackInSlot(0); + ItemStack upgrade = this.inv.getStackInSlot(0); if(StackUtil.isValid(upgrade) && upgrade.getItem() == InitItems.itemLaserUpgradeRange){ return MAX_DISTANCE_RANGED; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 2d54968f6..74c0586d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; -import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerCustom; +import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.compat.SlotlessableItemHandlerWrapper; import net.minecraft.entity.player.EntityPlayer; @@ -86,14 +86,14 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem private void addWhitelistSmart(boolean output, ItemStack stack){ FilterSettings usedSettings = output ? this.rightFilter : this.leftFilter; ItemStack copy = stack.copy(); - copy = StackUtil.setStackSize(copy, 1); + copy.setCount(1); if(!FilterSettings.check(copy, usedSettings.filterInventory, true, usedSettings.respectMeta, usedSettings.respectNBT, usedSettings.respectMod, usedSettings.respectOredict)){ for(int k = 0; k < usedSettings.filterInventory.getSlots(); k++){ ItemStack slot = usedSettings.filterInventory.getStackInSlot(k); if(StackUtil.isValid(slot)){ if(SlotFilter.isFilter(slot)){ - ItemStackHandlerCustom inv = new ItemStackHandlerCustom(ContainerFilter.SLOT_AMOUNT); + ItemStackHandlerAA inv = new ItemStackHandlerAA(ContainerFilter.SLOT_AMOUNT); ItemDrill.loadSlotsFromNBT(inv, slot); boolean did = false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 83c9b6bd5..6233f7021 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -34,7 +34,7 @@ import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.oredict.OreDictionary; -public class TileEntityMiner extends TileEntityInventoryBase implements IButtonReactor, IEnergyDisplay{ +public class TileEntityMiner extends TileEntityInventoryBase implements IButtonReactor, IEnergyDisplay { public static final int ENERGY_USE_PER_BLOCK = 650; public static final int DEFAULT_RANGE = 2; @@ -49,29 +49,29 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IButtonR private int oldCheckY; private int oldCheckZ; - public TileEntityMiner(){ + public TileEntityMiner() { super(9, "miner"); } @Override - public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type) { super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); - if(type != NBTType.SAVE_BLOCK){ + if (type != NBTType.SAVE_BLOCK) { compound.setInteger("CheckX", this.checkX); compound.setInteger("CheckY", this.checkY); compound.setInteger("CheckZ", this.checkZ); } - if(type != NBTType.SAVE_BLOCK || this.onlyMineOres){ + if (type != NBTType.SAVE_BLOCK || this.onlyMineOres) { compound.setBoolean("OnlyOres", this.onlyMineOres); } } @Override - public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type) { super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); - if(type != NBTType.SAVE_BLOCK){ + if (type != NBTType.SAVE_BLOCK) { this.checkX = compound.getInteger("CheckX"); this.checkY = compound.getInteger("CheckY"); this.checkZ = compound.getInteger("CheckZ"); @@ -80,26 +80,26 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IButtonR } @Override - public void updateEntity(){ + public void updateEntity() { super.updateEntity(); - if(!this.world.isRemote){ + if (!this.world.isRemote) { - if(!this.isRedstonePowered && this.ticksElapsed%5 == 0){ - if(this.checkY != 0){ + if (!this.isRedstonePowered && this.ticksElapsed % 5 == 0) { + if (this.checkY != 0) { int range = TileEntityPhantomface.upgradeRange(DEFAULT_RANGE, this.world, this.pos); - if(this.checkY < 0){ - this.checkY = this.pos.getY()-1; + if (this.checkY < 0) { + this.checkY = this.pos.getY() - 1; this.checkX = -range; this.checkZ = -range; } - if(this.checkY > 0){ - if(this.mine()){ + if (this.checkY > 0) { + if (this.mine()) { this.checkX++; - if(this.checkX > range){ + if (this.checkX > range) { this.checkX = -range; this.checkZ++; - if(this.checkZ > range){ + if (this.checkZ > range) { this.checkZ = -range; this.checkY--; } @@ -109,7 +109,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IButtonR } } - if((this.oldEnergy != this.storage.getEnergyStored() || this.oldCheckX != this.checkX || this.oldCheckY != this.checkY || this.oldCheckZ != this.checkZ) && this.sendUpdateWithInterval()){ + if ((this.oldEnergy != this.storage.getEnergyStored() || this.oldCheckX != this.checkX || this.oldCheckY != this.checkY || this.oldCheckZ != this.checkZ) && this.sendUpdateWithInterval()) { this.oldEnergy = this.storage.getEnergyStored(); this.oldCheckX = this.checkX; this.oldCheckY = this.checkY; @@ -118,32 +118,31 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IButtonR } } - private boolean mine(){ - int actualUse = ENERGY_USE_PER_BLOCK*(this.onlyMineOres ? 3 : 1); - if(this.storage.getEnergyStored() >= actualUse){ - BlockPos pos = new BlockPos(this.pos.getX()+this.checkX, this.checkY, this.pos.getZ()+this.checkZ); + private boolean mine() { + int actualUse = ENERGY_USE_PER_BLOCK * (this.onlyMineOres ? 3 : 1); + if (this.storage.getEnergyStored() >= actualUse) { + BlockPos pos = new BlockPos(this.pos.getX() + this.checkX, this.checkY, this.pos.getZ() + this.checkZ); IBlockState state = this.world.getBlockState(pos); Block block = state.getBlock(); - ItemStack stack = block.getPickBlock(state, new RayTraceResult(Type.BLOCK, new Vec3d(0,0,0), EnumFacing.DOWN, pos), world, pos, FakePlayerFactory.getMinecraft((WorldServer) world)); - if(!block.isAir(this.world.getBlockState(pos), this.world, pos)){ - if(block.getHarvestLevel(this.world.getBlockState(pos)) <= ItemDrill.HARVEST_LEVEL && state.getBlockHardness(this.world, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, stack)){ - NonNullList drops = NonNullList.create(); + ItemStack stack = block.getPickBlock(state, new RayTraceResult(Type.BLOCK, new Vec3d(0, 0, 0), EnumFacing.DOWN, pos), world, pos, FakePlayerFactory.getMinecraft((WorldServer) world)); + if (!block.isAir(this.world.getBlockState(pos), this.world, pos)) { + if (block.getHarvestLevel(this.world.getBlockState(pos)) <= ItemDrill.HARVEST_LEVEL && state.getBlockHardness(this.world, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, stack)) { + NonNullList drops = NonNullList.create(); block.getDrops(drops, world, pos, state, 0); float chance = WorldUtil.fireFakeHarvestEventsForDropChance(drops, this.world, pos); - if(chance > 0 && this.world.rand.nextFloat() <= chance){ - if(WorldUtil.addToInventory(this.slots, drops, false)){ + if (chance > 0 && this.world.rand.nextFloat() <= chance) { + if (StackUtil.canAddAll(inv, drops, false)) { this.world.playEvent(2001, pos, Block.getStateId(this.world.getBlockState(pos))); this.world.setBlockToAir(pos); - WorldUtil.addToInventory(this.slots, drops, true); + StackUtil.addAll(inv, drops); this.markDirty(); this.storage.extractEnergyInternal(actualUse, false); this.shootParticles(pos.getX(), pos.getY(), pos.getZ()); - } - else{ + } else { return false; } } @@ -154,28 +153,23 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IButtonR return false; } - private boolean isMinable(Block block, ItemStack stack){ - if(block != null){ - if(!this.isBlacklisted(block)){ - if(!this.onlyMineOres){ + private boolean isMinable(Block block, ItemStack stack) { + if (block != null) { + if (!this.isBlacklisted(block)) { + if (!this.onlyMineOres) { return true; - } - else{ - if(StackUtil.isValid(stack)){ + } else { + if (StackUtil.isValid(stack)) { int[] ids = OreDictionary.getOreIDs(stack); - for(int id : ids){ + for (int id : ids) { String name = OreDictionary.getOreName(id); - if(name.startsWith("ore") || name.startsWith("denseore")){ - return true; - } + if (name.startsWith("ore") || name.startsWith("denseore")) { return true; } } String reg = block.getRegistryName().toString(); - if(!reg.isEmpty()){ - for(String string : ConfigStringListValues.MINER_EXTRA_WHITELIST.getValue()){ - if(reg.equals(string)){ - return true; - } + if (!reg.isEmpty()) { + for (String string : ConfigStringListValues.MINER_EXTRA_WHITELIST.getValue()) { + if (reg.equals(string)) { return true; } } } } @@ -186,39 +180,36 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IButtonR return false; } - private void shootParticles(int endX, int endY, int endZ){ - AssetUtil.spawnLaserWithTimeServer(this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{65F/255F, 150F/255F, 2F/255F}, 10, 120, 0.1F, 0.8F); + private void shootParticles(int endX, int endY, int endZ) { + AssetUtil.spawnLaserWithTimeServer(this.world, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[] { 65F / 255F, 150F / 255F, 2F / 255F }, 10, 120, 0.1F, 0.8F); } - private boolean isBlacklisted(Block block){ + private boolean isBlacklisted(Block block) { String reg = block.getRegistryName().toString(); - if(!reg.isEmpty()){ - for(String string : ConfigStringListValues.MINER_BLACKLIST.getValue()){ - if(reg.equals(string)){ - return true; - } + if (!reg.isEmpty()) { + for (String string : ConfigStringListValues.MINER_BLACKLIST.getValue()) { + if (reg.equals(string)) { return true; } } } return false; } @Override - public boolean isItemValidForSlot(int slot, ItemStack stack){ - return false; + public boolean canInsert(int slot, ItemStack stack, boolean fromAutomation) { + return !fromAutomation; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ + public boolean canExtract(int slot, ItemStack stack, boolean byAutomation) { return true; } @Override - public void onButtonPressed(int buttonID, EntityPlayer player){ - if(buttonID == 0){ + public void onButtonPressed(int buttonID, EntityPlayer player) { + if (buttonID == 0) { this.onlyMineOres = !this.onlyMineOres; this.sendUpdate(); - } - else if(buttonID == 1){ + } else if (buttonID == 1) { this.checkX = 0; this.checkY = -1; this.checkZ = 0; @@ -226,17 +217,17 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IButtonR } @Override - public CustomEnergyStorage getEnergyStorage(){ + public CustomEnergyStorage getEnergyStorage() { return this.storage; } @Override - public boolean needsHoldShift(){ + public boolean needsHoldShift() { return false; } @Override - public IEnergyStorage getEnergyStorage(EnumFacing facing){ + public IEnergyStorage getEnergyStorage(EnumFacing facing) { return this.storage; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index 05d03361f..864ff9512 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -25,8 +25,8 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return this.isBoundThingInRange(); + public boolean canInsert(int i, ItemStack stack, boolean automation){ + return !automation || this.isBoundThingInRange(); } @Override @@ -50,7 +50,7 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return this.isBoundThingInRange(); + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !automation || this.isBoundThingInRange(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 57a35625f..54c30103c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -23,8 +23,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements IPhantomTile, IButtonReactor{ @@ -136,25 +134,21 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements NonNullList drops = NonNullList.create(); blockToBreak.getDrops(drops, world, pos, this.world.getBlockState(this.boundPosition), 0); - if(WorldUtil.addToInventory(this.slots, drops, false)){ + if(StackUtil.canAddAll(this.inv, drops, false)){ this.world.playEvent(2001, this.boundPosition, Block.getStateId(this.world.getBlockState(this.boundPosition))); this.world.setBlockToAir(this.boundPosition); - WorldUtil.addToInventory(this.slots, drops, true); + StackUtil.addAll(this.inv, drops, false); this.markDirty(); } } } else{ - int theSlot = WorldUtil.findFirstFilledSlot(this.slots); - this.slots.setStackInSlot(theSlot, WorldUtil.useItemAtSide(WorldUtil.getDirectionBySidesInOrder(this.side), this.world, this.boundPosition, this.slots.getStackInSlot(theSlot))); - if(!StackUtil.isValid(this.slots.getStackInSlot(theSlot))){ - this.slots.setStackInSlot(theSlot, StackUtil.getEmpty()); - } + int theSlot = StackUtil.findFirstFilled(this.inv); + inv.setStackInSlot(theSlot, WorldUtil.useItemAtSide(WorldUtil.getDirectionBySidesInOrder(this.side), this.world, this.boundPosition, inv.getStackInSlot(theSlot))); } } } - @SideOnly(Side.CLIENT) public void renderParticles(){ if(this.world.rand.nextInt(2) == 0){ double d1 = (double)((float)this.boundPosition.getY()+this.world.rand.nextFloat()); @@ -195,13 +189,13 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return !this.isBreaker; + public boolean canInsert(int i, ItemStack stack, boolean automation){ + return !automation || !this.isBreaker; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ - return this.isBreaker; + public boolean canExtract(int slot, ItemStack stack, boolean automation){ + return !automation || this.isBreaker; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index b4f869295..7ecd477d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -15,7 +15,6 @@ import java.util.List; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.StackUtil; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -24,49 +23,47 @@ import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.WorldServer; -public class TileEntityRangedCollector extends TileEntityInventoryBase implements IButtonReactor{ +public class TileEntityRangedCollector extends TileEntityInventoryBase implements IButtonReactor { public static final int RANGE = 6; public FilterSettings filter = new FilterSettings(12, true, true, false, false, 0, -1000); - public TileEntityRangedCollector(){ + public TileEntityRangedCollector() { super(6, "rangedCollector"); } @Override - public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type) { super.writeSyncableNBT(compound, type); this.filter.writeToNBT(compound, "Filter"); } @Override - public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type) { super.readSyncableNBT(compound, type); this.filter.readFromNBT(compound, "Filter"); } @Override - public boolean isRedstoneToggle(){ + public boolean isRedstoneToggle() { return true; } @Override - public void activateOnPulse(){ - List items = this.world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(this.pos.getX()-RANGE, this.pos.getY()-RANGE, this.pos.getZ()-RANGE, this.pos.getX()+RANGE, this.pos.getY()+RANGE, this.pos.getZ()+RANGE)); - if(!items.isEmpty()){ - for(EntityItem item : items){ - if(!item.isDead && !item.cannotPickup() && StackUtil.isValid(item.getItem())){ + public void activateOnPulse() { + List items = this.world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(this.pos.getX() - RANGE, this.pos.getY() - RANGE, this.pos.getZ() - RANGE, this.pos.getX() + RANGE, this.pos.getY() + RANGE, this.pos.getZ() + RANGE)); + if (!items.isEmpty()) { + for (EntityItem item : items) { + if (!item.isDead && !item.cannotPickup() && StackUtil.isValid(item.getItem())) { ItemStack toAdd = item.getItem().copy(); - if(this.filter.check(toAdd)){ + if (this.filter.check(toAdd)) { ArrayList checkList = new ArrayList(); checkList.add(toAdd); - if(WorldUtil.addToInventory(this.slots, checkList, false)){ - WorldUtil.addToInventory(this.slots, checkList, true); - - ((WorldServer)this.world).spawnParticle(EnumParticleTypes.CLOUD, false, item.posX, item.posY+0.45F, item.posZ, 5, 0, 0, 0, 0.03D); - + if (StackUtil.canAddAll(inv, checkList, false)) { + StackUtil.addAll(inv, checkList); + ((WorldServer) this.world).spawnParticle(EnumParticleTypes.CLOUD, false, item.posX, item.posY + 0.45F, item.posZ, 5, 0, 0, 0, 0.03D); item.setDead(); } } @@ -76,31 +73,31 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement } @Override - public void updateEntity(){ + public void updateEntity() { super.updateEntity(); - if(!this.world.isRemote){ - if(!this.isRedstonePowered && !this.isPulseMode){ + if (!this.world.isRemote) { + if (!this.isRedstonePowered && !this.isPulseMode) { this.activateOnPulse(); } - if(this.filter.needsUpdateSend() && this.sendUpdateWithInterval()){ + if (this.filter.needsUpdateSend() && this.sendUpdateWithInterval()) { this.filter.updateLasts(); } } } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return false; + public boolean canInsert(int i, ItemStack stack, boolean fromAutomation) { + return !fromAutomation; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ + public boolean canExtract(int slot, ItemStack stack, boolean byAutomation) { return true; } @Override - public void onButtonPressed(int buttonID, EntityPlayer player){ + public void onButtonPressed(int buttonID, EntityPlayer player) { this.filter.onButtonPressed(buttonID); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index eaab4de7f..58204b3d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.tile; - import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemSolidifiedExperience; @@ -25,22 +24,22 @@ import net.minecraft.util.math.MathHelper; import java.util.List; -public class TileEntityXPSolidifier extends TileEntityInventoryBase implements IButtonReactor{ +public class TileEntityXPSolidifier extends TileEntityInventoryBase implements IButtonReactor { private static final int[] XP_MAP = new int[256]; - static{ - for(int i = 0; i < XP_MAP.length; i++){ + static { + for (int i = 0; i < XP_MAP.length; i++) { XP_MAP[i] = getExperienceForLevelImpl(i); } } - private final int[] buttonAmounts = new int[]{1, 5, 10, 20, 30, 40, 50, 64, -999}; + private final int[] buttonAmounts = new int[] { 1, 5, 10, 20, 30, 40, 50, 64, -999 }; public int amount; private int lastAmount; private int singlePointAmount; - public TileEntityXPSolidifier(){ + public TileEntityXPSolidifier() { super(2, "xpSolidifier"); } @@ -48,107 +47,96 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I * The below methods were excerpted from EnderIO by SleepyTrousers with permission, thanks! */ - public static int getExperienceForLevel(int level){ - if(level >= 0 && level < XP_MAP.length){ - return XP_MAP[level]; - } - if(level >= 21863){ - return Integer.MAX_VALUE; - } + public static int getExperienceForLevel(int level) { + if (level >= 0 && level < XP_MAP.length) { return XP_MAP[level]; } + if (level >= 21863) { return Integer.MAX_VALUE; } return getExperienceForLevelImpl(level); } - private static int getExperienceForLevelImpl(int level){ + private static int getExperienceForLevelImpl(int level) { int res = 0; - for(int i = 0; i < level; i++){ + for (int i = 0; i < level; i++) { res += getXpBarCapacity(i); - if(res < 0){ - return Integer.MAX_VALUE; - } + if (res < 0) { return Integer.MAX_VALUE; } } return res; } - public static int getXpBarCapacity(int level){ - if(level >= 30){ - return 112+(level-30)*9; - } - else if(level >= 15){ - return 37+(level-15)*5; - } - return 7+level*2; + public static int getXpBarCapacity(int level) { + if (level >= 30) { + return 112 + (level - 30) * 9; + } else if (level >= 15) { return 37 + (level - 15) * 5; } + return 7 + level * 2; } - public static int getLevelForExperience(int experience){ - for(int i = 0; i < XP_MAP.length; i++){ - if(XP_MAP[i] > experience){ - return i-1; - } + public static int getLevelForExperience(int experience) { + for (int i = 0; i < XP_MAP.length; i++) { + if (XP_MAP[i] > experience) { return i - 1; } } int i = XP_MAP.length; - while(getExperienceForLevel(i) <= experience){ + while (getExperienceForLevel(i) <= experience) { i++; } - return i-1; + return i - 1; } - public static int getPlayerXP(EntityPlayer player){ - return (int)(getExperienceForLevel(player.experienceLevel)+(player.experience*player.xpBarCap())); + public static int getPlayerXP(EntityPlayer player) { + return (int) (getExperienceForLevel(player.experienceLevel) + (player.experience * player.xpBarCap())); } - public static void addPlayerXP(EntityPlayer player, int amount){ - int experience = Math.max(0, getPlayerXP(player)+amount); + public static void addPlayerXP(EntityPlayer player, int amount) { + int experience = Math.max(0, getPlayerXP(player) + amount); player.experienceTotal = experience; player.experienceLevel = getLevelForExperience(experience); int expForLevel = getExperienceForLevel(player.experienceLevel); - player.experience = (float)(experience-expForLevel)/(float)player.xpBarCap(); + player.experience = (float) (experience - expForLevel) / (float) player.xpBarCap(); } @Override - public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type) { super.writeSyncableNBT(compound, type); compound.setInteger("Amount", this.amount); compound.setInteger("SinglePointAmount", this.singlePointAmount); } @Override - public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type) { super.readSyncableNBT(compound, type); this.amount = compound.getInteger("Amount"); this.singlePointAmount = compound.getInteger("SinglePointAmount"); } @Override - public void updateEntity(){ + public void updateEntity() { super.updateEntity(); - if(!this.world.isRemote){ - if(this.amount > 0){ - if(!StackUtil.isValid(this.slots.getStackInSlot(0))){ + if (!this.world.isRemote) { + if (this.amount > 0) { + ItemStack stack = this.inv.getStackInSlot(0); + if (stack.isEmpty()) { int toSet = this.amount > 64 ? 64 : this.amount; - this.slots.setStackInSlot(0, new ItemStack(InitItems.itemSolidifiedExperience, toSet)); + this.inv.setStackInSlot(0, new ItemStack(InitItems.itemSolidifiedExperience, toSet)); this.amount -= toSet; this.markDirty(); - } - else if(StackUtil.getStackSize(this.slots.getStackInSlot(0)) < 64){ - int needed = 64-StackUtil.getStackSize(this.slots.getStackInSlot(0)); - int toAdd = this.amount > needed ? needed : this.amount; - this.slots.setStackInSlot(0, StackUtil.addStackSize(this.slots.getStackInSlot(0), toAdd)); + } else if (stack.getCount() < 64) { + int needed = 64 - stack.getCount(); + int toAdd = Math.min(needed, amount); + stack.grow(toAdd); this.amount -= toAdd; this.markDirty(); } } - if(!this.isRedstonePowered){ + if (!this.isRedstonePowered) { int range = 5; - List orbs = this.world.getEntitiesWithinAABB(EntityXPOrb.class, new AxisAlignedBB(this.pos.getX()-range, this.pos.getY()-range, this.pos.getZ()-range, this.pos.getX()+1+range, this.pos.getY()+1+range, this.pos.getZ()+1+range)); - if(orbs != null && !orbs.isEmpty()){ - for(EntityXPOrb orb : orbs){ - if(orb != null && !orb.isDead && !orb.getEntityData().getBoolean(ActuallyAdditions.MODID+"FromSolidified")){ + List orbs = this.world.getEntitiesWithinAABB(EntityXPOrb.class, new AxisAlignedBB(this.pos.getX() - range, this.pos.getY() - range, this.pos.getZ() - range, this.pos.getX() + 1 + range, this.pos.getY() + 1 + range, this.pos.getZ() + 1 + range)); + if (orbs != null && !orbs.isEmpty()) { + for (EntityXPOrb orb : orbs) { + if (orb != null && !orb.isDead && !orb.getEntityData().getBoolean(ActuallyAdditions.MODID + "FromSolidified")) { this.singlePointAmount += orb.getXpValue(); orb.setDead(); - if(this.singlePointAmount >= ItemSolidifiedExperience.SOLID_XP_AMOUNT){ - this.amount += this.singlePointAmount/ItemSolidifiedExperience.SOLID_XP_AMOUNT; + if (this.singlePointAmount >= ItemSolidifiedExperience.SOLID_XP_AMOUNT) { + this.amount += this.singlePointAmount / ItemSolidifiedExperience.SOLID_XP_AMOUNT; this.singlePointAmount = 0; this.markDirty(); } @@ -157,47 +145,47 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I } } - ItemStack stack = this.slots.getStackInSlot(1); - if(StackUtil.isValid(stack) && stack.getItem() instanceof ItemSolidifiedExperience){ + ItemStack stack = this.inv.getStackInSlot(1); + if (StackUtil.isValid(stack) && stack.getItem() instanceof ItemSolidifiedExperience) { int remainingSpace = MathHelper.clamp(Integer.MAX_VALUE - amount, 0, stack.getCount()); - if(stack.getCount() >= remainingSpace && remainingSpace != 0) { - this.amount += remainingSpace; - stack.shrink(remainingSpace); - this.markDirty(); + if (stack.getCount() >= remainingSpace && remainingSpace != 0) { + this.amount += remainingSpace; + stack.shrink(remainingSpace); + this.markDirty(); } } - if(this.lastAmount != this.amount && this.sendUpdateWithInterval()){ + if (this.lastAmount != this.amount && this.sendUpdateWithInterval()) { this.lastAmount = this.amount; } } } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == 1 && stack.getItem() == InitItems.itemSolidifiedExperience; + public boolean canInsert(int slot, ItemStack stack, boolean fromAutomation) { + return slot == 1 && stack.getItem() == InitItems.itemSolidifiedExperience; } @Override - public boolean canExtractItem(int slot, ItemStack stack){ + public boolean canExtract(int slot, ItemStack stack, boolean byAutomation) { return true; } - + @Override public void markDirty() { - if(amount < 0) amount = Integer.MAX_VALUE; //don't u go negative on me weird number - super.markDirty(); + if (amount < 0) amount = Integer.MAX_VALUE; //don't u go negative on me weird number + super.markDirty(); } @Override - public void onButtonPressed(int buttonID, EntityPlayer player){ - if(buttonID < this.buttonAmounts.length){ + public void onButtonPressed(int buttonID, EntityPlayer player) { + if (buttonID < this.buttonAmounts.length) { int playerXP = getPlayerXP(player); - if(playerXP > 0){ - int xp = this.buttonAmounts[buttonID] == -999 ? playerXP/ItemSolidifiedExperience.SOLID_XP_AMOUNT : this.buttonAmounts[buttonID]; - if(this.amount < Integer.MAX_VALUE-xp && playerXP >= ItemSolidifiedExperience.SOLID_XP_AMOUNT*xp){ - addPlayerXP(player, -(ItemSolidifiedExperience.SOLID_XP_AMOUNT*xp)); - if(!this.world.isRemote){ + if (playerXP > 0) { + int xp = this.buttonAmounts[buttonID] == -999 ? playerXP / ItemSolidifiedExperience.SOLID_XP_AMOUNT : this.buttonAmounts[buttonID]; + if (this.amount < Integer.MAX_VALUE - xp && playerXP >= ItemSolidifiedExperience.SOLID_XP_AMOUNT * xp) { + addPlayerXP(player, -(ItemSolidifiedExperience.SOLID_XP_AMOUNT * xp)); + if (!this.world.isRemote) { this.amount += xp; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemStackHandlerAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemStackHandlerAA.java new file mode 100644 index 000000000..58ba43a5e --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemStackHandlerAA.java @@ -0,0 +1,58 @@ +/* + * This file ("ItemStackHandlerAA.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2017 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.util; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.items.ItemStackHandler; + +/** + * The Actually Additions variant of ItemStackHandler. Provides methods to disallow add/removal based on automation context. Defaults to thinking operations are performed by automation. + * @author Shadows + */ +public class ItemStackHandlerAA extends ItemStackHandler { + + public ItemStackHandlerAA(int slots) { + super(slots); + } + + public NonNullList getItems() { + return this.stacks; + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + return insertItem(slot, stack, simulate, true); + } + + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate, boolean fromAutomation) { + if (!canAccept(slot, stack, fromAutomation)) return stack; + return super.insertItem(slot, stack, simulate); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return extractItem(slot, amount, simulate, true); + } + + public ItemStack extractItem(int slot, int amount, boolean simulate, boolean byAutomation) { + if (!canRemove(slot, byAutomation)) return ItemStack.EMPTY; + return super.extractItem(slot, amount, simulate); + } + + public boolean canAccept(int slot, ItemStack stack, boolean fromAutomation) { + return true; + } + + public boolean canRemove(int slot, boolean byAutomation) { + return true; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemStackHandlerCustom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemStackHandlerCustom.java deleted file mode 100644 index b814a3a9f..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemStackHandlerCustom.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * This file ("ItemStackHandlerCustom.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2017 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.util; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.NonNullList; -import net.minecraftforge.items.ItemHandlerHelper; -import net.minecraftforge.items.ItemStackHandler; - -public class ItemStackHandlerCustom extends ItemStackHandler{ - - private boolean tempIgnoreConditions; - - public ItemStackHandlerCustom(int slots){ - super(slots); - } - - public void decrStackSize(int slot, int amount){ - this.setStackInSlot(slot, StackUtil.addStackSize(this.getStackInSlot(slot), -amount)); - } - - public NonNullList getItems(){ - return this.stacks; - } - - @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate){ - if(!StackUtil.isValid(stack)){ - return StackUtil.getEmpty(); - } - this.validateSlotIndex(slot); - - ItemStack existing = this.stacks.get(slot); - - int limit = this.getStackLimit(slot, stack); - if(StackUtil.isValid(existing)){ - if(!ItemHandlerHelper.canItemStacksStack(stack, existing)){ - return stack; - } - limit -= existing.getCount(); - } - if(limit <= 0){ - return stack; - } - - if(!this.tempIgnoreConditions && !this.canInsert(stack, slot)){ - return stack; - } - - boolean reachedLimit = stack.getCount() > limit; - if(!simulate){ - if(!StackUtil.isValid(existing)){ - this.stacks.set(slot, reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, limit) : stack); - } - else{ - existing.grow(reachedLimit ? limit : stack.getCount()); - } - - this.onContentsChanged(slot); - } - - return reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, stack.getCount()-limit) : ItemStack.EMPTY; - - } - - public ItemStack insertItemInternal(int slot, ItemStack stack, boolean simulate){ - this.tempIgnoreConditions = true; - ItemStack result = this.insertItem(slot, stack, simulate); - this.tempIgnoreConditions = false; - return result; - } - - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate){ - if(amount <= 0){ - return StackUtil.getEmpty(); - } - this.validateSlotIndex(slot); - - ItemStack existing = this.stacks.get(slot); - if(!StackUtil.isValid(existing)){ - return StackUtil.getEmpty(); - } - - int toExtract = Math.min(amount, existing.getMaxStackSize()); - if(toExtract <= 0){ - return StackUtil.getEmpty(); - } - - if(!this.tempIgnoreConditions && !this.canExtract(this.getStackInSlot(slot), slot)){ - return StackUtil.getEmpty(); - } - - if(existing.getCount() <= toExtract){ - if(!simulate){ - this.stacks.set(slot, StackUtil.getEmpty()); - this.onContentsChanged(slot); - return existing; - } - return existing.copy(); - } - else{ - if(!simulate){ - this.stacks.set(slot, ItemHandlerHelper.copyStackWithSize(existing, existing.getCount()-toExtract)); - this.onContentsChanged(slot); - } - return ItemHandlerHelper.copyStackWithSize(existing, toExtract); - } - } - - public ItemStack extractItemInternal(int slot, int amount, boolean simulate){ - this.tempIgnoreConditions = true; - ItemStack result = this.extractItem(slot, amount, simulate); - this.tempIgnoreConditions = false; - return result; - } - - public boolean canInsert(ItemStack stack, int slot){ - return true; - } - - public boolean canExtract(ItemStack stack, int slot){ - return true; - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java index a1bc2364f..b7ce01eb4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java @@ -13,121 +13,237 @@ package de.ellpeck.actuallyadditions.mod.util; import java.util.Collection; import java.util.List; +import org.cyclops.commoncapabilities.api.capability.itemhandler.ISlotlessItemHandler; + import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.util.compat.SlotlessableItemHandlerWrapper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraftforge.items.IItemHandler; -public final class StackUtil{ +public final class StackUtil { - public static ItemStack validateCopy(ItemStack stack){ - if(isValid(stack)){ - return stack.copy(); - } - else{ - return getEmpty(); - } - } - - public static ItemStack validateCheck(ItemStack stack){ - if(isValid(stack)){ - return stack; - } - else{ - return getEmpty(); - } - } - - public static boolean isValid(ItemStack stack){ - if(stack == null) AwfulUtil.callTheFuckinPolice("Null ItemStack detected", stack); - Item i = stack.getItem(); - if(i instanceof IDisableableItem) return !((IDisableableItem) i).isDisabled(); + /** + * Pretty much just a check for {@link ItemStack#isEmpty()} but exists in case Mojang does some more refactoring. + * @param stack The stack + * @return If the stack is not empty, or if it's an IDisableableItem, if its enabled. + */ + public static boolean isValid(ItemStack stack) { + if (stack == null) AwfulUtil.callTheFuckinPolice("Null ItemStack detected", stack); + Item i = stack.getItem(); + if (i instanceof IDisableableItem) return !((IDisableableItem) i).isDisabled(); return !stack.isEmpty(); } - public static ItemStack getEmpty(){ + /** + * @return The empty itemstack instance. + */ + public static ItemStack getEmpty() { return ItemStack.EMPTY; } - public static int getStackSize(ItemStack stack){ - if(!isValid(stack)){ - return 0; - } - else{ - return stack.getCount(); - } + /** + * A helper method to make NonNullLists with empty fill. + * @param size How big the list will be. + * @return A {@link NonNullList} with the same size as provided. + */ + public static NonNullList makeList(int size) { + return NonNullList.withSize(size, getEmpty()); } - public static ItemStack setStackSize(ItemStack stack, int size){ - return setStackSize(stack, size, false); - } - - public static ItemStack setStackSize(ItemStack stack, int size, boolean containerOnEmpty){ - if(size <= 0){ - if(isValid(stack) && containerOnEmpty){ - return stack.getItem().getContainerItem(stack); - } - else{ - return getEmpty(); - } - } - stack.setCount(size); - return stack; - } - - public static ItemStack addStackSize(ItemStack stack, int size){ - return addStackSize(stack, size, false); - } - - public static ItemStack addStackSize(ItemStack stack, int size, boolean containerOnEmpty){ - return setStackSize(stack, getStackSize(stack)+size, containerOnEmpty); - } - - public static boolean isIInvEmpty(NonNullList slots){ - for(ItemStack stack : slots){ - if(StackUtil.isValid(stack)){ - return false; - } - } - + /** + * Checks if a collection of stacks are empty, as {@link Collection#isEmpty()} does not care about empty stacks. + * @param stacks Some ItemStacks + * @return If all stacks in the collection return true for {@link ItemStack#isEmpty()} + */ + public static boolean isEmpty(Collection stacks) { + if (stacks.isEmpty()) return true; + for (ItemStack s : stacks) + if (!s.isEmpty()) return false; return true; } - public static NonNullList createSlots(int size){ - return NonNullList.withSize(size, getEmpty()); - } - - public static boolean isEmpty(Collection stacks) { - if(stacks.isEmpty()) return true; - else for(ItemStack s : stacks) if (!s.isEmpty()) return false; - return true; - } - + /** + * Checks if all provided itemstacks will fit in the handler. If you have an AA item handler, use the more sensitive below methods. + * @param inv The Item handler + * @param stacks The stacks to add + * @return If all stacks fit fully. If even one item would not fit, the method returns false. + */ public static boolean canAddAll(IItemHandler inv, List stacks) { int slotMax = inv.getSlots(); int counter = 0; - for(ItemStack s : stacks) { - for(int i = 0; i < slotMax; i++) { + for (ItemStack s : stacks) { + for (int i = 0; i < slotMax; i++) { s = inv.insertItem(i, s, true); - if(s.isEmpty()) break; + if (s.isEmpty()) break; } - if(s.isEmpty()) counter++; + if (s.isEmpty()) counter++; } return counter == stacks.size(); } - + + /** + * Adds all itemstacks in a list to an item handler. If you have an AA item handler, use the more sensitive below methods. + * @param inv The Item handler + * @param stacks The stacks to add + */ public static void addAll(IItemHandler inv, List stacks) { int slotMax = inv.getSlots(); - for(ItemStack s : stacks) { - for(int i = 0; i < slotMax; i++) { + for (ItemStack s : stacks) { + for (int i = 0; i < slotMax; i++) { s = inv.insertItem(i, s, false); - if(s.isEmpty()) break; + if (s.isEmpty()) break; } } } + /** + * Checks if all provided itemstacks will fit in the AA handler. Use addAll below to actually add the stacks. This is strictly a check function. + * @param inv The AA Item handler + * @param stacks The stacks to add + * @param fromAutomation If these stacks are coming from a pipe or other external source, or internally, like from the TE's update() method. + * @return If all stacks fit fully. If even one item would not fit, the method returns false. + */ + public static boolean canAddAll(ItemStackHandlerAA inv, List stacks, boolean fromAutomation) { + + int slotMax = inv.getSlots(); + int counter = 0; + + for (ItemStack s : stacks) { + for (int i = 0; i < slotMax; i++) { + s = inv.insertItem(i, s, true, fromAutomation); + if (s.isEmpty()) break; + } + if (s.isEmpty()) counter++; + } + return counter == stacks.size(); + } + + /** + * Adds all itemstacks in a list to an AA item handler. Must be an AA item handler to support the automation bool. + * @param inv The AA Item handler + * @param stacks The stacks to add + * @param fromAutomation If these stacks are coming from a pipe or other external source, or internally, like from the TE's update() method. + */ + public static void addAll(ItemStackHandlerAA inv, List stacks, boolean fromAutomation) { + int slotMax = inv.getSlots(); + for (ItemStack s : stacks) { + for (int i = 0; i < slotMax; i++) { + s = inv.insertItem(i, s, false, fromAutomation); + if (s.isEmpty()) break; + } + } + } + + /** + * Checks if all provided itemstacks will fit in the AA handler. Use addAll below to actually add the stacks. This is strictly a check function. + * @param inv The AA Item handler + * @param stacks The stacks to add + * @param slot The starting slot. + * @param endSlot The ending slot, exclusive. + * @param fromAutomation If these stacks are coming from a pipe or other external source, or internally, like from the TE's update() method. + * @return If all stacks fit fully. If even one item would not fit, the method returns false. + */ + public static boolean canAddAll(ItemStackHandlerAA inv, List stacks, int slot, int endSlot, boolean fromAutomation) { + int counter = 0; + + for (ItemStack s : stacks) { + for (int i = slot; i < endSlot; i++) { + s = inv.insertItem(i, s, true, fromAutomation); + if (s.isEmpty()) break; + } + if (s.isEmpty()) counter++; + } + return counter == stacks.size(); + } + + /** + * Adds all itemstacks in a list to an AA item handler. Must be an AA item handler to support the automation bool. + * @param inv The AA Item handler + * @param stacks The stacks to add + * @param slot The starting slot. + * @param endSlot The ending slot, exclusive. + * @param fromAutomation If these stacks are coming from a pipe or other external source, or internally, like from the TE's update() method. + */ + public static void addAll(ItemStackHandlerAA inv, List stacks, int slot, int endSlot, boolean fromAutomation) { + for (ItemStack s : stacks) { + for (int i = slot; i < endSlot; i++) { + s = inv.insertItem(i, s, false, fromAutomation); + if (s.isEmpty()) break; + } + } + } + + /** + * Util method to find the first filled item in a handler. Searches from slot 0 to the end. + * @param inv The IItemHandler to search. + * @return The first filled slot, or -1 if all slots are empty. + */ + public static int findFirstFilled(IItemHandler inv) { + for (int i = 0; i < inv.getSlots(); i++) { + if (!inv.getStackInSlot(i).isEmpty()) return i; + } + return -1; + } + + /** + * Helper method to add stack size and return the stack. + */ + public static ItemStack grow(ItemStack s, int i) { + s.grow(i); + return s; + } + + /** + * Helper method to remove stack size and return the stack. + */ + public static ItemStack shrink(ItemStack s, int i) { + s.shrink(i); + return s; + } + + /** + * Helper method to remove stack size and return the stack. + */ + public static ItemStack shrinkForContainer(ItemStack s, int i) { + s.shrink(i); + if(s.isEmpty()) return s.getItem().getContainerItem(s); + return s; + } + + /** + * Interaction method for working with Common Capabilities. + * @param wrapper The wrapper holding at least one instance + * @param stack The stack to insert. Should not be empty. + * @param simulate If this is a simulation + * @param slotStart Start range + * @param slotEnd End range + * @return The remainder that was not inserted. + */ + public static ItemStack insertItem(SlotlessableItemHandlerWrapper wrapper, ItemStack stack, boolean simulate, int slotStart, int slotEnd) { + if (stack.isEmpty()) return stack; + ItemStack remain = stack.copy(); + + if (ActuallyAdditions.commonCapsLoaded) { + Object handler = wrapper.getSlotlessHandler(); + if (handler instanceof ISlotlessItemHandler) { + remain = ((ISlotlessItemHandler) handler).insertItem(remain, simulate); + if (!ItemStack.areItemStacksEqual(remain, stack)) return remain; + } + } + + IItemHandler handler = wrapper.getNormalHandler(); + if (handler != null) { + for (int i = Math.max(0, slotStart); i < Math.min(slotEnd, handler.getSlots()); i++) { + remain = handler.insertItem(i, remain, simulate); + } + } + + return remain; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 21bafec5a..0949a8189 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.util; import java.util.ArrayList; -import java.util.List; import org.cyclops.commoncapabilities.api.capability.itemhandler.ISlotlessItemHandler; @@ -55,374 +54,312 @@ import net.minecraftforge.items.IItemHandler; public final class WorldUtil { - public static boolean doItemInteraction(SlotlessableItemHandlerWrapper extractWrapper, SlotlessableItemHandlerWrapper insertWrapper, int maxExtract) { - return doItemInteraction(extractWrapper, insertWrapper, maxExtract, null); - } + public static boolean doItemInteraction(SlotlessableItemHandlerWrapper extractWrapper, SlotlessableItemHandlerWrapper insertWrapper, int maxExtract) { + return doItemInteraction(extractWrapper, insertWrapper, maxExtract, null); + } - public static boolean doItemInteraction(SlotlessableItemHandlerWrapper extractWrapper, SlotlessableItemHandlerWrapper insertWrapper, int maxExtract, FilterSettings filter) { - return doItemInteraction(extractWrapper, insertWrapper, maxExtract, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE, filter); - } + public static boolean doItemInteraction(SlotlessableItemHandlerWrapper extractWrapper, SlotlessableItemHandlerWrapper insertWrapper, int maxExtract, FilterSettings filter) { + return doItemInteraction(extractWrapper, insertWrapper, maxExtract, 0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE, filter); + } - public static boolean doItemInteraction(SlotlessableItemHandlerWrapper extractWrapper, SlotlessableItemHandlerWrapper insertWrapper, int maxExtract, int extractSlotStart, int extractSlotEnd, int insertSlotStart, int insertSlotEnd, FilterSettings filter) { - ItemStack theoreticalExtract = extractItem(extractWrapper, maxExtract, true, extractSlotStart, extractSlotEnd, filter); - if (StackUtil.isValid(theoreticalExtract)) { - ItemStack remaining = insertItem(insertWrapper, theoreticalExtract, false, insertSlotStart, insertSlotEnd); - if (!ItemStack.areItemStacksEqual(remaining, theoreticalExtract)) { - int toExtract = !StackUtil.isValid(remaining) ? StackUtil.getStackSize(theoreticalExtract) : StackUtil.getStackSize(theoreticalExtract) - StackUtil.getStackSize(remaining); - extractItem(extractWrapper, toExtract, false, extractSlotStart, extractSlotEnd, filter); - return true; - } - } - return false; - } + public static boolean doItemInteraction(SlotlessableItemHandlerWrapper extractWrapper, SlotlessableItemHandlerWrapper insertWrapper, int maxExtract, int extractSlotStart, int extractSlotEnd, int insertSlotStart, int insertSlotEnd, FilterSettings filter) { + ItemStack theoreticalExtract = extractItem(extractWrapper, maxExtract, true, extractSlotStart, extractSlotEnd, filter); + if (StackUtil.isValid(theoreticalExtract)) { + ItemStack remaining = StackUtil.insertItem(insertWrapper, theoreticalExtract, false, insertSlotStart, insertSlotEnd); + if (!ItemStack.areItemStacksEqual(remaining, theoreticalExtract)) { + int toExtract = theoreticalExtract.getCount() - remaining.getCount(); + extractItem(extractWrapper, toExtract, false, extractSlotStart, extractSlotEnd, filter); + return true; + } + } + return false; + } - public static ItemStack extractItem(SlotlessableItemHandlerWrapper extractWrapper, int maxExtract, boolean simulate, int slotStart, int slotEnd, FilterSettings filter) { - ItemStack extracted = StackUtil.getEmpty(); + public static ItemStack extractItem(SlotlessableItemHandlerWrapper extractWrapper, int maxExtract, boolean simulate, int slotStart, int slotEnd, FilterSettings filter) { + ItemStack extracted = StackUtil.getEmpty(); - if (ActuallyAdditions.commonCapsLoaded) { - Object handler = extractWrapper.getSlotlessHandler(); - if (handler instanceof ISlotlessItemHandler) { - ISlotlessItemHandler slotless = (ISlotlessItemHandler) handler; + if (ActuallyAdditions.commonCapsLoaded) { + Object handler = extractWrapper.getSlotlessHandler(); + if (handler instanceof ISlotlessItemHandler) { + ISlotlessItemHandler slotless = (ISlotlessItemHandler) handler; - if (filter == null || !filter.needsCheck()) { - extracted = slotless.extractItem(maxExtract, simulate); - return extracted; - } else { - ItemStack would = slotless.extractItem(maxExtract, true); - if (filter.check(would)) { - if (simulate) { - extracted = would; - } else { - extracted = slotless.extractItem(maxExtract, false); - } - } - //Leave the possibility to fall back to vanilla when there is a filter - } - } - } + if (filter == null || !filter.needsCheck()) { + extracted = slotless.extractItem(maxExtract, simulate); + return extracted; + } else { + ItemStack would = slotless.extractItem(maxExtract, true); + if (filter.check(would)) { + if (simulate) { + extracted = would; + } else { + extracted = slotless.extractItem(maxExtract, false); + } + } + //Leave the possibility to fall back to vanilla when there is a filter + } + } + } - if (!StackUtil.isValid(extracted)) { - IItemHandler handler = extractWrapper.getNormalHandler(); - if (handler != null) { - for (int i = Math.max(0, slotStart); i < Math.min(slotEnd, handler.getSlots()); i++) { - if (filter == null || !filter.needsCheck() || filter.check(handler.getStackInSlot(i))) { - extracted = handler.extractItem(i, maxExtract, simulate); + if (!StackUtil.isValid(extracted)) { + IItemHandler handler = extractWrapper.getNormalHandler(); + if (handler != null) { + for (int i = Math.max(0, slotStart); i < Math.min(slotEnd, handler.getSlots()); i++) { + if (filter == null || !filter.needsCheck() || filter.check(handler.getStackInSlot(i))) { + extracted = handler.extractItem(i, maxExtract, simulate); - if (StackUtil.isValid(extracted)) { - break; - } - } - } - } - } + if (StackUtil.isValid(extracted)) { + break; + } + } + } + } + } - return extracted; - } + return extracted; + } - public static ItemStack insertItem(SlotlessableItemHandlerWrapper insertWrapper, ItemStack stack, boolean simulate, int slotStart, int slotEnd) { - ItemStack remain = StackUtil.validateCopy(stack); + public static void doEnergyInteraction(TileEntity tileFrom, TileEntity tileTo, EnumFacing sideTo, int maxTransfer) { + if (maxTransfer > 0) { + EnumFacing opp = sideTo == null ? null : sideTo.getOpposite(); + if (tileFrom.hasCapability(CapabilityEnergy.ENERGY, sideTo) && tileTo.hasCapability(CapabilityEnergy.ENERGY, opp)) { + IEnergyStorage handlerFrom = tileFrom.getCapability(CapabilityEnergy.ENERGY, sideTo); + IEnergyStorage handlerTo = tileTo.getCapability(CapabilityEnergy.ENERGY, opp); - if (ActuallyAdditions.commonCapsLoaded) { - Object handler = insertWrapper.getSlotlessHandler(); - if (handler instanceof ISlotlessItemHandler) { - remain = ((ISlotlessItemHandler) handler).insertItem(remain, simulate); + if (handlerFrom != null && handlerTo != null) { + int drain = handlerFrom.extractEnergy(maxTransfer, true); + if (drain > 0) { + int filled = handlerTo.receiveEnergy(drain, false); + handlerFrom.extractEnergy(filled, false); + return; + } + } + } + } + } - if (!ItemStack.areItemStacksEqual(remain, stack)) { return remain; } - } - } + public static void doFluidInteraction(TileEntity tileFrom, TileEntity tileTo, EnumFacing sideTo, int maxTransfer) { + if (maxTransfer > 0) { + if (tileFrom.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, sideTo) && tileTo.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, sideTo.getOpposite())) { + IFluidHandler handlerFrom = tileFrom.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, sideTo); + IFluidHandler handlerTo = tileTo.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, sideTo.getOpposite()); + FluidStack drain = handlerFrom.drain(maxTransfer, false); + if (drain != null) { + int filled = handlerTo.fill(drain.copy(), true); + handlerFrom.drain(filled, true); + } + } + } + } - IItemHandler handler = insertWrapper.getNormalHandler(); - if (handler != null) { - for (int i = Math.max(0, slotStart); i < Math.min(slotEnd, handler.getSlots()); i++) { - remain = handler.insertItem(i, remain, simulate); - } - } + /** + * Checks if a given Block with a given Meta is present in given Positions + * + * @param positions The Positions, an array of {x, y, z} arrays containing Positions + * @param block The Block + * @param meta The Meta + * @param world The World + * @return Is every block present? + */ + public static boolean hasBlocksInPlacesGiven(BlockPos[] positions, Block block, int meta, World world) { + for (BlockPos pos : positions) { + IBlockState state = world.getBlockState(pos); + if (!(state.getBlock() == block && block.getMetaFromState(state) == meta)) { return false; } + } + return true; + } - return remain; - } + public static ItemStack useItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack) { + if (world instanceof WorldServer && StackUtil.isValid(stack) && pos != null) { + BlockPos offsetPos = pos.offset(side); + IBlockState state = world.getBlockState(offsetPos); + Block block = state.getBlock(); + boolean replaceable = block.isReplaceable(world, offsetPos); - public static void doEnergyInteraction(TileEntity tileFrom, TileEntity tileTo, EnumFacing sideTo, int maxTransfer) { - if (maxTransfer > 0) { - EnumFacing opp = sideTo == null ? null : sideTo.getOpposite(); - if (tileFrom.hasCapability(CapabilityEnergy.ENERGY, sideTo) && tileTo.hasCapability(CapabilityEnergy.ENERGY, opp)) { - IEnergyStorage handlerFrom = tileFrom.getCapability(CapabilityEnergy.ENERGY, sideTo); - IEnergyStorage handlerTo = tileTo.getCapability(CapabilityEnergy.ENERGY, opp); + //Redstone + if (replaceable && stack.getItem() == Items.REDSTONE) { + world.setBlockState(offsetPos, Blocks.REDSTONE_WIRE.getDefaultState(), 2); + return StackUtil.shrink(stack, 1); + } - if (handlerFrom != null && handlerTo != null) { - int drain = handlerFrom.extractEnergy(maxTransfer, true); - if (drain > 0) { - int filled = handlerTo.receiveEnergy(drain, false); - handlerFrom.extractEnergy(filled, false); - return; - } - } - } - } - } + //Plants + if (replaceable && stack.getItem() instanceof IPlantable) { + if (((IPlantable) stack.getItem()).getPlant(world, offsetPos).getBlock().canPlaceBlockAt(world, offsetPos)) { + if (world.setBlockState(offsetPos, ((IPlantable) stack.getItem()).getPlant(world, offsetPos), 2)) return StackUtil.shrink(stack, 1); + } + } - public static void doFluidInteraction(TileEntity tileFrom, TileEntity tileTo, EnumFacing sideTo, int maxTransfer) { - if (maxTransfer > 0) { - if (tileFrom.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, sideTo) && tileTo.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, sideTo.getOpposite())) { - IFluidHandler handlerFrom = tileFrom.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, sideTo); - IFluidHandler handlerTo = tileTo.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, sideTo.getOpposite()); - FluidStack drain = handlerFrom.drain(maxTransfer, false); - if (drain != null) { - int filled = handlerTo.fill(drain.copy(), true); - handlerFrom.drain(filled, true); - } - } - } - } + //Everything else + try { + if (world instanceof WorldServer) { + FakePlayer fake = FakePlayerFactory.getMinecraft((WorldServer) world); + ItemStack heldBefore = fake.getHeldItemMainhand(); + setHandItemWithoutAnnoyingSound(fake, EnumHand.MAIN_HAND, stack.copy()); - /** - * Checks if a given Block with a given Meta is present in given Positions - * - * @param positions The Positions, an array of {x, y, z} arrays containing Positions - * @param block The Block - * @param meta The Meta - * @param world The World - * @return Is every block present? - */ - public static boolean hasBlocksInPlacesGiven(BlockPos[] positions, Block block, int meta, World world) { - for (BlockPos pos : positions) { - IBlockState state = world.getBlockState(pos); - if (!(state.getBlock() == block && block.getMetaFromState(state) == meta)) { return false; } - } - return true; - } + fake.getHeldItemMainhand().onItemUse(fake, world, offsetPos, fake.getActiveHand(), side.getOpposite(), 0.5F, 0.5F, 0.5F); - public static ItemStack useItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack) { - if (world instanceof WorldServer && StackUtil.isValid(stack) && pos != null) { - BlockPos offsetPos = pos.offset(side); - IBlockState state = world.getBlockState(offsetPos); - Block block = state.getBlock(); - boolean replaceable = block.isReplaceable(world, offsetPos); + ItemStack result = fake.getHeldItem(EnumHand.MAIN_HAND); + setHandItemWithoutAnnoyingSound(fake, EnumHand.MAIN_HAND, heldBefore); + return result; + } + } catch (Exception e) { + ActuallyAdditions.LOGGER.error("Something that places Blocks at " + offsetPos.getX() + ", " + offsetPos.getY() + ", " + offsetPos.getZ() + " in World " + world.provider.getDimension() + " threw an Exception! Don't let that happen again!", e); + } + } + return stack; + } - //Redstone - if (replaceable && stack.getItem() == Items.REDSTONE) { - world.setBlockState(offsetPos, Blocks.REDSTONE_WIRE.getDefaultState(), 2); - return StackUtil.addStackSize(stack, -1); - } + public static boolean dropItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack) { + BlockPos coords = pos.offset(side); + if (world.isBlockLoaded(coords)) { + EntityItem item = new EntityItem(world, coords.getX() + 0.5, coords.getY() + 0.5, coords.getZ() + 0.5, stack); + item.motionX = 0; + item.motionY = 0; + item.motionZ = 0; - //Plants - if (replaceable && stack.getItem() instanceof IPlantable) { - if (((IPlantable) stack.getItem()).getPlant(world, offsetPos).getBlock().canPlaceBlockAt(world, offsetPos)) { - if (world.setBlockState(offsetPos, ((IPlantable) stack.getItem()).getPlant(world, offsetPos), 2)) { return StackUtil.addStackSize(stack, -1); } - } - } + return world.spawnEntity(item); + } + return false; + } - //Everything else - try { - if (world instanceof WorldServer) { - FakePlayer fake = FakePlayerFactory.getMinecraft((WorldServer) world); - ItemStack heldBefore = fake.getHeldItemMainhand(); - setHandItemWithoutAnnoyingSound(fake, EnumHand.MAIN_HAND, stack.copy()); + public static EnumFacing getDirectionBySidesInOrder(int side) { + switch (side) { + case 0: + return EnumFacing.UP; + case 1: + return EnumFacing.DOWN; + case 2: + return EnumFacing.NORTH; + case 3: + return EnumFacing.EAST; + case 4: + return EnumFacing.SOUTH; + default: + return EnumFacing.WEST; + } + } - fake.getHeldItemMainhand().onItemUse(fake, world, offsetPos, fake.getActiveHand(), side.getOpposite(), 0.5F, 0.5F, 0.5F); + public static EnumFacing getDirectionByPistonRotation(IBlockState state) { + return state.getValue(BlockDirectional.FACING); + } - ItemStack result = fake.getHeldItem(EnumHand.MAIN_HAND); - setHandItemWithoutAnnoyingSound(fake, EnumHand.MAIN_HAND, heldBefore); - return result; - } - } catch (Exception e) { - ActuallyAdditions.LOGGER.error("Something that places Blocks at " + offsetPos.getX() + ", " + offsetPos.getY() + ", " + offsetPos.getZ() + " in World " + world.provider.getDimension() + " threw an Exception! Don't let that happen again!", e); - } - } - return stack; - } + public static ArrayList getMaterialsAround(World world, BlockPos pos) { + ArrayList blocks = new ArrayList(); + blocks.add(world.getBlockState(pos.offset(EnumFacing.NORTH)).getMaterial()); + blocks.add(world.getBlockState(pos.offset(EnumFacing.EAST)).getMaterial()); + blocks.add(world.getBlockState(pos.offset(EnumFacing.SOUTH)).getMaterial()); + blocks.add(world.getBlockState(pos.offset(EnumFacing.WEST)).getMaterial()); + return blocks; + } - public static boolean dropItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack) { - BlockPos coords = pos.offset(side); - if (world.isBlockLoaded(coords)) { - EntityItem item = new EntityItem(world, coords.getX() + 0.5, coords.getY() + 0.5, coords.getZ() + 0.5, stack); - item.motionX = 0; - item.motionY = 0; - item.motionZ = 0; + public static RayTraceResult getNearestPositionWithAir(World world, EntityPlayer player, int reach) { + return getMovingObjectPosWithReachDistance(world, player, reach, false, false, true); + } - return world.spawnEntity(item); - } - return false; - } + private static RayTraceResult getMovingObjectPosWithReachDistance(World world, EntityPlayer player, double distance, boolean p1, boolean p2, boolean p3) { + float f = player.rotationPitch; + float f1 = player.rotationYaw; + double d0 = player.posX; + double d1 = player.posY + (double) player.getEyeHeight(); + double d2 = player.posZ; + Vec3d vec3 = new Vec3d(d0, d1, d2); + float f2 = MathHelper.cos(-f1 * 0.017453292F - (float) Math.PI); + float f3 = MathHelper.sin(-f1 * 0.017453292F - (float) Math.PI); + float f4 = -MathHelper.cos(-f * 0.017453292F); + float f5 = MathHelper.sin(-f * 0.017453292F); + float f6 = f3 * f4; + float f7 = f2 * f4; + Vec3d vec31 = vec3.addVector((double) f6 * distance, (double) f5 * distance, (double) f7 * distance); + return world.rayTraceBlocks(vec3, vec31, p1, p2, p3); + } - public static EnumFacing getDirectionBySidesInOrder(int side) { - switch (side) { - case 0: - return EnumFacing.UP; - case 1: - return EnumFacing.DOWN; - case 2: - return EnumFacing.NORTH; - case 3: - return EnumFacing.EAST; - case 4: - return EnumFacing.SOUTH; - default: - return EnumFacing.WEST; - } - } + public static RayTraceResult getNearestBlockWithDefaultReachDistance(World world, EntityPlayer player) { + return getNearestBlockWithDefaultReachDistance(world, player, false, true, false); + } - public static EnumFacing getDirectionByPistonRotation(IBlockState state) { - return state.getValue(BlockDirectional.FACING); - } + public static RayTraceResult getNearestBlockWithDefaultReachDistance(World world, EntityPlayer player, boolean stopOnLiquids, boolean ignoreBlockWithoutBoundingBox, boolean returnLastUncollidableBlock) { + return getMovingObjectPosWithReachDistance(world, player, player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue(), stopOnLiquids, ignoreBlockWithoutBoundingBox, returnLastUncollidableBlock); + } - public static ArrayList getMaterialsAround(World world, BlockPos pos) { - ArrayList blocks = new ArrayList(); - blocks.add(world.getBlockState(pos.offset(EnumFacing.NORTH)).getMaterial()); - blocks.add(world.getBlockState(pos.offset(EnumFacing.EAST)).getMaterial()); - blocks.add(world.getBlockState(pos.offset(EnumFacing.SOUTH)).getMaterial()); - blocks.add(world.getBlockState(pos.offset(EnumFacing.WEST)).getMaterial()); - return blocks; - } + public static void setHandItemWithoutAnnoyingSound(EntityPlayer player, EnumHand hand, ItemStack stack) { + if (hand == EnumHand.MAIN_HAND) { + player.inventory.mainInventory.set(player.inventory.currentItem, stack); + } else if (hand == EnumHand.OFF_HAND) { + player.inventory.offHandInventory.set(0, stack); + } + } - public static boolean addToInventory(ItemStackHandlerCustom inventory, List stacks, boolean actuallyDo) { - return addToInventory(inventory, 0, inventory.getSlots(), stacks, actuallyDo); - } + //I think something is up with this, but I'm not entirely certain what. + public static float fireFakeHarvestEventsForDropChance(NonNullList drops, World world, BlockPos pos) { + if (world instanceof WorldServer) { + FakePlayer fake = FakePlayerFactory.getMinecraft((WorldServer) world); + IBlockState state = world.getBlockState(pos); - public static boolean addToInventory(ItemStackHandlerCustom inventory, int start, int end, List stacks, boolean actuallyDo) { - //Copy the slots if just testing to later load them again - ItemStack[] backupSlots = null; - if (!actuallyDo) { - backupSlots = new ItemStack[inventory.getSlots()]; - for (int i = 0; i < backupSlots.length; i++) { - ItemStack stack = inventory.getStackInSlot(i); - backupSlots[i] = StackUtil.validateCopy(stack); - } - } + BreakEvent event = new BreakEvent(world, pos, state, fake); + if (!MinecraftForge.EVENT_BUS.post(event)) { return ForgeEventFactory.fireBlockHarvesting(drops, world, pos, state, 0, 1, false, fake); } + } + return 0F; + } - int working = 0; - for (ItemStack stack : stacks) { - if (StackUtil.isValid(stack)) { - for (int i = start; i < end; i++) { - stack = inventory.insertItemInternal(i, stack, false); + /** + * Tries to break a block as if this player had broken it. This is a complex operation. + * @param stack The player's current held stack, main hand. + * @param world The player's world. + * @param player The player that is breaking this block. + * @param pos The pos to break. + * @return If the break was successful. + */ + public static boolean breakExtraBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos) { + IBlockState state = world.getBlockState(pos); + Block block = state.getBlock(); - if (!StackUtil.isValid(stack)) { - working++; - break; - } - } - } else { - working++; - } - } + if (player.capabilities.isCreativeMode) { + if (block.removedByPlayer(state, world, pos, player, false)) { + block.onBlockDestroyedByPlayer(world, pos, state); + } - //Load the slots again - if (!actuallyDo) { - for (int i = 0; i < backupSlots.length; i++) { - inventory.setStackInSlot(i, StackUtil.validateCheck(backupSlots[i])); - } - } + // send update to client + if (!world.isRemote) { + ((EntityPlayerMP) player).connection.sendPacket(new SPacketBlockChange(world, pos)); + } + return true; + } - return working >= stacks.size(); - } + // callback to the tool the player uses. Called on both sides. This damages the tool n stuff. + stack.onBlockDestroyed(world, state, pos, player); - public static int findFirstFilledSlot(ItemStackHandlerCustom slots) { - for (int i = 0; i < slots.getSlots(); i++) { - if (StackUtil.isValid(slots.getStackInSlot(i))) { return i; } - } - return 0; - } + // server sided handling + if (!world.isRemote) { + // send the blockbreak event + int xp = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP) player).interactionManager.getGameType(), (EntityPlayerMP) player, pos); + if (xp == -1) return false; - public static RayTraceResult getNearestPositionWithAir(World world, EntityPlayer player, int reach) { - return getMovingObjectPosWithReachDistance(world, player, reach, false, false, true); - } + TileEntity tileEntity = world.getTileEntity(pos); + if (block.removedByPlayer(state, world, pos, player, true)) { // boolean is if block can be harvested, checked above + block.onBlockDestroyedByPlayer(world, pos, state); + block.harvestBlock(world, player, pos, state, tileEntity, stack); + block.dropXpOnBlockBreak(world, pos, xp); + } - private static RayTraceResult getMovingObjectPosWithReachDistance(World world, EntityPlayer player, double distance, boolean p1, boolean p2, boolean p3) { - float f = player.rotationPitch; - float f1 = player.rotationYaw; - double d0 = player.posX; - double d1 = player.posY + (double) player.getEyeHeight(); - double d2 = player.posZ; - Vec3d vec3 = new Vec3d(d0, d1, d2); - float f2 = MathHelper.cos(-f1 * 0.017453292F - (float) Math.PI); - float f3 = MathHelper.sin(-f1 * 0.017453292F - (float) Math.PI); - float f4 = -MathHelper.cos(-f * 0.017453292F); - float f5 = MathHelper.sin(-f * 0.017453292F); - float f6 = f3 * f4; - float f7 = f2 * f4; - Vec3d vec31 = vec3.addVector((double) f6 * distance, (double) f5 * distance, (double) f7 * distance); - return world.rayTraceBlocks(vec3, vec31, p1, p2, p3); - } + // always send block update to client + ((EntityPlayerMP) player).connection.sendPacket(new SPacketBlockChange(world, pos)); + return true; + } + // client sided handling + else { + // clientside we do a "this block has been clicked on long enough to be broken" call. This should not send any new packets + // the code above, executed on the server, sends a block-updates that give us the correct state of the block we destroy. - public static RayTraceResult getNearestBlockWithDefaultReachDistance(World world, EntityPlayer player) { - return getNearestBlockWithDefaultReachDistance(world, player, false, true, false); - } + // following code can be found in PlayerControllerMP.onPlayerDestroyBlock + world.playEvent(2001, pos, Block.getStateId(state)); + if (block.removedByPlayer(state, world, pos, player, true)) { + block.onBlockDestroyedByPlayer(world, pos, state); + } + // callback to the tool + stack.onBlockDestroyed(world, state, pos, player); - public static RayTraceResult getNearestBlockWithDefaultReachDistance(World world, EntityPlayer player, boolean stopOnLiquids, boolean ignoreBlockWithoutBoundingBox, boolean returnLastUncollidableBlock) { - return getMovingObjectPosWithReachDistance(world, player, player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue(), stopOnLiquids, ignoreBlockWithoutBoundingBox, returnLastUncollidableBlock); - } - - public static void setHandItemWithoutAnnoyingSound(EntityPlayer player, EnumHand hand, ItemStack stack) { - if (hand == EnumHand.MAIN_HAND) { - player.inventory.mainInventory.set(player.inventory.currentItem, stack); - } else if (hand == EnumHand.OFF_HAND) { - player.inventory.offHandInventory.set(0, stack); - } - } - - public static float fireFakeHarvestEventsForDropChance(NonNullList drops, World world, BlockPos pos) { - if (world instanceof WorldServer) { - FakePlayer fake = FakePlayerFactory.getMinecraft((WorldServer) world); - IBlockState state = world.getBlockState(pos); - - BreakEvent event = new BreakEvent(world, pos, state, fake); - if (!MinecraftForge.EVENT_BUS.post(event)) { return ForgeEventFactory.fireBlockHarvesting(drops, world, pos, state, 0, 1, false, fake); } - } - return 0F; - } - - //Stolen from TiC - public static boolean breakExtraBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos) { - IBlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - - if (player.capabilities.isCreativeMode) { - if (block.removedByPlayer(state, world, pos, player, false)) { - block.onBlockDestroyedByPlayer(world, pos, state); - } - - // send update to client - if (!world.isRemote) { - ((EntityPlayerMP) player).connection.sendPacket(new SPacketBlockChange(world, pos)); - } - return true; - } - - // callback to the tool the player uses. Called on both sides. This damages the tool n stuff. - stack.onBlockDestroyed(world, state, pos, player); - - // server sided handling - if (!world.isRemote) { - // send the blockbreak event - int xp = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP) player).interactionManager.getGameType(), (EntityPlayerMP) player, pos); - if (xp == -1) return false; - - TileEntity tileEntity = world.getTileEntity(pos); - if (block.removedByPlayer(state, world, pos, player, true)) { // boolean is if block can be harvested, checked above - block.onBlockDestroyedByPlayer(world, pos, state); - block.harvestBlock(world, player, pos, state, tileEntity, stack); - block.dropXpOnBlockBreak(world, pos, xp); - } - - // always send block update to client - ((EntityPlayerMP) player).connection.sendPacket(new SPacketBlockChange(world, pos)); - return true; - } - // client sided handling - else { - // clientside we do a "this block has been clicked on long enough to be broken" call. This should not send any new packets - // the code above, executed on the server, sends a block-updates that give us the correct state of the block we destroy. - - // following code can be found in PlayerControllerMP.onPlayerDestroyBlock - world.playEvent(2001, pos, Block.getStateId(state)); - if (block.removedByPlayer(state, world, pos, player, true)) { - block.onBlockDestroyedByPlayer(world, pos, state); - } - // callback to the tool - stack.onBlockDestroyed(world, state, pos, player); - - // send an update to the server, so we get an update back - ActuallyAdditions.PROXY.sendBreakPacket(pos); - return true; - } - } + // send an update to the server, so we get an update back + ActuallyAdditions.PROXY.sendBreakPacket(pos); + return true; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CommonCapsUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CommonCapsUtil.java index af2db2662..dbc3e2310 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CommonCapsUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CommonCapsUtil.java @@ -24,7 +24,7 @@ public final class CommonCapsUtil{ return new DefaultSlotlessItemHandlerWrapper(normalHandler){ @Override public ItemStack insertItem(ItemStack stack, boolean simulate){ - ItemStack remain = StackUtil.validateCopy(stack); + ItemStack remain = stack.copy(); for(SlotlessItemHandlerInfo handler : tile.slotlessInfos){ if(handler.isLoaded() && tile.isWhitelisted(handler, stack, false)){ if(handler.handler instanceof ISlotlessItemHandler){