From 4e465dffd1d289e6d5757929252e66cf0eee3249 Mon Sep 17 00:00:00 2001 From: Christina Berchtold Date: Fri, 24 Apr 2020 20:14:42 +0200 Subject: moved blocks and TEs into 'common' package --- .../common/tileentities/TE_ItemProxyEndpoint.java | 204 +++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 src/main/java/common/tileentities/TE_ItemProxyEndpoint.java (limited to 'src/main/java/common/tileentities/TE_ItemProxyEndpoint.java') diff --git a/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java b/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java new file mode 100644 index 0000000000..95bf32c52a --- /dev/null +++ b/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java @@ -0,0 +1,204 @@ +package common.tileentities; + +import java.util.HashSet; +import java.util.UUID; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory { + + private UUID channel = null; + private int subChannel = -1; + private IInventory proxyInventory = null; + private int tickCounter = 0; + private ItemStack[] slots = new ItemStack[2]; + + public void setChannel(UUID channel) { + this.channel = channel; + } + + public void setSubChannel(int subChannel) { + this.subChannel = subChannel; + } + + @Override + public void updateEntity() { + if(tickCounter == 20) { + + if(slots[1] == null || !slots[1].getUnlocalizedName().equals("gt.integrated_circuit") || slots[1].getItemDamage() >= 16) { + setSubChannel(-1); + } + + if(slots[1] != null && slots[1].getUnlocalizedName().equals("gt.integrated_circuit") && slots[1].getItemDamage() < 16) { + setSubChannel(slots[1].getItemDamage()); + } + + if(channel != null && subChannel != -1) { + TE_ItemProxySource source = searchSource(channel); + if(source != null) { + proxyInventory = source; + } + } + tickCounter = 0; + } + tickCounter++; + } + + public TE_ItemProxySource searchSource(UUID channel) { + + final HashSet sources = new HashSet<>(); + final HashSet visited = new HashSet<>(); + + for(ForgeDirection next : ForgeDirection.VALID_DIRECTIONS) { + final TileEntity te = super.getWorldObj().getTileEntity( + super.xCoord + next.offsetX, + super.yCoord + next.offsetY, + super.zCoord + next.offsetZ); + if(te instanceof TE_ItemProxyCable) { + final TE_ItemProxyCable cable = (TE_ItemProxyCable) te; + if(cable.isConnected(next.getOpposite())) { + searchSourceRecursive(sources, visited, next.getOpposite(), cable, channel); + } + } + } + + if(sources.isEmpty()) { + return null; + } else { + return sources.iterator().next(); + } + + } + + private void searchSourceRecursive(HashSet sources, HashSet visited, + ForgeDirection from, TE_ItemProxyCable nextTarget, UUID channel) { + + if(visited.contains(nextTarget.getIdentifier())) { + return; + } else { + visited.add(nextTarget.getIdentifier()); + + for(ForgeDirection next : ForgeDirection.VALID_DIRECTIONS) { + if(next == from || !nextTarget.isConnected(next)) { + continue; + } + final TileEntity te = super.getWorldObj().getTileEntity( + nextTarget.xCoord + next.offsetX, + nextTarget.yCoord + next.offsetY, + nextTarget.zCoord + next.offsetZ); + if(te instanceof TE_ItemProxyCable) { + final TE_ItemProxyCable cable = (TE_ItemProxyCable) te; + if(cable.isConnected(next.getOpposite())) { + searchSourceRecursive(sources, visited, next.getOpposite(), cable, channel); + } + } else if (te instanceof TE_ItemProxySource) { + final TE_ItemProxySource source = (TE_ItemProxySource) te; + if(source.getChannel().equals(channel)) { + sources.add((TE_ItemProxySource) te); + } + } + } + } + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int slot) { + if(slot == 0) { + return (proxyInventory != null) ? proxyInventory.getStackInSlot(subChannel) : null; + } else { + return slots[slot]; + } + } + + @Override + public ItemStack decrStackSize(int slot, int amount) { + if(slot == 0) { + return (proxyInventory != null) ? proxyInventory.decrStackSize(subChannel, amount) : null; + } else { + final ItemStack copy = slots[1].copy(); + slots[1] = null; + super.markDirty(); + return copy; + } + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) { + return (proxyInventory != null) ? proxyInventory.getStackInSlotOnClosing(subChannel) : null; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack itemStack) { + if(slot == 0 && proxyInventory != null) { + proxyInventory.setInventorySlotContents(subChannel, itemStack); + } else { + slots[slot] = itemStack; + } + } + + @Override + public String getInventoryName() { + return (proxyInventory != null) ? "Connected Proxy" : "Untethered Proxy"; + } + + @Override + public boolean hasCustomInventoryName() { + return true; + } + + @Override + public int getInventoryStackLimit() { + return (proxyInventory != null) ? proxyInventory.getInventoryStackLimit() : 1; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return true; + } + + @Override + public void openInventory() { + + } + + @Override + public void closeInventory() { + + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack itemStack) { + if(slot == 0 && proxyInventory != null) { + return proxyInventory.isItemValidForSlot(subChannel, itemStack); + } else { + return itemStack != null && itemStack.getUnlocalizedName().equals("gt.integrated_circuit"); + } + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + final int[] as = {0}; + return as; + } + + @Override + public boolean canInsertItem(int slot, ItemStack itemStack, int side) { + return isItemValidForSlot(slot, itemStack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack itemStack, int side) { + return (slot == 0) ? true : false; + } + +} -- cgit From 6045fc76bf08eeaf1e74c0a86200bf0288d8e3fa Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Sun, 17 May 2020 16:33:44 +0200 Subject: Massive code cleanup and rewrite for Item Proxy tech --- .../common/tileentities/TE_ItemProxyEndpoint.java | 115 ++++++++------------- 1 file changed, 45 insertions(+), 70 deletions(-) (limited to 'src/main/java/common/tileentities/TE_ItemProxyEndpoint.java') diff --git a/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java b/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java index 95bf32c52a..9587dacfe9 100644 --- a/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java +++ b/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java @@ -1,7 +1,6 @@ package common.tileentities; import java.util.HashSet; -import java.util.UUID; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -11,45 +10,33 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory { - - private UUID channel = null; - private int subChannel = -1; + + private byte channel = -1; private IInventory proxyInventory = null; private int tickCounter = 0; - private ItemStack[] slots = new ItemStack[2]; - - public void setChannel(UUID channel) { - this.channel = channel; + + public TE_ItemProxyEndpoint() { + channel = 0; } - - public void setSubChannel(int subChannel) { - this.subChannel = subChannel; + + public void setChannel(byte channel) { + this.channel = channel; } + + public int getChannel() { return channel; } @Override public void updateEntity() { if(tickCounter == 20) { - - if(slots[1] == null || !slots[1].getUnlocalizedName().equals("gt.integrated_circuit") || slots[1].getItemDamage() >= 16) { - setSubChannel(-1); - } - - if(slots[1] != null && slots[1].getUnlocalizedName().equals("gt.integrated_circuit") && slots[1].getItemDamage() < 16) { - setSubChannel(slots[1].getItemDamage()); - } - - if(channel != null && subChannel != -1) { - TE_ItemProxySource source = searchSource(channel); - if(source != null) { - proxyInventory = source; - } + if(channel != -1) { + proxyInventory = searchSource(); } tickCounter = 0; } tickCounter++; } - public TE_ItemProxySource searchSource(UUID channel) { + private TE_ItemProxySource searchSource() { final HashSet sources = new HashSet<>(); final HashSet visited = new HashSet<>(); @@ -62,7 +49,7 @@ public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory if(te instanceof TE_ItemProxyCable) { final TE_ItemProxyCable cable = (TE_ItemProxyCable) te; if(cable.isConnected(next.getOpposite())) { - searchSourceRecursive(sources, visited, next.getOpposite(), cable, channel); + searchSourceRecursive(sources, visited, next.getOpposite(), cable); } } } @@ -76,30 +63,24 @@ public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory } private void searchSourceRecursive(HashSet sources, HashSet visited, - ForgeDirection from, TE_ItemProxyCable nextTarget, UUID channel) { + ForgeDirection from, TE_ItemProxyCable nextTarget) { - if(visited.contains(nextTarget.getIdentifier())) { - return; - } else { + if(!visited.contains(nextTarget.getIdentifier())) { visited.add(nextTarget.getIdentifier()); - + for(ForgeDirection next : ForgeDirection.VALID_DIRECTIONS) { - if(next == from || !nextTarget.isConnected(next)) { - continue; - } - final TileEntity te = super.getWorldObj().getTileEntity( - nextTarget.xCoord + next.offsetX, - nextTarget.yCoord + next.offsetY, - nextTarget.zCoord + next.offsetZ); - if(te instanceof TE_ItemProxyCable) { - final TE_ItemProxyCable cable = (TE_ItemProxyCable) te; - if(cable.isConnected(next.getOpposite())) { - searchSourceRecursive(sources, visited, next.getOpposite(), cable, channel); - } - } else if (te instanceof TE_ItemProxySource) { - final TE_ItemProxySource source = (TE_ItemProxySource) te; - if(source.getChannel().equals(channel)) { - sources.add((TE_ItemProxySource) te); + if(next != from) { + final TileEntity te = super.getWorldObj().getTileEntity( + nextTarget.xCoord + next.offsetX, + nextTarget.yCoord + next.offsetY, + nextTarget.zCoord + next.offsetZ); + if(te instanceof TE_ItemProxyCable) { + final TE_ItemProxyCable cable = (TE_ItemProxyCable) te; + if(cable.isConnected(next.getOpposite())) { + searchSourceRecursive(sources, visited, next.getOpposite(), cable); + } + } else if (te instanceof TE_ItemProxySource) { + sources.add((TE_ItemProxySource) te); } } } @@ -108,41 +89,36 @@ public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory @Override public int getSizeInventory() { - return slots.length; + return 1; } @Override public ItemStack getStackInSlot(int slot) { - if(slot == 0) { - return (proxyInventory != null) ? proxyInventory.getStackInSlot(subChannel) : null; + if(proxyInventory != null && slot == 0) { + return proxyInventory.getStackInSlot(channel); } else { - return slots[slot]; + return null; } } @Override public ItemStack decrStackSize(int slot, int amount) { - if(slot == 0) { - return (proxyInventory != null) ? proxyInventory.decrStackSize(subChannel, amount) : null; + if(proxyInventory != null && slot == 0) { + return proxyInventory.decrStackSize(channel, amount); } else { - final ItemStack copy = slots[1].copy(); - slots[1] = null; - super.markDirty(); - return copy; + return null; } } @Override public ItemStack getStackInSlotOnClosing(int slot) { - return (proxyInventory != null) ? proxyInventory.getStackInSlotOnClosing(subChannel) : null; + return (proxyInventory != null) ? proxyInventory.getStackInSlotOnClosing(channel) : null; } @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { - if(slot == 0 && proxyInventory != null) { - proxyInventory.setInventorySlotContents(subChannel, itemStack); - } else { - slots[slot] = itemStack; + if(proxyInventory != null && slot == 0) { + proxyInventory.setInventorySlotContents(channel, itemStack); } } @@ -158,7 +134,7 @@ public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory @Override public int getInventoryStackLimit() { - return (proxyInventory != null) ? proxyInventory.getInventoryStackLimit() : 1; + return (proxyInventory != null) ? proxyInventory.getInventoryStackLimit() : 0; } @Override @@ -178,17 +154,16 @@ public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { - if(slot == 0 && proxyInventory != null) { - return proxyInventory.isItemValidForSlot(subChannel, itemStack); + if(proxyInventory != null && slot == 0) { + return proxyInventory.isItemValidForSlot(channel, itemStack); } else { - return itemStack != null && itemStack.getUnlocalizedName().equals("gt.integrated_circuit"); + return false; } } @Override public int[] getAccessibleSlotsFromSide(int side) { - final int[] as = {0}; - return as; + return new int[]{0}; } @Override @@ -198,7 +173,7 @@ public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory @Override public boolean canExtractItem(int slot, ItemStack itemStack, int side) { - return (slot == 0) ? true : false; + return slot == 0; } } -- cgit From ec69ac6b3277478aa66b8209ac528132b3875e18 Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Sun, 17 May 2020 16:47:33 +0200 Subject: Endpoint shows name of Source when connected --- src/main/java/common/tileentities/TE_ItemProxyEndpoint.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/common/tileentities/TE_ItemProxyEndpoint.java') diff --git a/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java b/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java index 9587dacfe9..1eca1ff3df 100644 --- a/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java +++ b/src/main/java/common/tileentities/TE_ItemProxyEndpoint.java @@ -124,7 +124,7 @@ public class TE_ItemProxyEndpoint extends TileEntity implements ISidedInventory @Override public String getInventoryName() { - return (proxyInventory != null) ? "Connected Proxy" : "Untethered Proxy"; + return (proxyInventory != null) ? "Connected: " + proxyInventory.getInventoryName() : "Untethered Proxy"; } @Override -- cgit