diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java index 335fa25990..4618a67d8e 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusLogic.java @@ -1,17 +1,29 @@ package WayofTime.alchemicalWizardry.api; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; public class RoutingFocusLogic { public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) { - return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() - && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() - : true) - : false); + return (keyStack != null && keyStack.getItem() != null + && checkedStack != null + && keyStack.getItem() == checkedStack.getItem() + && (!keyStack.getItem().getHasSubtypes() || keyStack.getItemDamage() == checkedStack.getItemDamage())); } public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) { return previous || this.getDefaultMatch(keyStack, checkedStack); } + + public List getDescription() { + return new ArrayList<>( + Collections.singletonList( + StatCollector.translateToLocal("tooltip.routingFocus.logic") + " " + + StatCollector.translateToLocal("item.outputRoutingFocus.default.logic"))); + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java index 4f5c6cc34a..bcd906eedc 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java +++ b/src/main/java/WayofTime/alchemicalWizardry/api/RoutingFocusParadigm.java @@ -7,9 +7,11 @@ public class RoutingFocusParadigm { - public List logicList = new LinkedList(); + public List logicList = new LinkedList<>(); - public List locationList = new LinkedList(); + public List locationList = new LinkedList<>(); + + public List nameList = new LinkedList<>(); public int maximumAmount = 0; @@ -24,6 +26,14 @@ public void addLogic(RoutingFocusLogic logic) { logicList.add(logic); } + public void addName(String name) { + nameList.add(name); + } + + public boolean doesNameMatch(String name) { + return nameList.contains(name); + } + public boolean doesItemMatch(ItemStack keyStack, ItemStack checkedStack) { boolean isGood = false; boolean isFirst = true; @@ -42,6 +52,7 @@ public boolean doesItemMatch(ItemStack keyStack, ItemStack checkedStack) { public void clear() { logicList.clear(); locationList.clear(); + nameList.clear(); maximumAmount = 0; } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java index 76879eda7d..ef63cbe562 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/OutputRoutingFocus.java @@ -32,8 +32,11 @@ public OutputRoutingFocus() { } @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) { + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, + boolean par4) { super.addInformation(par1ItemStack, par2EntityPlayer, par3List, par4); + if (!(par1ItemStack.getItem() instanceof OutputRoutingFocus focus)) return; + par3List.addAll(focus.getLogic(par1ItemStack).getDescription()); if (!(par1ItemStack.getTagCompound() == null)) { int limit = this.getRoutingFocusLimit(par1ItemStack); @@ -55,49 +58,18 @@ public void registerIcons(IIconRegister iconRegister) { @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int damage) { - switch (damage) { - case 0: - return this.itemIcon; - case 1: - return this.modItemIcon; - case 2: - return this.ignMetaIcon; - case 3: - return this.matchNBTIcon; - case 4: - return this.globalIcon; - } - return this.itemIcon; - } - - @Override - public String getUnlocalizedName(ItemStack itemStack) { - String addedString = ""; - - switch (itemStack.getItemDamage()) { - case 0: - addedString = "default"; - break; - case 1: - addedString = "modItem"; - break; - case 2: - addedString = "ignMeta"; - break; - case 3: - addedString = "matchNBT"; - break; - case 4: - addedString = "global"; - break; - } - - return super.getUnlocalizedName() + "." + addedString; + return switch (damage) { + case 1 -> this.modItemIcon; + case 2 -> this.ignMetaIcon; + case 3 -> this.matchNBTIcon; + case 4 -> this.globalIcon; + default -> this.itemIcon; + }; } @Override @SideOnly(Side.CLIENT) - public void getSubItems(Item id, CreativeTabs creativeTab, List list) { + public void getSubItems(Item id, CreativeTabs creativeTab, List list) { for (int meta = 0; meta < 5; ++meta) { list.add(new ItemStack(id, 1, meta)); } @@ -106,18 +78,14 @@ public void getSubItems(Item id, CreativeTabs creativeTab, List list) { @Override public RoutingFocusLogic getLogic(ItemStack itemStack) { if (itemStack != null) { - switch (itemStack.getItemDamage()) { - case 0: - return new RoutingFocusLogicLimitDefault(itemStack); - case 1: - return new RoutingFocusLogicLimitModItems(itemStack); - case 2: - return new RoutingFocusLogicLimitIgnMeta(itemStack); - case 3: - return new RoutingFocusLogicLimitMatchNBT(itemStack); - case 4: - return new RoutingFocusLogicLimitGlobal(itemStack); - } + return switch (itemStack.getItemDamage()) { + case 0 -> new RoutingFocusLogicLimitDefault(itemStack); + case 1 -> new RoutingFocusLogicLimitModItems(itemStack); + case 2 -> new RoutingFocusLogicLimitIgnMeta(itemStack); + case 3 -> new RoutingFocusLogicLimitMatchNBT(itemStack); + case 4 -> new RoutingFocusLogicLimitGlobal(itemStack); + default -> new RoutingFocusLogic(); + }; } return new RoutingFocusLogic(); diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java index 0718af505c..5638605486 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/routing/RoutingFocus.java @@ -74,7 +74,8 @@ public void setSetDirection(ItemStack itemStack, ForgeDirection dir) { } @Override - public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) { + public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, + boolean par4) { par3List.add(StatCollector.translateToLocal(this.getFocusDescription())); if (!(par1ItemStack.getTagCompound() == null)) { @@ -89,7 +90,9 @@ public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlaye + itemTag.getInteger("zCoord")); par3List.add( StatCollector.translateToLocal("tooltip.alchemy.direction") + " " - + this.getSetDirection(par1ItemStack)); + + StatCollector.translateToLocal( + "message.ritual.side." + + this.getSetDirection(par1ItemStack).toString().toLowerCase())); } } @@ -168,4 +171,17 @@ public int zCoord(ItemStack itemStack) { public RoutingFocusLogic getLogic(ItemStack itemStack) { return new RoutingFocusLogic(); } + + public String getName(ItemStack stack) { + if (stack.hasTagCompound()) { + NBTTagCompound tag = stack.getTagCompound(); + if (tag.hasKey("display", 10)) { + NBTTagCompound display = tag.getCompoundTag("display"); + if (display.hasKey("Name", 8)) { + return display.getString("Name"); + } + } + } + return ""; + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java index cb83930b29..f02f49491c 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/rituals/RitualEffectItemRouting.java @@ -1,10 +1,7 @@ package WayofTime.alchemicalWizardry.common.rituals; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Random; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; @@ -20,226 +17,142 @@ import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; import WayofTime.alchemicalWizardry.common.items.routing.InputRoutingFocus; import WayofTime.alchemicalWizardry.common.items.routing.OutputRoutingFocus; import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper; public class RitualEffectItemRouting extends RitualEffect { - Random rand = new Random(); + private static final Int3[] INPUT_BUFFER_LOCATIONS = { new Int3(1, 0, 0), new Int3(-1, 0, 0), new Int3(0, 0, 1), + new Int3(0, 0, -1) }; + + private static final Int3[] OUTPUT_BUFFER_LOCATIONS = { new Int3(2, 0, 2), new Int3(-2, 0, 2), new Int3(2, 0, -2), + new Int3(-2, 0, -2) }; @Override public void performEffect(IMasterRitualStone ritualStone) { - String owner = ritualStone.getOwner(); - - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); World world = ritualStone.getWorld(); int x = ritualStone.getXCoord(); int y = ritualStone.getYCoord(); int z = ritualStone.getZCoord(); - if (world.getTotalWorldTime() % 20 != 0) { - return; - } + if (world.getTotalWorldTime() % 20 != 0) return; - Map tileMap = new HashMap(); + List outputFocusChests = findBufferChests(world, x, y, z, OUTPUT_BUFFER_LOCATIONS); + if (outputFocusChests.isEmpty()) return; - List outputList = new ArrayList(); - for (int i = 0; i < 4; i++) // Check output foci chests, return if none available - { - Int3 outputFocusChest = this.getOutputBufferChestLocation(i); - TileEntity outputFocusInv = world.getTileEntity( - x + outputFocusChest.xCoord, - y + outputFocusChest.yCoord, - z + outputFocusChest.zCoord); - if (outputFocusInv instanceof IInventory) { - outputList.add((IInventory) outputFocusInv); - } - } + List inputFocusChests = findBufferChests(world, x, y, z, INPUT_BUFFER_LOCATIONS); + if (inputFocusChests.isEmpty()) return; - if (outputList.isEmpty()) { - return; + for (IInventory outputFoci : outputFocusChests) { + processOutputFoci(world, outputFoci, inputFocusChests); } + } - for (IInventory outputFocusInventory : outputList) { - { - OutputRoutingFocus outputFocus;; - - RoutingFocusParadigm parad = new RoutingFocusParadigm(); - - TileEntity outputChest = null; // Destination - ForgeDirection inputDirection; - - { - IInventory outputChestInventory = null; - - boolean lastItemWasFocus = true; - - for (int j = 0; j < outputFocusInventory.getSizeInventory(); j++) { - ItemStack keyStack = outputFocusInventory.getStackInSlot(j); - if (keyStack == null) { - continue; - } - - if (keyStack.getItem() instanceof OutputRoutingFocus) { - if (!lastItemWasFocus) { - parad.clear(); - } - - outputFocus = (OutputRoutingFocus) keyStack.getItem(); - - parad.addRoutingFocusPosAndFacing(outputFocus.getPosAndFacing(keyStack)); - parad.addLogic(outputFocus.getLogic(keyStack)); - lastItemWasFocus = true; - continue; - } else { - lastItemWasFocus = false; - } - - for (RoutingFocusPosAndFacing posAndFacing : parad.locationList) { - if (posAndFacing == null) { - continue; - } - inputDirection = posAndFacing.facing; - if (outputChest == null || !posAndFacing.location - .equals(new Int3(outputChest.xCoord, outputChest.yCoord, outputChest.zCoord))) { - outputChest = world.getTileEntity( - posAndFacing.location.xCoord, - posAndFacing.location.yCoord, - posAndFacing.location.zCoord); - if (outputChest instanceof IInventory) { - outputChestInventory = (IInventory) outputChest; - } else { - continue; - } - } - - for (int i = 0; i < 4; i++) { - Int3 inputFocusChest = this.getInputBufferChestLocation(i); - TileEntity inputFocusInv = world.getTileEntity( - x + inputFocusChest.xCoord, - y + inputFocusChest.yCoord, - z + inputFocusChest.zCoord); - if (inputFocusInv instanceof IInventory) { - for (int ji = 0; ji < ((IInventory) inputFocusInv).getSizeInventory(); ji++) // Iterate - // through - // foci - // inventory - { - ItemStack inputFocusStack = ((IInventory) inputFocusInv).getStackInSlot(ji); - if (inputFocusStack != null - && inputFocusStack.getItem() instanceof InputRoutingFocus) { - InputRoutingFocus inputFocus = (InputRoutingFocus) inputFocusStack - .getItem(); - TileEntity inputChest = world.getTileEntity( - inputFocus.xCoord(inputFocusStack), - inputFocus.yCoord(inputFocusStack), - inputFocus.zCoord(inputFocusStack)); - if (inputChest instanceof IInventory) { - IInventory inputChestInventory = (IInventory) inputChest; - ForgeDirection syphonDirection = inputFocus - .getSetDirection(inputFocusStack); - boolean[] canSyphonList = new boolean[inputChestInventory - .getSizeInventory()]; - if (inputChest instanceof ISidedInventory) { - int[] validSlots = ((ISidedInventory) inputChest) - .getAccessibleSlotsFromSide(syphonDirection.ordinal()); - for (int in : validSlots) { - canSyphonList[in] = true; - } - } else { - for (int ni = 0; ni - < inputChestInventory.getSizeInventory(); ni++) { - canSyphonList[ni] = true; - } - } - - for (int ni = 0; ni < inputChestInventory.getSizeInventory(); ni++) { - if (canSyphonList[ni]) { - ItemStack syphonedStack = inputChestInventory - .getStackInSlot(ni); // Has a syphoned item linked, next - // need to find a - // destination - if (syphonedStack == null - || (inputChestInventory instanceof ISidedInventory - && !((ISidedInventory) inputChestInventory) - .canExtractItem( - ni, - syphonedStack, - syphonDirection.ordinal()))) { - continue; - } + private void processOutputFoci(World world, IInventory outputFoci, List inputFocusChests) { + RoutingFocusParadigm paradigm = new RoutingFocusParadigm(); + boolean lastItemWasFocus = true; + + for (int i = 0; i < outputFoci.getSizeInventory(); i++) { + ItemStack keyStack = outputFoci.getStackInSlot(i); + if (keyStack == null) continue; + + if (keyStack.getItem() instanceof OutputRoutingFocus outputFocus) { + if (!lastItemWasFocus) paradigm.clear(); + paradigm.addRoutingFocusPosAndFacing(outputFocus.getPosAndFacing(keyStack)); + paradigm.addLogic(outputFocus.getLogic(keyStack)); + paradigm.addName(outputFocus.getName(keyStack)); + lastItemWasFocus = true; + continue; + } + lastItemWasFocus = false; - int size = syphonedStack.stackSize; + for (RoutingFocusPosAndFacing posAndFacing : paradigm.locationList) { + if (posAndFacing == null) continue; + ForgeDirection inputDirection = posAndFacing.facing; + TileEntity outputTarget = world.getTileEntity( + posAndFacing.location.xCoord, + posAndFacing.location.yCoord, + posAndFacing.location.zCoord); - if (parad.doesItemMatch(keyStack, syphonedStack)) { - ItemStack newStack = null; - if (parad.maximumAmount <= 0) { - newStack = SpellHelper.insertStackIntoInventory( - syphonedStack, - outputChestInventory, - inputDirection); - } else { - newStack = SpellHelper.insertStackIntoInventory( - syphonedStack, - outputChestInventory, - inputDirection, - parad.maximumAmount); - } - if (size == newStack.stackSize) { - continue; - } + if (!(outputTarget instanceof IInventory outputInventory)) continue; - int numberSyphoned = size - newStack.stackSize; + for (IInventory inputFoci : inputFocusChests) { + processInputFoci(world, inputFoci, keyStack, paradigm, outputInventory, inputDirection); + } + } + } + } - if (newStack != null && newStack.stackSize <= 0) { - size = newStack.stackSize; - newStack = null; - } - inputChestInventory.setInventorySlotContents(ni, newStack); - // break; - } - } - } - } - } - } - } - } - } - } + private void processInputFoci(World world, IInventory inputFoci, ItemStack keyStack, RoutingFocusParadigm paradigm, + IInventory outputInventory, ForgeDirection inputDirection) { + for (int i = 0; i < inputFoci.getSizeInventory(); i++) { + ItemStack inputFocusStack = inputFoci.getStackInSlot(i); + if (inputFocusStack == null || !(inputFocusStack.getItem() instanceof InputRoutingFocus inputFocus)) + continue; + if (!paradigm.doesNameMatch(inputFocus.getName(inputFocusStack))) continue; + + TileEntity inputTarget = world.getTileEntity( + inputFocus.xCoord(inputFocusStack), + inputFocus.yCoord(inputFocusStack), + inputFocus.zCoord(inputFocusStack)); + + if (!(inputTarget instanceof IInventory inputChest)) continue; + + boolean[] slotList = checkSlots(inputChest, inputFocus.getSetDirection(inputFocusStack)); + + for (int j = 0; j < inputChest.getSizeInventory(); j++) { + if (!slotList[j]) continue; + ItemStack syphonedStack = inputChest.getStackInSlot(j); + if (!canExtractItem(inputChest, j, syphonedStack, inputFocus.getSetDirection(inputFocusStack))) + continue; + + if (paradigm.doesItemMatch(keyStack, syphonedStack)) { + ItemStack newStack = insertStackWithLimit( + syphonedStack, + outputInventory, + inputDirection, + paradigm.maximumAmount); + inputChest.setInventorySlotContents( + j, + (newStack != null && newStack.stackSize > 0) ? newStack : null); } } } } - public Int3 getInputBufferChestLocation(int number) { - switch (number) { - case 0: - return new Int3(1, 0, 0); - case 1: - return new Int3(-1, 0, 0); - case 2: - return new Int3(0, 0, 1); - case 3: - return new Int3(0, 0, -1); + private boolean[] checkSlots(IInventory inventory, ForgeDirection direction) { + boolean[] result = new boolean[inventory.getSizeInventory()]; + if (inventory instanceof ISidedInventory sidedInv) { + int[] validSlots = sidedInv.getAccessibleSlotsFromSide(direction.ordinal()); + for (int slot : validSlots) result[slot] = true; + } else { + for (int i = 0; i < inventory.getSizeInventory(); i++) result[i] = true; } - return new Int3(0, 0, 0); + return result; + } + + private boolean canExtractItem(IInventory inventory, int slot, ItemStack stack, ForgeDirection direction) { + return stack != null && (!(inventory instanceof ISidedInventory) + || ((ISidedInventory) inventory).canExtractItem(slot, stack, direction.ordinal())); } - public Int3 getOutputBufferChestLocation(int number) { - switch (number) { - case 0: - return new Int3(2, 0, 2); - case 1: - return new Int3(-2, 0, 2); - case 2: - return new Int3(2, 0, -2); - case 3: - return new Int3(-2, 0, -2); + private ItemStack insertStackWithLimit(ItemStack stack, IInventory inventory, ForgeDirection direction, + int maxAmount) { + return maxAmount <= 0 ? SpellHelper.insertStackIntoInventory(stack, inventory, direction) + : SpellHelper.insertStackIntoInventory(stack, inventory, direction, maxAmount); + } + + private List findBufferChests(World world, int x, int y, int z, Int3[] locations) { + List chestList = new ArrayList<>(); + for (Int3 chestLocation : locations) { + TileEntity tileEntity = world + .getTileEntity(x + chestLocation.xCoord, y + chestLocation.yCoord, z + chestLocation.zCoord); + if (tileEntity instanceof IInventory inv) { + chestList.add(inv); + } } - return new Int3(0, 0, 0); + return chestList; } @Override @@ -249,14 +162,14 @@ public int getCostPerRefresh() { @Override public List getRitualComponentList() { - ArrayList omegaRitual = new ArrayList(); + ArrayList itemRoutingRitual = new ArrayList<>(); - this.addCornerRunes(omegaRitual, 1, 0, RitualComponent.BLANK); - this.addOffsetRunes(omegaRitual, 2, 1, 0, RitualComponent.FIRE); - this.addParallelRunes(omegaRitual, 4, 0, RitualComponent.WATER); - this.addParallelRunes(omegaRitual, 5, 0, RitualComponent.EARTH); - this.addCornerRunes(omegaRitual, 4, 0, RitualComponent.WATER); + this.addCornerRunes(itemRoutingRitual, 1, 0, RitualComponent.BLANK); + this.addOffsetRunes(itemRoutingRitual, 2, 1, 0, RitualComponent.FIRE); + this.addParallelRunes(itemRoutingRitual, 4, 0, RitualComponent.WATER); + this.addParallelRunes(itemRoutingRitual, 5, 0, RitualComponent.EARTH); + this.addCornerRunes(itemRoutingRitual, 4, 0, RitualComponent.WATER); - return omegaRitual; + return itemRoutingRitual; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicIgnMeta.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicIgnMeta.java index 78f4335bd6..443adeb6e5 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicIgnMeta.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicIgnMeta.java @@ -1,6 +1,11 @@ package WayofTime.alchemicalWizardry.common.routing; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; @@ -8,6 +13,14 @@ public class RoutingFocusLogicIgnMeta extends RoutingFocusLogic { @Override public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) { - return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() : false); + return (keyStack != null && checkedStack != null && keyStack.getItem() == checkedStack.getItem()); + } + + @Override + public List getDescription() { + return new ArrayList<>( + Collections.singletonList( + StatCollector.translateToLocal("tooltip.routingFocus.logic") + " " + + StatCollector.translateToLocal("item.outputRoutingFocus.ignMeta.logic"))); } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitDefault.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitDefault.java index 5e1de4f06e..0a67b80724 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitDefault.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitDefault.java @@ -11,8 +11,6 @@ public class RoutingFocusLogicLimitDefault extends RoutingFocusLogicLimit { public RoutingFocusLogicLimitDefault(ItemStack stack) { if (stack != null && stack.getItem() instanceof ILimitedRoutingFocus) { limit = ((ILimitedRoutingFocus) stack.getItem()).getRoutingFocusLimit(stack); - } else { - limit = 0; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitGlobal.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitGlobal.java index 0ab0595bb6..079dfa62bb 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitGlobal.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitGlobal.java @@ -1,6 +1,11 @@ package WayofTime.alchemicalWizardry.common.routing; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus; @@ -11,8 +16,6 @@ public class RoutingFocusLogicLimitGlobal extends RoutingFocusLogicLimit { public RoutingFocusLogicLimitGlobal(ItemStack stack) { if (stack != null && stack.getItem() instanceof ILimitedRoutingFocus) { limit = ((ILimitedRoutingFocus) stack.getItem()).getRoutingFocusLimit(stack); - } else { - limit = 0; } } @@ -25,4 +28,12 @@ public int getRoutingLimit() { public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) { return true; } + + @Override + public List getDescription() { + return new ArrayList<>( + Collections.singletonList( + StatCollector.translateToLocal("tooltip.routingFocus.logic") + " " + + StatCollector.translateToLocal("item.outputRoutingFocus.global.logic"))); + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitIgnMeta.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitIgnMeta.java index dfaff296d7..efb2e2952b 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitIgnMeta.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitIgnMeta.java @@ -12,8 +12,6 @@ public class RoutingFocusLogicLimitIgnMeta extends RoutingFocusLogicIgnMeta impl public RoutingFocusLogicLimitIgnMeta(ItemStack stack) { if (stack != null && stack.getItem() instanceof ILimitedRoutingFocus) { limit = ((ILimitedRoutingFocus) stack.getItem()).getRoutingFocusLimit(stack); - } else { - limit = 0; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitMatchNBT.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitMatchNBT.java index f6da8c8068..86d398acde 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitMatchNBT.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitMatchNBT.java @@ -12,8 +12,6 @@ public class RoutingFocusLogicLimitMatchNBT extends RoutingFocusLogicMatchNBT im public RoutingFocusLogicLimitMatchNBT(ItemStack stack) { if (stack != null && stack.getItem() instanceof ILimitedRoutingFocus) { limit = ((ILimitedRoutingFocus) stack.getItem()).getRoutingFocusLimit(stack); - } else { - limit = 0; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitModItems.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitModItems.java index 41a8b8cf77..f47c6bcdf9 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitModItems.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicLimitModItems.java @@ -12,8 +12,6 @@ public class RoutingFocusLogicLimitModItems extends RoutingFocusLogicModItems im public RoutingFocusLogicLimitModItems(ItemStack stack) { if (stack != null && stack.getItem() instanceof ILimitedRoutingFocus) { limit = ((ILimitedRoutingFocus) stack.getItem()).getRoutingFocusLimit(stack); - } else { - limit = 0; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicMatchNBT.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicMatchNBT.java index 9bc8f65895..fe77a1d028 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicMatchNBT.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicMatchNBT.java @@ -1,20 +1,34 @@ package WayofTime.alchemicalWizardry.common.routing; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; public class RoutingFocusLogicMatchNBT extends RoutingFocusLogic { public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack) { - return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() - && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() - : true) - && keyStack.areItemStackTagsEqual(keyStack, checkedStack) : false); + return (keyStack != null && keyStack.getItem() != null + && checkedStack != null + && keyStack.getItem() == checkedStack.getItem() + && (!keyStack.getItem().getHasSubtypes() || keyStack.getItemDamage() == checkedStack.getItemDamage()) + && ItemStack.areItemStackTagsEqual(keyStack, checkedStack)); } @Override public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack) { return previous && this.getDefaultMatch(keyStack, checkedStack); } + + @Override + public List getDescription() { + return new ArrayList<>( + Collections.singletonList( + StatCollector.translateToLocal("tooltip.routingFocus.logic") + " " + + StatCollector.translateToLocal("item.outputRoutingFocus.matchNBT.logic"))); + } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicModItems.java b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicModItems.java index 8979fe3415..d233b0267a 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicModItems.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/routing/RoutingFocusLogicModItems.java @@ -1,7 +1,12 @@ package WayofTime.alchemicalWizardry.common.routing; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import WayofTime.alchemicalWizardry.api.RoutingFocusLogic; import cpw.mods.fml.common.registry.GameData; @@ -23,11 +28,19 @@ public String getModID(Item itm) { String str = GameData.getItemRegistry().getNameForObject(itm); if (!str.isEmpty()) { String[] strs = str.split(":"); - if (strs != null && strs.length >= 1) { + if (strs.length >= 1) { return strs[0]; } } return ""; } + + @Override + public List getDescription() { + return new ArrayList<>( + Collections.singletonList( + StatCollector.translateToLocal("tooltip.routingFocus.logic") + " " + + StatCollector.translateToLocal("item.outputRoutingFocus.modItem.logic"))); + } } diff --git a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang index 9c81054e95..42c180c3fd 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang @@ -230,11 +230,11 @@ item.itemMailCatalogue.name=Mail Order Catalogue item.inputRoutingFocus.name=Input Routing Focus item.bloodMagicBaseItem.EnderShard.name=Ender Shard item.outputRoutingFocus.name=Output Routing Focus -item.outputRoutingFocus.default.name=Default Output Routing Focus -item.outputRoutingFocus.modItem.name=Output Routing Focus (ModItem) -item.outputRoutingFocus.ignMeta.name=Output Routing Focus (Ignore Meta) -item.outputRoutingFocus.matchNBT.name=Output Routing Focus (MatchNBT) -item.outputRoutingFocus.global.name=Output Routing Focus (Global) +item.outputRoutingFocus.default.logic=Match Item & Meta +item.outputRoutingFocus.modItem.logic=Match Mod +item.outputRoutingFocus.ignMeta.logic=Match Item, Ignore Meta +item.outputRoutingFocus.matchNBT.logic=Match Item, Meta, & NBT +item.outputRoutingFocus.global.logic=Move Everything item.dawnScribeTool.name=Elemental Inscription Tool: Dawn item.boundHelmetEarth.name=Earth Omega Helmet item.boundPlateEarth.name=Earth Omega Plate @@ -533,6 +533,7 @@ tooltip.telepositionfocus.desc=An Enderpearl imbued with blood tooltip.voidsigil.desc=Better than a Swiffer! tooltip.watersigil.desc=Infinite water, anyone? tooltip.routingFocus.limit=Limit: +tooltip.routingFocus.logic=Logic: tooltip.routingFocus.desc=A focus used to route items tooltip.alchemy.usedinincense=Purifying incense used in a crucible @@ -566,6 +567,8 @@ message.masterstone.ritualresistyou=The ritual appears to actively resist you! message.masterstone.somethingstoppedyou=Something stopped you in your tracks... message.masterstone.youfeelapull=You feel a pull, but you are too weak to push any further. message.ritual.currentritual=Current Ritual: +message.ritual.side.up=UP +message.ritual.side.down=DOWN message.ritual.side.east=EAST message.ritual.side.north=NORTH message.ritual.side.south=SOUTH diff --git a/src/main/resources/assets/alchemicalwizardry/lang/ru_RU.lang b/src/main/resources/assets/alchemicalwizardry/lang/ru_RU.lang index f1ba65e343..611b6e9d6e 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/ru_RU.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/ru_RU.lang @@ -212,11 +212,7 @@ item.transcendentBloodOrb.name=Трансцендентальный кровав item.itemMailCatalogue.name=Mail Order Catalogue item.inputRoutingFocus.name=Фокус направления входа item.bloodMagicBaseItem.EnderShard.name=Осколок Края -item.outputRoutingFocus.default.name=Обычный фокус направления выхода -item.outputRoutingFocus.modItem.name=Фокус направления выхода (ModItem) -item.outputRoutingFocus.ignMeta.name=Фокус направления выхода (Ignore Meta) -item.outputRoutingFocus.matchNBT.name=Фокус направления выхода (MatchNBT) -item.outputRoutingFocus.global.name=Фокус направления выхода (Global) +item.outputRoutingFocus.name=фокус направления выхода item.dawnScribeTool.name=Elemental Inscription Tool: Dawn item.boundHelmetEarth.name=Земляной омега шлем item.boundPlateEarth.name=Земляная омега кираса @@ -444,6 +440,8 @@ message.masterstone.ritualresistyou=Ритуал, кажется, защищае message.masterstone.somethingstoppedyou=Что-то останавливает Вас... message.masterstone.youfeelapull=Вы чувствуете втягивание, но Вы слишком слабы, чтобы толкать дальше. message.ritual.currentritual=Текущий ритуал: +message.ritual.side.up=ВВЕРХ +message.ritual.side.down=ВНИЗ message.ritual.side.east=ВОСТОК message.ritual.side.north=СЕВЕР message.ritual.side.south=ЮГ diff --git a/src/main/resources/assets/alchemicalwizardry/lang/zh_CN.lang b/src/main/resources/assets/alchemicalwizardry/lang/zh_CN.lang index 1605a9873e..afe950f46f 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/zh_CN.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/zh_CN.lang @@ -218,11 +218,11 @@ item.transcendentBloodOrb.name=卓越气血宝珠 item.itemMailCatalogue.name=邮购目录 item.inputRoutingFocus.name=输入路由核心 item.bloodMagicBaseItem.EnderShard.name=末影碎片 -item.outputRoutingFocus.default.name=输出路由核心(默认) -item.outputRoutingFocus.modItem.name=输出路由核心(模组物品) -item.outputRoutingFocus.ignMeta.name=输出路由核心(数据值忽视) -item.outputRoutingFocus.matchNBT.name=输出路由核心(NBT匹配) -item.outputRoutingFocus.global.name=输出路由核心(Global) +item.outputRoutingFocus.name=输出路由核心 +item.outputRoutingFocus.default.logic=默认 +item.outputRoutingFocus.modItem.logic=模组物品 +item.outputRoutingFocus.ignMeta.logic=数据值忽视 +item.outputRoutingFocus.matchNBT.logic=NBT匹配 item.dawnScribeTool.name=元素铭文:破晓 item.boundHelmetEarth.name=土`欧米伽头盔 item.boundPlateEarth.name=土`欧米伽胸甲 @@ -539,6 +539,8 @@ message.masterstone.ritualresistyou=仪式似乎在积极的抵抗你! message.masterstone.somethingstoppedyou=有什么东西使你的路径堵塞... message.masterstone.youfeelapull=你感到一股拉力,但没有足够的能量促进其发生. message.ritual.currentritual=目前仪式: +message.ritual.side.up=上 +message.ritual.side.down=下 message.ritual.side.east=东 message.ritual.side.north=北 message.ritual.side.south=南 diff --git a/src/main/resources/assets/alchemicalwizardry/lang/zh_TW.lang b/src/main/resources/assets/alchemicalwizardry/lang/zh_TW.lang index 8d649cf90a..a8e37fd267 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/zh_TW.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/zh_TW.lang @@ -213,11 +213,12 @@ item.transcendentBloodOrb.name=卓越氣血寶珠 item.itemMailCatalogue.name=Mail Order Catalogue item.inputRoutingFocus.name=Input Routing Focus item.bloodMagicBaseItem.EnderShard.name=Ender Shard -item.outputRoutingFocus.default.name=Default Output Routing Focus -item.outputRoutingFocus.modItem.name=Output Routing Focus (ModItem) -item.outputRoutingFocus.ignMeta.name=Output Routing Focus (Ignore Meta) -item.outputRoutingFocus.matchNBT.name=Output Routing Focus (MatchNBT) -item.outputRoutingFocus.global.name=Output Routing Focus (Global) +item.outputRoutingFocus.name=Default Output Routing Focus +item.outputRoutingFocus.default.logic=Match Item & Meta +item.outputRoutingFocus.modItem.logic=Match Mod +item.outputRoutingFocus.ignMeta.logic=Match Item, Ignore Meta +item.outputRoutingFocus.matchNBT.logic=Match Item, Meta, & NBT +item.outputRoutingFocus.global.logic=Move Everything item.dawnScribeTool.name=Elemental Inscription Tool: Dawn item.boundHelmetEarth.name=Earth Omega Helmet item.boundPlateEarth.name=Earth Omega Plate @@ -452,6 +453,8 @@ message.masterstone.ritualresistyou=The ritual appears to actively resist you! message.masterstone.somethingstoppedyou=Something stopped you in your tracks... message.masterstone.youfeelapull=You feel a pull, but you are too weak to push any further. message.ritual.currentritual=Current Ritual: +message.ritual.side.up=上 +message.ritual.side.down=下 message.ritual.side.east=東 message.ritual.side.north=北 message.ritual.side.south=南