From 164ec9a1925dcf4c80818d3d223fe4fb63d8e7ba Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sat, 20 Jul 2024 20:28:13 -0400 Subject: [PATCH 01/11] Settings tool and first impl --- .../java/com/hbm/interfaces/ICopiable.java | 10 +++ src/main/java/com/hbm/items/ModItems.java | 3 + .../com/hbm/items/tool/ItemSettingsTool.java | 61 ++++++++++++++++++ .../tileentity/IControlReceiverFilter.java | 3 +- .../network/TileEntityCraneBase.java | 22 ++++++- .../hbm/textures/items/settings_tool.png | Bin 0 -> 356 bytes 6 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/hbm/interfaces/ICopiable.java create mode 100644 src/main/java/com/hbm/items/tool/ItemSettingsTool.java create mode 100644 src/main/resources/assets/hbm/textures/items/settings_tool.png diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java new file mode 100644 index 000000000..725ba5c12 --- /dev/null +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -0,0 +1,10 @@ +package com.hbm.interfaces; + +import net.minecraft.nbt.NBTTagCompound; + +public interface ICopiable { + + NBTTagCompound getSettings(); + + void pasteSettings(NBTTagCompound nbt); +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index a2a3f62d3..084b6d5bc 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1276,6 +1276,7 @@ public class ModItems { public static Item coupling_tool; public static Item drone_linker; public static Item radar_linker; + public static Item settings_tool; public static Item template_folder; public static Item journal_pip; @@ -4621,6 +4622,7 @@ public class ModItems { coupling_tool = new ItemCouplingTool().setUnlocalizedName("coupling_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coupling_tool"); drone_linker = new ItemDroneLinker().setUnlocalizedName("drone_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":drone_linker"); radar_linker = new ItemRadarLinker().setUnlocalizedName("radar_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radar_linker"); + settings_tool = new ItemSettingsTool().setUnlocalizedName("settings_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":settings_tool"); key = new ItemKey().setUnlocalizedName("key").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key"); key_red = new ItemCustomLore().setUnlocalizedName("key_red").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red"); @@ -6868,6 +6870,7 @@ public class ModItems { GameRegistry.registerItem(power_net_tool, power_net_tool.getUnlocalizedName()); GameRegistry.registerItem(analysis_tool, analysis_tool.getUnlocalizedName()); GameRegistry.registerItem(coupling_tool, coupling_tool.getUnlocalizedName()); + GameRegistry.registerItem(settings_tool, settings_tool.getUnlocalizedName()); GameRegistry.registerItem(dosimeter, dosimeter.getUnlocalizedName()); GameRegistry.registerItem(geiger_counter, geiger_counter.getUnlocalizedName()); GameRegistry.registerItem(digamma_diagnostic, digamma_diagnostic.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java new file mode 100644 index 000000000..6ac48382f --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -0,0 +1,61 @@ +package com.hbm.items.tool; + +import com.hbm.interfaces.ICopiable; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.network.IDroneLinkable; +import com.hbm.util.ChatBuilder; +import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemSettingsTool extends Item { + + + @SuppressWarnings("unchecked") + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + list.add("Can copy the settings (filters, fluid ID, etc) of machines"); + list.add("Shift right-click to copy, right click to paste"); + if(stack.stackTagCompound != null) { + NBTTagCompound nbt = stack.stackTagCompound; + list.add(EnumChatFormatting.YELLOW + "Current machine:" + + (nbt.hasKey("tileName") ? EnumChatFormatting.BLUE + " " + nbt.getString("tileName") : EnumChatFormatting.RED + " None ")); + } + + } + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { + if (!world.isRemote) { + TileEntity tile = world.getTileEntity(x, y, z); + + if (tile instanceof ICopiable) { + ICopiable te = ((ICopiable) tile); + + if (player.isSneaking()) { + stack.stackTagCompound = ((ICopiable) tile).getSettings(); + stack.stackTagCompound.setString("tileName", tile.getBlockType().getLocalizedName()); + + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + tile.getBlockType().getLocalizedName()).color(EnumChatFormatting.AQUA).flush()); + + } else if (stack.hasTagCompound()) { + te.pasteSettings(stack.stackTagCompound); + } + + + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 691066ac7..8834af6a9 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -2,13 +2,14 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -public interface IControlReceiverFilter extends IControlReceiver { +public interface IControlReceiverFilter extends IControlReceiver, ICopiable { void nextMode(int i); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 2158d0fe7..0d967a606 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.network; +import com.hbm.interfaces.ICopiable; import com.hbm.tileentity.TileEntityMachineBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; @@ -8,7 +9,7 @@ import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityCraneBase extends TileEntityMachineBase { +public abstract class TileEntityCraneBase extends TileEntityMachineBase implements ICopiable { public TileEntityCraneBase(int scount) { super(scount); @@ -101,4 +102,23 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase { super.writeToNBT(nbt); nbt.setByte("CraneOutputOverride", (byte) outputOverride.ordinal()); } + + @Override + public NBTTagCompound getSettings() { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("inputSide", getInputSide().ordinal()); + nbt.setInteger("outputSide", getOutputSide().ordinal()); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt) { + if(nbt.hasKey("outputSide")){ + outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); + onBlockChanged(); + } + if(nbt.hasKey("inputSide")) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + } + } } diff --git a/src/main/resources/assets/hbm/textures/items/settings_tool.png b/src/main/resources/assets/hbm/textures/items/settings_tool.png new file mode 100644 index 0000000000000000000000000000000000000000..331bb4e6209a7bdc04f7fd753ca9424d2300eb33 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufG}g$wN6f;;7?B%#}EtuWC_+AjtA8C{|``;IPl}eBa4Gc z=Fk2gJ$m#_fZmLLA7y4Wjb6sOe}6ia+I@{V9+*71y*>X=fSU80b^Cixm>3-pu$Z)t zX3SWUa)Be!_|g*fy?$^YMCx8 ze0X@6z3s>T&Hy2?-1g6V; Date: Sat, 3 Aug 2024 19:26:15 -0400 Subject: [PATCH 02/11] the power of friendship isn't working anymore I need to kill this motherfucker --- .../tileentity/IControlReceiverFilter.java | 62 ++++++++++++++++++- .../machine/TileEntityMachineAutocrafter.java | 17 +++-- .../storage/TileEntityMassStorage.java | 5 ++ .../network/TileEntityCraneExtractor.java | 9 ++- .../network/TileEntityCraneGrabber.java | 5 ++ .../network/TileEntityCraneRouter.java | 5 +- .../network/TileEntityDroneRequester.java | 5 ++ .../network/TileEntityRadioTorchCounter.java | 5 ++ 8 files changed, 104 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 8834af6a9..34099c176 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -3,18 +3,26 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.ICopiable; +import com.hbm.module.ModulePatternMatcher; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public interface IControlReceiverFilter extends IControlReceiver, ICopiable { void nextMode(int i); + /* + default ModulePatternMatcher getMatcher(){ + + }*/ + @Override - public default void receiveControl(NBTTagCompound data) { + default void receiveControl(NBTTagCompound data) { if(data.hasKey("slot")) { setFilterContents(data); } @@ -24,7 +32,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { * Expects the implementor to be a tile entity and an IInventory * @param nbt */ - public default void setFilterContents(NBTTagCompound nbt) { + default void setFilterContents(NBTTagCompound nbt) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; int slot = nbt.getInteger("slot"); @@ -32,4 +40,54 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); } + /** + * Used for the copy tool + * @return The start and end (start inclusive, end exclusive) of the filter slots of the TE + */ + int[] getFilterSlots(); + + @Override + default NBTTagCompound getSettings() { + IInventory inv = (IInventory) this; + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList tags = new NBTTagList(); + int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if(inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + nbt.setTag("items", tags); + + return nbt; + } + + @Override + default void pasteSettings(NBTTagCompound nbt) { + TileEntity tile = (TileEntity) this; + IInventory inv = (IInventory) this; + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + if(listSize > 0) { + int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + if (i < listSize) { + NBTTagCompound slotNBT = items.getCompoundTagAt(count); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + if (loadedStack != null) { + inv.setInventorySlotContents(slot + getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); + nextMode(slot); + tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); + } + } + count++; + } + + } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java index bda6f27bf..ffcab97e6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java @@ -187,7 +187,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen if(i > 9 && i < 19) { ItemStack filter = slots[i - 10]; - if(filter == null) return true; + if(filter == null || matcher.modes[i - 10] == null || matcher.modes[i - 10].isEmpty()) return true; return !matcher.isValidForFilter(filter, i - 10, stack); } @@ -213,7 +213,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen List validSlots = new ArrayList(); for(int i = 0; i < 9; i++) { ItemStack filter = slots[i]; - if(filter == null) continue; + if(filter == null || matcher.modes[i] == null || matcher.modes[i].isEmpty()) continue; if(matcher.isValidForFilter(filter, i, stack)) { validSlots.add(i + 10); @@ -347,12 +347,19 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen @Override public void setFilterContents(NBTTagCompound nbt) { - TileEntity tile = (TileEntity) this; - IInventory inv = (IInventory) this; + TileEntity tile = this; + IInventory inv = this; int slot = nbt.getInteger("slot"); if(slot > 8) return; - inv.setInventorySlotContents(slot, new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta"))); + ItemStack item = new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta")); + inv.setInventorySlotContents(slot, item); + matcher.initPatternSmart(getWorldObj(), item, slot); + updateTemplateGrid(); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); } + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 6db2f555f..031b2a03d 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -221,4 +221,9 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMassStorage(player.inventory, this); } + + @Override + public int[] getFilterSlots() { + return new int[]{1,2}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 628b3946c..86d7c3cb9 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -9,6 +9,7 @@ import com.hbm.items.ModItems; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.IGUIProvider; +import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -26,7 +27,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGUIProvider, IControlReceiver, IControlReceiverFilter { +public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGUIProvider, IControlReceiverFilter { public boolean isWhitelist = false; public ModulePatternMatcher matcher; @@ -256,4 +257,10 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU setFilterContents(data); } } + + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } + diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java index 26ed150ea..7d8233da6 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -190,6 +190,11 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } + @Override public void receiveControl(NBTTagCompound data) { if(data.hasKey("whitelist")) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index 6568f113b..a12e59851 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -120,7 +120,10 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } - + @Override + public int[] getFilterSlots() { + return new int[]{0, slots.length}; + } @Override public void receiveControl(NBTTagCompound data) { if(data.hasKey("toggle")) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java index faa21f615..7a572305a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java @@ -130,4 +130,9 @@ public class TileEntityDroneRequester extends TileEntityRequestNetworkContainer public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } + + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java index 4b4e18803..efac13a13 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java @@ -131,4 +131,9 @@ public class TileEntityRadioTorchCounter extends TileEntityMachineBase implement setFilterContents(data); } } + + @Override + public int[] getFilterSlots() { + return new int[]{0, slots.length}; + } } From 622330b4cf185d875052f5ec14581edbd0d466d1 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 5 Aug 2024 19:19:24 -0400 Subject: [PATCH 03/11] forgor --- .../network/TileEntityCraneBase.java | 54 +++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 0d967a606..3cc869118 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -1,11 +1,16 @@ package com.hbm.tileentity.network; import com.hbm.interfaces.ICopiable; +import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.TileEntityMachineBase; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; @@ -108,17 +113,60 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen NBTTagCompound nbt = new NBTTagCompound(); nbt.setInteger("inputSide", getInputSide().ordinal()); nbt.setInteger("outputSide", getOutputSide().ordinal()); + + if(this instanceof IControlReceiverFilter){ + IControlReceiverFilter filter = ((IControlReceiverFilter) this); + IInventory inv = this; + NBTTagList tags = new NBTTagList(); + int count = 0; + + for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if(inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + nbt.setTag("items", tags); + } + return nbt; } @Override public void pasteSettings(NBTTagCompound nbt) { - if(nbt.hasKey("outputSide")){ + if (nbt.hasKey("outputSide")) { outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); onBlockChanged(); } - if(nbt.hasKey("inputSide")) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + if (nbt.hasKey("inputSide")) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + } + + if (this instanceof IControlReceiverFilter) { + IControlReceiverFilter filter = ((IControlReceiverFilter) this); + IInventory inv = this; + + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + if (listSize > 0) { + int count = 0; + for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { + if (i < listSize) { + NBTTagCompound slotNBT = items.getCompoundTagAt(count); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + if (loadedStack != null) { + inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); + filter.nextMode(slot); + this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + } + count++; + } + } } } } From 1495dfc2b594b92f6879b6c92e41f0d2caad8ff9 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:38:15 -0400 Subject: [PATCH 04/11] pain --- .../java/com/hbm/handler/HbmKeybinds.java | 3 ++ .../java/com/hbm/interfaces/ICopiable.java | 2 +- .../com/hbm/items/tool/ItemSettingsTool.java | 48 +++++++++-------- .../tileentity/IControlReceiverFilter.java | 2 +- .../com/hbm/tileentity/IFluidCopiable.java | 54 +++++++++++++++++++ .../machine/TileEntityHeaterOilburner.java | 21 +++++++- .../TileEntityMachineCrystallizer.java | 3 +- .../machine/TileEntityMachineMixer.java | 18 +++++-- .../machine/storage/TileEntityBarrel.java | 13 ++++- .../storage/TileEntityMachineFluidTank.java | 18 ++++--- .../network/TileEntityCraneBase.java | 54 ++++++++++--------- .../network/TileEntityPipeBaseNT.java | 23 +++++++- src/main/java/com/hbm/util/BobMathUtil.java | 20 +++++-- 13 files changed, 210 insertions(+), 69 deletions(-) create mode 100644 src/main/java/com/hbm/tileentity/IFluidCopiable.java diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 6ae2507e1..39f59ced2 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -24,6 +24,7 @@ public class HbmKeybinds { public static KeyBinding reloadKey = new KeyBinding(category + ".reload", Keyboard.KEY_R, category); public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category); public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category); + public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyTool", Keyboard.KEY_LMENU, category); public static KeyBinding craneUpKey = new KeyBinding(category + ".craneMoveUp", Keyboard.KEY_UP, category); public static KeyBinding craneDownKey = new KeyBinding(category + ".craneMoveDown", Keyboard.KEY_DOWN, category); @@ -38,6 +39,7 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(reloadKey); ClientRegistry.registerKeyBinding(dashKey); ClientRegistry.registerKeyBinding(trainKey); + ClientRegistry.registerKeyBinding(copyToolAlt); ClientRegistry.registerKeyBinding(craneUpKey); ClientRegistry.registerKeyBinding(craneDownKey); @@ -72,6 +74,7 @@ public class HbmKeybinds { RELOAD, DASH, TRAIN, + COPY_TOOL, CRANE_UP, CRANE_DOWN, CRANE_LEFT, diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java index 725ba5c12..6e6d98996 100644 --- a/src/main/java/com/hbm/interfaces/ICopiable.java +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -6,5 +6,5 @@ public interface ICopiable { NBTTagCompound getSettings(); - void pasteSettings(NBTTagCompound nbt); + void pasteSettings(NBTTagCompound nbt, boolean alt); } diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index 6ac48382f..6aefa2905 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -1,7 +1,10 @@ package com.hbm.items.tool; +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; import com.hbm.interfaces.ICopiable; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityProxyBase; import com.hbm.tileentity.network.IDroneLinkable; import com.hbm.util.ChatBuilder; import com.hbm.util.fauxpointtwelve.BlockPos; @@ -33,29 +36,28 @@ public class ItemSettingsTool extends Item { } @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { - if (!world.isRemote) { - TileEntity tile = world.getTileEntity(x, y, z); - - if (tile instanceof ICopiable) { - ICopiable te = ((ICopiable) tile); - - if (player.isSneaking()) { - stack.stackTagCompound = ((ICopiable) tile).getSettings(); - stack.stackTagCompound.setString("tileName", tile.getBlockType().getLocalizedName()); - - player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) - .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) - .next("] ").color(EnumChatFormatting.DARK_AQUA) - .next("Copied settings of " + tile.getBlockType().getLocalizedName()).color(EnumChatFormatting.AQUA).flush()); - - } else if (stack.hasTagCompound()) { - te.pasteSettings(stack.stackTagCompound); - } - - - return true; - } + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityProxyBase){ + tile = ((TileEntityProxyBase) tile).getTE(); } - return false; + if (tile instanceof ICopiable) { + ICopiable te = ((ICopiable) tile); + + if (player.isSneaking()) { + stack.stackTagCompound = ((ICopiable) tile).getSettings(); + stack.stackTagCompound.setString("tileName", tile.getBlockType().getLocalizedName()); + + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + tile.getBlockType().getLocalizedName()).color(EnumChatFormatting.AQUA).flush()); + + } else if (stack.hasTagCompound()) { + boolean alt = HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.COPY_TOOL); + te.pasteSettings(stack.stackTagCompound, alt); + } + + } + return true; } } diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 34099c176..f2cd224f8 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -67,7 +67,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt) { + default void pasteSettings(NBTTagCompound nbt, boolean alt) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; NBTTagList items = nbt.getTagList("items", 10); diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java new file mode 100644 index 000000000..67b90580c --- /dev/null +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -0,0 +1,54 @@ +package com.hbm.tileentity; + +import api.hbm.fluid.IFluidStandardTransceiver; +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.util.BobMathUtil; +import net.minecraft.nbt.NBTTagCompound; + +import java.util.ArrayList; +import java.util.Arrays; + +public interface IFluidCopiable extends ICopiable { + /** + * @return First type for the normal paste, second type for the alt paste, none if there is no alt paste support + */ + default int[] getFluidIDToCopy(){ + IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + ArrayList types = new ArrayList<>(); + + if(tile.getReceivingTanks() != null && !tile.getReceivingTanks()[0].getTankType().hasNoID()) + types.add(tile.getReceivingTanks()[0].getTankType().getID()); + + if(tile.getSendingTanks() != null && !tile.getSendingTanks()[0].getTankType().hasNoID()) + types.add(tile.getSendingTanks()[0].getTankType().getID()); + + return BobMathUtil.intCollectionToArray(types); + } + + default FluidTank getTankToPaste(){ + IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; + } + + @Override + default NBTTagCompound getSettings(){ + NBTTagCompound tag = new NBTTagCompound(); + if(getFluidIDToCopy().length > 0) + tag.setIntArray("fluidID", getFluidIDToCopy()); + return tag; + } + + @Override + default void pasteSettings(NBTTagCompound nbt, boolean alt) { + if(getTankToPaste() != null) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0) { + int id = ids[alt ? 1 : 0]; + getTankToPaste().setTankType(Fluids.fromID(id)); + } + } + } + +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index 0d19a14bc..5b1fd2685 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -8,8 +8,10 @@ import com.hbm.inventory.fluid.trait.FT_Flammable; import com.hbm.inventory.fluid.trait.FluidTrait.FluidReleaseType; import com.hbm.inventory.gui.GUIOilburner; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; +import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; @@ -24,7 +26,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implements IGUIProvider, IFluidStandardTransceiver, IHeatSource, IControlReceiver { +import java.util.Arrays; + +public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implements IGUIProvider, IFluidStandardTransceiver, IHeatSource, IControlReceiver, IFluidCopiable { public boolean isOn = false; public FluidTank tank; @@ -217,4 +221,19 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem public FluidTank[] getSendingTanks() { return this.getSmokeTanks(); } + + @Override + public NBTTagCompound getSettings() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setInteger("burnRate", setting); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, boolean alt) { + int id = nbt.getIntArray("fluidID")[alt ? 1 : 0]; + tank.setTankType(Fluids.fromID(id)); + setting = nbt.getInteger("burnRate"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index 944364b7b..4ad2b1a2f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -15,6 +15,7 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -39,7 +40,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 1000000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index e9751c820..a96fd4b84 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -6,6 +6,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMixer; +import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMixer; @@ -13,10 +14,7 @@ import com.hbm.inventory.recipes.MixerRecipes; import com.hbm.inventory.recipes.MixerRecipes.MixerRecipe; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; @@ -35,7 +33,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineMixer extends TileEntityMachineBase implements INBTPacketReceiver, IControlReceiver, IGUIProvider, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineMixer extends TileEntityMachineBase implements INBTPacketReceiver, IControlReceiver, IGUIProvider, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 10_000; @@ -374,4 +372,14 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB if(type == UpgradeType.OVERDRIVE) return 6; return 0; } + + @Override + public FluidTank getTankToPaste() { + return this.tanks[2]; + } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{tanks[2].getTankType().getID()}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index 4166b5e16..efc97e3a2 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -16,6 +16,7 @@ import com.hbm.inventory.fluid.trait.FluidTrait.FluidReleaseType; import com.hbm.inventory.gui.GUIBarrel; import com.hbm.lib.Library; import com.hbm.saveddata.TomSaveData; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -45,7 +46,7 @@ import java.util.List; import java.util.Set; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")}) -public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, SimpleComponent, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, CompatHandler.OCComponent { +public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, SimpleComponent, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, CompatHandler.OCComponent, IFluidCopiable { public FluidTank tank; public short mode = 0; @@ -373,6 +374,16 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc return new FluidTank[] { tank }; } + @Override + public int[] getFluidIDToCopy() { + return new int[] {tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } + @Override public void writeNBT(NBTTagCompound nbt) { if(tank.getFill() == 0) return; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index f78665bb9..75a004532 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -24,11 +24,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IOverpressurable; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IRepairable; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; @@ -56,7 +52,7 @@ import java.util.List; import java.util.Random; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")}) -public class TileEntityMachineFluidTank extends TileEntityMachineBase implements IFluidContainer, SimpleComponent, OCComponent, IFluidSource, IFluidAcceptor, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable { +public class TileEntityMachineFluidTank extends TileEntityMachineBase implements IFluidContainer, SimpleComponent, OCComponent, IFluidSource, IFluidAcceptor, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable, IFluidCopiable { public FluidTank tank; public short mode = 0; @@ -454,6 +450,16 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements return (mode == 0 || mode == 1) ? new FluidTank[] {tank} : new FluidTank[0]; } + @Override + public int[] getFluidIDToCopy() { + return new int[] {tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineFluidTank(player.inventory, (TileEntityMachineFluidTank) world.getTileEntity(x, y, z)); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 3cc869118..c780bad42 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -136,35 +136,37 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } @Override - public void pasteSettings(NBTTagCompound nbt) { - if (nbt.hasKey("outputSide")) { - outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); - onBlockChanged(); - } - if (nbt.hasKey("inputSide")) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); - } + public void pasteSettings(NBTTagCompound nbt, boolean alt) { + if(alt) { + if (nbt.hasKey("outputSide")) { + outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); + onBlockChanged(); + } + if (nbt.hasKey("inputSide")) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + } + } else { + if (this instanceof IControlReceiverFilter) { + IControlReceiverFilter filter = ((IControlReceiverFilter) this); + IInventory inv = this; - if (this instanceof IControlReceiverFilter) { - IControlReceiverFilter filter = ((IControlReceiverFilter) this); - IInventory inv = this; - - NBTTagList items = nbt.getTagList("items", 10); - int listSize = items.tagCount(); - if (listSize > 0) { - int count = 0; - for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { - if (i < listSize) { - NBTTagCompound slotNBT = items.getCompoundTagAt(count); - byte slot = slotNBT.getByte("slot"); - ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null) { - inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); - filter.nextMode(slot); - this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + if (listSize > 0) { + int count = 0; + for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { + if (i < listSize) { + NBTTagCompound slotNBT = items.getCompoundTagAt(count); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + if (loadedStack != null) { + inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); + filter.nextMode(slot); + this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } } + count++; } - count++; } } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 4db863014..832143613 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -6,6 +6,8 @@ import com.hbm.inventory.fluid.Fluids; import api.hbm.fluid.IFluidConductor; import api.hbm.fluid.IPipeNet; import api.hbm.fluid.PipeNet; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IFluidCopiable; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -14,7 +16,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.WorldServer; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor { +public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, IFluidCopiable { protected IPipeNet network; protected FluidType type = Fluids.NONE; @@ -166,4 +168,23 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor super.onChunkUnload(); this.isLoaded = false; } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{ type.getID() }; + } + + @Override + public FluidTank getTankToPaste() { + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, boolean alt) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0) { + int id = ids[alt ? 1 : 0]; + this.setType(Fluids.fromID(id)); + } + } } diff --git a/src/main/java/com/hbm/util/BobMathUtil.java b/src/main/java/com/hbm/util/BobMathUtil.java index dde5fe762..a9597891c 100644 --- a/src/main/java/com/hbm/util/BobMathUtil.java +++ b/src/main/java/com/hbm/util/BobMathUtil.java @@ -4,9 +4,8 @@ import java.lang.reflect.Field; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.function.ToIntFunction; import javax.annotation.Nonnegative; @@ -206,4 +205,19 @@ public class BobMathUtil { double delta = (beta - alpha + 180) % 360 - 180; return delta < -180 ? delta + 360 : delta; } + + // I am sick of trying to remember the ridiculous quirks of Java 8 + // so I wrote this thing that can shit any int-ish list-ish into a regular fucking int[] + // made by mellow, thrown here by 70k + public static int[] intCollectionToArray(Collection in) { + return intCollectionToArray(in, i -> (int)i); + } + + public static int[] intCollectionToArray(Collection in, ToIntFunction mapper) { + return Arrays.stream(in.toArray()).mapToInt(mapper).toArray(); + } + + public static int[] collectionToIntArray(Collection in, ToIntFunction mapper) { + return Arrays.stream(in.toArray()).mapToInt(mapper).toArray(); + } } From ec84179e3f342db3464d4aaecaa9f5e17bb91b3f Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Fri, 16 Aug 2024 19:41:53 -0400 Subject: [PATCH 05/11] god DAMN Implemented switching between copiable traits + big change in logic thanks martinthedragon --- .../java/com/hbm/blocks/BlockDummyable.java | 30 +++++- .../java/com/hbm/handler/HbmKeybinds.java | 7 +- .../java/com/hbm/interfaces/ICopiable.java | 22 +++- .../com/hbm/items/tool/ItemSettingsTool.java | 101 ++++++++++++++---- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../tileentity/IControlReceiverFilter.java | 7 +- .../com/hbm/tileentity/IFluidCopiable.java | 26 +++-- .../machine/TileEntityHeaterOilburner.java | 9 +- .../TileEntityMachineCrystallizer.java | 10 ++ .../machine/TileEntityMachineMixer.java | 4 - .../network/TileEntityCraneBase.java | 13 ++- .../network/TileEntityPipeBaseNT.java | 9 +- src/main/java/com/hbm/util/Either.java | 76 +++++++++++++ 13 files changed, 256 insertions(+), 59 deletions(-) create mode 100644 src/main/java/com/hbm/util/Either.java diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index d802eac32..b81f81db6 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -6,6 +6,7 @@ import java.util.Random; import com.hbm.handler.MultiblockHandlerXR; import com.hbm.handler.ThreeInts; +import com.hbm.interfaces.ICopiable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IPersistentNBT; @@ -32,7 +33,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.common.util.ForgeDirection; -public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight { +public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight, ICopiable { public BlockDummyable(Material mat) { super(mat); @@ -507,4 +508,31 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl for(AxisAlignedBB aabb : this.bounding) event.context.drawOutlinedBoundingBox(getAABBRotationOffset(aabb.expand(exp, exp, exp), 0, 0, 0, ForgeDirection.getOrientation(meta - offset).getRotation(ForgeDirection.UP)).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); ICustomBlockHighlight.cleanup(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + return ((ICopiable) tile).getSettings(world, pos[0], pos[1], pos[2]); + else + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + ((ICopiable) tile).pasteSettings(nbt, index, world, pos[0], pos[1], pos[2]); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + return ((ICopiable) tile).infoForDisplay(world, x, y, z); + return null; + } } diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 39f59ced2..767c28ad7 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -39,13 +39,12 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(reloadKey); ClientRegistry.registerKeyBinding(dashKey); ClientRegistry.registerKeyBinding(trainKey); - ClientRegistry.registerKeyBinding(copyToolAlt); - ClientRegistry.registerKeyBinding(craneUpKey); ClientRegistry.registerKeyBinding(craneDownKey); ClientRegistry.registerKeyBinding(craneLeftKey); ClientRegistry.registerKeyBinding(craneRightKey); ClientRegistry.registerKeyBinding(craneLoadKey); + ClientRegistry.registerKeyBinding(copyToolAlt); } @SubscribeEvent @@ -74,11 +73,11 @@ public class HbmKeybinds { RELOAD, DASH, TRAIN, - COPY_TOOL, CRANE_UP, CRANE_DOWN, CRANE_LEFT, CRANE_RIGHT, - CRANE_LOAD + CRANE_LOAD, + COPY_TOOL } } diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java index 6e6d98996..5a8f2997f 100644 --- a/src/main/java/com/hbm/interfaces/ICopiable.java +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -1,10 +1,28 @@ package com.hbm.interfaces; +import com.hbm.util.Either; +import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; public interface ICopiable { - NBTTagCompound getSettings(); + NBTTagCompound getSettings(World world, int x, int y, int z); - void pasteSettings(NBTTagCompound nbt, boolean alt); + void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z); + + default String getSettingsSourceID(Either self) { + Block block = self.isLeft() ? self.left().getBlockType() : self.right(); + return block.getUnlocalizedName(); + } + + default String getSettingsSourceDisplay(Either self) { + Block block = self.isLeft() ? self.left().getBlockType() : self.right(); + return block.getLocalizedName(); + } + + default String[] infoForDisplay(World world, int x, int y, int z){ + return null; + } } diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index 6aefa2905..b50462675 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -3,25 +3,56 @@ package com.hbm.items.tool; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.HbmKeybinds; import com.hbm.interfaces.ICopiable; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.TileEntityProxyBase; -import com.hbm.tileentity.network.IDroneLinkable; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.PlayerInformPacket; import com.hbm.util.ChatBuilder; -import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.Either; +import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import javax.annotation.Nullable; +import java.util.ArrayList; import java.util.List; public class ItemSettingsTool extends Item { + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean bool) { + NBTTagList displayInfo; + if(!(entity instanceof EntityPlayerMP)) return; + if(((EntityPlayer) entity).getHeldItem() == stack && stack.hasTagCompound()) { + EntityPlayer player = ((EntityPlayer) entity); + displayInfo = stack.stackTagCompound.getTagList("displayInfo", 10); + + if (HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.COPY_TOOL)) { + int index = stack.stackTagCompound.getInteger("copyIndex") + 1; + if(index > displayInfo.tagCount() - 1) index = 0; + stack.stackTagCompound.setInteger("copyIndex", index); + } + + if(world.getTotalWorldTime() % 5 != 0) return; + + if(displayInfo.tagCount() > 0){ + for (int j = 0; j < displayInfo.tagCount(); j++) { + NBTTagCompound nbt = displayInfo.getCompoundTagAt(j); + String info = nbt.getString("info"); + EnumChatFormatting format = stack.stackTagCompound.getInteger("copyIndex") == j ? EnumChatFormatting.AQUA : EnumChatFormatting.YELLOW; + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(format + info, 897 + j, 4000 ), (EntityPlayerMP) entity); + } + } + } + + } @SuppressWarnings("unchecked") @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { @@ -36,28 +67,52 @@ public class ItemSettingsTool extends Item { } @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { - TileEntity tile = world.getTileEntity(x, y, z); - if(tile instanceof TileEntityProxyBase){ - tile = ((TileEntityProxyBase) tile).getTE(); - } - if (tile instanceof ICopiable) { - ICopiable te = ((ICopiable) tile); + Either schrodinger = getCopyInfoSource(world, x, y, z); + if(schrodinger == null) return false; + ICopiable copiable = schrodinger.cast(); - if (player.isSneaking()) { - stack.stackTagCompound = ((ICopiable) tile).getSettings(); - stack.stackTagCompound.setString("tileName", tile.getBlockType().getLocalizedName()); - - player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) - .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) - .next("] ").color(EnumChatFormatting.DARK_AQUA) - .next("Copied settings of " + tile.getBlockType().getLocalizedName()).color(EnumChatFormatting.AQUA).flush()); - - } else if (stack.hasTagCompound()) { - boolean alt = HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.COPY_TOOL); - te.pasteSettings(stack.stackTagCompound, alt); + if(player.isSneaking()) { + stack.stackTagCompound = copiable.getSettings(world, x, y, z); + stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); + stack.stackTagCompound.setInteger("copyIndex", 0); + String[] info = copiable.infoForDisplay(world, x, y, z); + if(info != null) { + NBTTagList displayInfo = new NBTTagList(); + for (String str : info) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("info", str); + displayInfo.appendTag(nbt); + } + stack.stackTagCompound.setTag("displayInfo", displayInfo); } + if(world.isRemote) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.AQUA).flush()); + } + + } else if(stack.hasTagCompound()) { + int index = stack.stackTagCompound.getInteger("copyIndex"); + copiable.pasteSettings(stack.stackTagCompound, index, world, x, y, z); } - return true; + + return !world.isRemote; + } + + @Nullable + private Either getCopyInfoSource(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof ICopiable) { + return Either.left(te); + } + + Block block = world.getBlock(x, y, z); + if(block instanceof ICopiable) { + return Either.right(block); + } + + return null; } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 6f3b52609..1f2167262 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -2113,6 +2113,7 @@ public class ClientProxy extends ServerProxy { case CRANE_LEFT: return HbmKeybinds.craneLeftKey.getIsKeyPressed(); case CRANE_RIGHT: return HbmKeybinds.craneRightKey.getIsKeyPressed(); case CRANE_LOAD: return HbmKeybinds.craneLoadKey.getIsKeyPressed(); + case COPY_TOOL: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); } return false; diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index f2cd224f8..2e6c5a15a 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -3,14 +3,13 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.ICopiable; -import com.hbm.module.ModulePatternMatcher; import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; public interface IControlReceiverFilter extends IControlReceiver, ICopiable { @@ -47,7 +46,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { int[] getFilterSlots(); @Override - default NBTTagCompound getSettings() { + default NBTTagCompound getSettings(World world, int x, int y, int z) { IInventory inv = (IInventory) this; NBTTagCompound nbt = new NBTTagCompound(); NBTTagList tags = new NBTTagList(); @@ -67,7 +66,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt, boolean alt) { + default void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; NBTTagList items = nbt.getTagList("items", 10); diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 67b90580c..61933e829 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -6,9 +6,9 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.util.BobMathUtil; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; import java.util.ArrayList; -import java.util.Arrays; public interface IFluidCopiable extends ICopiable { /** @@ -18,11 +18,10 @@ public interface IFluidCopiable extends ICopiable { IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; ArrayList types = new ArrayList<>(); - if(tile.getReceivingTanks() != null && !tile.getReceivingTanks()[0].getTankType().hasNoID()) - types.add(tile.getReceivingTanks()[0].getTankType().getID()); - - if(tile.getSendingTanks() != null && !tile.getSendingTanks()[0].getTankType().hasNoID()) - types.add(tile.getSendingTanks()[0].getTankType().getID()); + for (FluidTank tank : tile.getAllTanks()) { + if (!tank.getTankType().hasNoID()) + types.add(tank.getTankType().getID()); + } return BobMathUtil.intCollectionToArray(types); } @@ -33,7 +32,7 @@ public interface IFluidCopiable extends ICopiable { } @Override - default NBTTagCompound getSettings(){ + default NBTTagCompound getSettings(World world, int x, int y, int z){ NBTTagCompound tag = new NBTTagCompound(); if(getFluidIDToCopy().length > 0) tag.setIntArray("fluidID", getFluidIDToCopy()); @@ -41,14 +40,23 @@ public interface IFluidCopiable extends ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt, boolean alt) { + default void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { if(getTankToPaste() != null) { int[] ids = nbt.getIntArray("fluidID"); if(ids.length > 0) { - int id = ids[alt ? 1 : 0]; + int id = ids[index]; getTankToPaste().setTankType(Fluids.fromID(id)); } } } + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + int[] ids = getFluidIDToCopy(); + String[] names = new String[ids.length]; + for (int i = 0; i < ids.length; i++) { + names[i] = Fluids.fromID(ids[i]).getUnlocalizedName(); + } + return names; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index 5b1fd2685..33c9910c2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -11,7 +11,6 @@ import com.hbm.lib.Library; import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; -import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; @@ -26,8 +25,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -import java.util.Arrays; - public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implements IGUIProvider, IFluidStandardTransceiver, IHeatSource, IControlReceiver, IFluidCopiable { public boolean isOn = false; @@ -223,7 +220,7 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem } @Override - public NBTTagCompound getSettings() { + public NBTTagCompound getSettings(World world, int x, int y, int z) { NBTTagCompound tag = new NBTTagCompound(); tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); tag.setInteger("burnRate", setting); @@ -231,8 +228,8 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem } @Override - public void pasteSettings(NBTTagCompound nbt, boolean alt) { - int id = nbt.getIntArray("fluidID")[alt ? 1 : 0]; + public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; tank.setTankType(Fluids.fromID(id)); setting = nbt.getInteger("burnRate"); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index 4ad2b1a2f..9c81c20ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -395,4 +395,14 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{ tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index a96fd4b84..0a2f9a195 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -378,8 +378,4 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB return this.tanks[2]; } - @Override - public int[] getFluidIDToCopy() { - return new int[]{tanks[2].getTankType().getID()}; - } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index c780bad42..7f7815c78 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -10,7 +10,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; @@ -109,7 +109,7 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } @Override - public NBTTagCompound getSettings() { + public NBTTagCompound getSettings(World world, int x, int y, int z) { NBTTagCompound nbt = new NBTTagCompound(); nbt.setInteger("inputSide", getInputSide().ordinal()); nbt.setInteger("outputSide", getOutputSide().ordinal()); @@ -136,8 +136,8 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } @Override - public void pasteSettings(NBTTagCompound nbt, boolean alt) { - if(alt) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + if(index == 1) { if (nbt.hasKey("outputSide")) { outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); onBlockChanged(); @@ -171,4 +171,9 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } } } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + return new String[]{"Filter", "Orientation"}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 832143613..6fb76c124 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -13,6 +13,7 @@ import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.util.ForgeDirection; @@ -180,10 +181,14 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, } @Override - public void pasteSettings(NBTTagCompound nbt, boolean alt) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { int[] ids = nbt.getIntArray("fluidID"); if(ids.length > 0) { - int id = ids[alt ? 1 : 0]; + int id; + if (index < ids.length) + id = ids[index]; + else + id = 0; this.setType(Fluids.fromID(id)); } } diff --git a/src/main/java/com/hbm/util/Either.java b/src/main/java/com/hbm/util/Either.java new file mode 100644 index 000000000..fa2848ee3 --- /dev/null +++ b/src/main/java/com/hbm/util/Either.java @@ -0,0 +1,76 @@ +package com.hbm.util; + +import java.util.function.Function; + +/** + * Represents a value that is either of generic type L or R + * @author martinthedragon + */ +@SuppressWarnings("unchecked") +public final class Either { + public static Either left(L value) { + return new Either<>(value, true); + } + + public static Either right(R value) { + return new Either<>(value, false); + } + + private final Object value; + private final boolean isLeft; + + private Either(Object value, boolean isLeft) { + this.value = value; + this.isLeft = isLeft; + } + + public boolean isLeft() { + return isLeft; + } + + public boolean isRight() { + return !isLeft; + } + + public L left() { + if(isLeft) + return (L) value; + else + throw new IllegalStateException("Tried accessing value as the L type, but was R type"); + } + + public R right() { + if(!isLeft) + return (R) value; + else + throw new IllegalStateException("Tried accessing value as the R type, but was L type"); + } + + public L leftOrNull() { + return isLeft ? (L) value : null; + } + + public R rightOrNull() { + return !isLeft ? (R) value : null; + } + + public V cast() { + return (V) value; + } + + public T run(Function leftFunc, Function rightFunc) { + return isLeft ? leftFunc.apply((L) value) : rightFunc.apply((R) value); + } + + public T runLeftOrNull(Function func) { + return isLeft ? func.apply((L) value) : null; + } + + public T runRightOrNull(Function func) { + return !isLeft ? func.apply((R) value) : null; + } + + public T runCasting(Function func) { + return func.apply((V) value); + } +} From 65ae9b45abea24cf6b69520646fed4881fad6ca7 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:17:31 -0400 Subject: [PATCH 06/11] some usability improvements --- .../java/com/hbm/blocks/BlockDummyable.java | 4 +-- .../com/hbm/blocks/network/FluidDuctBase.java | 33 +++++++++++++++++-- .../java/com/hbm/handler/HbmKeybinds.java | 8 +++-- .../java/com/hbm/interfaces/ICopiable.java | 3 +- .../com/hbm/items/tool/ItemSettingsTool.java | 10 ++++-- src/main/java/com/hbm/main/ClientProxy.java | 3 +- .../tileentity/IControlReceiverFilter.java | 3 +- .../com/hbm/tileentity/IFluidCopiable.java | 3 +- 8 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index b81f81db6..e0463a1b0 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -520,11 +520,11 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl } @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { int[] pos = findCore(world, x, y, z); TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); if (tile instanceof ICopiable) - ((ICopiable) tile).pasteSettings(nbt, index, world, pos[0], pos[1], pos[2]); + ((ICopiable) tile).pasteSettings(nbt, index, world, player, pos[0], pos[1], pos[2]); } @Override diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctBase.java b/src/main/java/com/hbm/blocks/network/FluidDuctBase.java index 3422d1f17..65af59af5 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctBase.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctBase.java @@ -4,8 +4,11 @@ import java.util.ArrayList; import java.util.List; import com.hbm.blocks.IAnalyzable; +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; import com.hbm.inventory.fluid.FluidType; import com.hbm.items.machine.IItemFluidIdentifier; +import com.hbm.items.machine.ItemFluidIDMulti; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import api.hbm.fluid.IPipeNet; @@ -14,6 +17,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -36,13 +40,24 @@ public class FluidDuctBase extends BlockContainer implements IBlockFluidDuct, IA IItemFluidIdentifier id = (IItemFluidIdentifier) player.getHeldItem().getItem(); FluidType type = id.getType(world, x, y, z, player.getHeldItem()); - if(!player.isSneaking()) { + if(!HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_CTRL) && !player.isSneaking()) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityPipeBaseNT) { TileEntityPipeBaseNT pipe = (TileEntityPipeBaseNT) te; - + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { + Item item = player.getHeldItem().getItem(); + if (item instanceof ItemFluidIDMulti) { + if (id.getType(world, x, y, z, player.getHeldItem()) != pipe.getType()) { + ItemFluidIDMulti.setType(player.getHeldItem(), pipe.getType(), true); + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + return true; + } + } + } + if(pipe.getType() != type) { pipe.setType(type); return true; @@ -51,9 +66,21 @@ public class FluidDuctBase extends BlockContainer implements IBlockFluidDuct, IA } else { TileEntity te = world.getTileEntity(x, y, z); - + if(te instanceof TileEntityPipeBaseNT) { TileEntityPipeBaseNT pipe = (TileEntityPipeBaseNT) te; + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { + Item item = player.getHeldItem().getItem(); + if (item instanceof ItemFluidIDMulti) { + if (id.getType(world, x, y, z, player.getHeldItem()) != pipe.getType()) { + ItemFluidIDMulti.setType(player.getHeldItem(), pipe.getType(), true); + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + return true; + } + } + } + changeTypeRecursively(world, x, y, z, pipe.getType(), type, 64); return true; } diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 767c28ad7..a29dcad8c 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -24,7 +24,9 @@ public class HbmKeybinds { public static KeyBinding reloadKey = new KeyBinding(category + ".reload", Keyboard.KEY_R, category); public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category); public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category); - public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyTool", Keyboard.KEY_LMENU, category); + public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyToolAlt", Keyboard.KEY_LMENU, category); + + public static KeyBinding copyToolCtrl = new KeyBinding(category + ".copyToolCtrl", Keyboard.KEY_LCONTROL, category); public static KeyBinding craneUpKey = new KeyBinding(category + ".craneMoveUp", Keyboard.KEY_UP, category); public static KeyBinding craneDownKey = new KeyBinding(category + ".craneMoveDown", Keyboard.KEY_DOWN, category); @@ -45,6 +47,7 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(craneRightKey); ClientRegistry.registerKeyBinding(craneLoadKey); ClientRegistry.registerKeyBinding(copyToolAlt); + ClientRegistry.registerKeyBinding(copyToolCtrl); } @SubscribeEvent @@ -78,6 +81,7 @@ public class HbmKeybinds { CRANE_LEFT, CRANE_RIGHT, CRANE_LOAD, - COPY_TOOL + TOOL_ALT, + TOOL_CTRL } } diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java index 5a8f2997f..1fa9ba276 100644 --- a/src/main/java/com/hbm/interfaces/ICopiable.java +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -2,6 +2,7 @@ package com.hbm.interfaces; import com.hbm.util.Either; import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -10,7 +11,7 @@ public interface ICopiable { NBTTagCompound getSettings(World world, int x, int y, int z); - void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z); + void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z); default String getSettingsSourceID(Either self) { Block block = self.isLeft() ? self.left().getBlockType() : self.right(); diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index b50462675..f0e1541cb 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -20,7 +20,6 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; public class ItemSettingsTool extends Item { @@ -32,14 +31,18 @@ public class ItemSettingsTool extends Item { if(((EntityPlayer) entity).getHeldItem() == stack && stack.hasTagCompound()) { EntityPlayer player = ((EntityPlayer) entity); + int delay = stack.stackTagCompound.getInteger("inputDelay"); + delay++; displayInfo = stack.stackTagCompound.getTagList("displayInfo", 10); - if (HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.COPY_TOOL)) { + if (HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT) && delay > 4) { int index = stack.stackTagCompound.getInteger("copyIndex") + 1; if(index > displayInfo.tagCount() - 1) index = 0; stack.stackTagCompound.setInteger("copyIndex", index); + delay = 0; } + stack.stackTagCompound.setInteger("inputDelay", delay); if(world.getTotalWorldTime() % 5 != 0) return; if(displayInfo.tagCount() > 0){ @@ -75,6 +78,7 @@ public class ItemSettingsTool extends Item { stack.stackTagCompound = copiable.getSettings(world, x, y, z); stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); stack.stackTagCompound.setInteger("copyIndex", 0); + stack.stackTagCompound.setInteger("inputDelay", 0); String[] info = copiable.infoForDisplay(world, x, y, z); if(info != null) { NBTTagList displayInfo = new NBTTagList(); @@ -95,7 +99,7 @@ public class ItemSettingsTool extends Item { } else if(stack.hasTagCompound()) { int index = stack.stackTagCompound.getInteger("copyIndex"); - copiable.pasteSettings(stack.stackTagCompound, index, world, x, y, z); + copiable.pasteSettings(stack.stackTagCompound, index, world, player, x, y, z); } return !world.isRemote; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 1f2167262..4be95b1ee 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -2113,7 +2113,8 @@ public class ClientProxy extends ServerProxy { case CRANE_LEFT: return HbmKeybinds.craneLeftKey.getIsKeyPressed(); case CRANE_RIGHT: return HbmKeybinds.craneRightKey.getIsKeyPressed(); case CRANE_LOAD: return HbmKeybinds.craneLoadKey.getIsKeyPressed(); - case COPY_TOOL: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); + case TOOL_ALT: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); + case TOOL_CTRL: return HbmKeybinds.copyToolCtrl.getIsKeyPressed(); } return false; diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 2e6c5a15a..844c001e2 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -3,6 +3,7 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.ICopiable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -66,7 +67,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; NBTTagList items = nbt.getTagList("items", 10); diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 61933e829..023c8ac5b 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -5,6 +5,7 @@ import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.util.BobMathUtil; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @@ -40,7 +41,7 @@ public interface IFluidCopiable extends ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { if(getTankToPaste() != null) { int[] ids = nbt.getIntArray("fluidID"); if(ids.length > 0) { From 5de273b5baca263a1781323244ddfc65b376f69e Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sat, 24 Aug 2024 13:40:53 -0400 Subject: [PATCH 07/11] five million billion impls hopefully all fluid impls done outside of the rbmk stuff Also implemented copy pasting of molten metals, copying from anything that holds molten metal, and pasting into outlets for filters --- .../com/hbm/tileentity/IFluidCopiable.java | 12 +++-- .../com/hbm/tileentity/IMetalCopiable.java | 32 ++++++++++++ .../bomb/TileEntityLaunchPadBase.java | 13 ++++- .../tileentity/machine/TileEntityChungus.java | 8 ++- .../machine/TileEntityCondenser.java | 8 ++- .../machine/TileEntityCrucible.java | 20 ++++++- .../machine/TileEntityDeuteriumExtractor.java | 8 ++- .../machine/TileEntityElectrolyser.java | 52 +++++++++++++++++-- .../machine/TileEntityFoundryBase.java | 16 +++++- .../machine/TileEntityFoundryOutlet.java | 41 ++++++++++++++- .../machine/TileEntityFurnaceCombination.java | 3 +- .../machine/TileEntityHeatBoiler.java | 4 +- .../TileEntityHeatBoilerIndustrial.java | 4 +- .../machine/TileEntityHeaterOilburner.java | 6 ++- .../hbm/tileentity/machine/TileEntityICF.java | 3 +- .../machine/TileEntityICFPress.java | 3 +- .../tileentity/machine/TileEntityITER.java | 8 ++- .../machine/TileEntityMachineArcWelder.java | 12 +++-- .../machine/TileEntityMachineAssemfac.java | 8 ++- .../machine/TileEntityMachineAutosaw.java | 7 ++- .../machine/TileEntityMachineChemfac.java | 8 ++- .../TileEntityMachineCombustionEngine.java | 20 ++++++- .../machine/TileEntityMachineCompressor.java | 33 +++++++++++- .../machine/TileEntityMachineCyclotron.java | 12 +++-- .../machine/TileEntityMachineDiesel.java | 3 +- .../machine/TileEntityMachineDrain.java | 8 ++- .../machine/TileEntityMachineExcavator.java | 8 ++- .../machine/TileEntityMachineHephaestus.java | 3 +- .../TileEntityMachineLargeTurbine.java | 3 +- .../machine/TileEntityMachineOreSlopper.java | 3 +- .../TileEntityMachinePlasmaHeater.java | 3 +- .../machine/TileEntityMachinePumpBase.java | 8 ++- .../machine/TileEntityMachineRadiolysis.java | 3 +- .../TileEntityMachineSolderingStation.java | 8 ++- .../machine/TileEntityMachineTurbine.java | 3 +- .../machine/TileEntityMachineTurbineGas.java | 3 +- .../machine/TileEntityMachineTurbofan.java | 3 +- .../machine/TileEntityMachineWoodBurner.java | 8 ++- .../machine/TileEntityMicrowave.java | 20 ++++++- .../machine/TileEntitySolarBoiler.java | 9 +++- .../machine/TileEntitySoyuzLauncher.java | 8 ++- .../machine/TileEntitySteamEngine.java | 8 ++- .../machine/TileEntityStorageDrum.java | 8 ++- .../tileentity/machine/TileEntityWatz.java | 8 ++- .../TileEntityMachineCatalyticCracker.java | 8 ++- .../TileEntityMachineCatalyticReformer.java | 3 +- .../machine/oil/TileEntityMachineCoker.java | 3 +- .../oil/TileEntityMachineFractionTower.java | 3 +- .../oil/TileEntityMachineGasFlare.java | 20 ++++++- .../oil/TileEntityMachineHydrotreater.java | 8 ++- .../oil/TileEntityMachineLiquefactor.java | 3 +- .../oil/TileEntityMachineRefinery.java | 9 ++-- .../oil/TileEntityMachineSolidifier.java | 8 ++- .../oil/TileEntityMachineVacuumDistill.java | 3 +- .../machine/oil/TileEntityOilDrillBase.java | 14 ++--- .../network/TileEntityCraneBase.java | 3 +- .../network/TileEntityDroneCrate.java | 3 +- .../network/TileEntityPipeBaseNT.java | 18 ++++++- .../turret/TileEntityTurretFritz.java | 8 ++- 59 files changed, 499 insertions(+), 84 deletions(-) create mode 100644 src/main/java/com/hbm/tileentity/IMetalCopiable.java diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 023c8ac5b..15cb4c0c6 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -1,12 +1,14 @@ package com.hbm.tileentity; import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.fluid.IFluidUser; import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.util.BobMathUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import java.util.ArrayList; @@ -16,7 +18,7 @@ public interface IFluidCopiable extends ICopiable { * @return First type for the normal paste, second type for the alt paste, none if there is no alt paste support */ default int[] getFluidIDToCopy(){ - IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + IFluidUser tile = (IFluidUser) this; ArrayList types = new ArrayList<>(); for (FluidTank tank : tile.getAllTanks()) { @@ -28,8 +30,12 @@ public interface IFluidCopiable extends ICopiable { } default FluidTank getTankToPaste(){ - IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; - return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; + TileEntity te = (TileEntity) this; + if (te instanceof IFluidStandardTransceiver) { + IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; + } + return null; } @Override diff --git a/src/main/java/com/hbm/tileentity/IMetalCopiable.java b/src/main/java/com/hbm/tileentity/IMetalCopiable.java new file mode 100644 index 000000000..533ce98e4 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/IMetalCopiable.java @@ -0,0 +1,32 @@ +package com.hbm.tileentity; + +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.material.Mats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public interface IMetalCopiable extends ICopiable { + int[] getMatsToCopy(); + + @Override + default NBTTagCompound getSettings(World world, int x, int y, int z){ + NBTTagCompound tag = new NBTTagCompound(); + if(getMatsToCopy().length > 0) + tag.setIntArray("matFilter", getMatsToCopy()); + return tag; + } + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + int[] ids = getMatsToCopy(); + String[] names = new String[ids.length]; + for (int i = 0; i < ids.length; i++) { + names[i] = Mats.matById.get(ids[i]).getUnlocalizedName(); + } + return names; + } + @Override + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z){ + + }; +} diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java index ea1974511..0020e9045 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Set; import com.hbm.handler.CompatHandler; +import com.hbm.tileentity.IFluidCopiable; import cpw.mods.fml.common.Optional; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; @@ -56,7 +57,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver, SimpleComponent, CompatHandler.OCComponent { +public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { /** Automatic instantiation of generic missiles, i.e. everything that both extends EntityMissileBaseNT and needs a designator */ public static final HashMap> missiles = new HashMap(); @@ -555,4 +556,14 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl } throw new NoSuchMethodException(); } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{tanks[0].getTankType().getID(), tanks[1].getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index 0d1d9d6a8..f016d181a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -13,6 +13,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -36,7 +37,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, INBTPacketReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, INBTPacketReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 100000000000L; @@ -339,4 +340,9 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr data.setDouble(CompatEnergyControl.D_OUTPUT_MB, info[1]); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, info[2]); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java index 2a13a059a..e60a71b2f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.saveddata.TomSaveData; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -12,7 +13,7 @@ import api.hbm.tile.IInfoProviderEC; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.EnumSkyBlock; -public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IInfoProviderEC { +public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IInfoProviderEC, IFluidCopiable { public int age = 0; public FluidTank[] tanks; @@ -118,4 +119,9 @@ public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidS data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, throughput); data.setDouble(CompatEnergyControl.D_OUTPUT_MB, throughput); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 1fb87fc69..45e31909c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -22,7 +22,9 @@ import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IMetalCopiable; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; import com.hbm.util.CrucibleUtil; import api.hbm.block.ICrucibleAcceptor; @@ -35,6 +37,7 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -45,7 +48,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, ICrucibleAcceptor, IConfigurableMachine { +public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, ICrucibleAcceptor, IConfigurableMachine, IMetalCopiable { public int heat; public int progress; @@ -417,7 +420,6 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro //if there's no materials in there at all, don't smelt if(materials.isEmpty()) return false; - CrucibleRecipe recipe = getLoadedRecipe(); //needs to be true, will always be true if there's no recipe loaded @@ -601,4 +603,18 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; } + + @Override + public int[] getMatsToCopy() { + ArrayList types = new ArrayList<>(); + + for (MaterialStack stack : recipeStack) { + types.add(stack.material.id); + } + for (MaterialStack stack : wasteStack) { + types.add(stack.material.id); + } + return BobMathUtil.intCollectionToArray(types); + } + } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java index 12cc135b4..9cf923a9b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityMachineBase; import api.hbm.energymk2.IEnergyReceiverMK2; @@ -9,7 +10,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver { +public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IFluidCopiable { public long power = 0; public FluidTank[] tanks; @@ -121,4 +122,9 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen public FluidTank[] getAllTanks() { return tanks; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 18cf9f14a..a060d6e45 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -25,9 +25,7 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; import com.hbm.util.CrucibleUtil; import com.hbm.util.I18nUtil; @@ -50,7 +48,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityElectrolyser extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityElectrolyser extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable, IMetalCopiable { public long power; public static final long maxPower = 20000000; @@ -547,4 +545,50 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + if(getFluidIDToCopy().length > 0) + tag.setIntArray("fluidID", getFluidIDToCopy()); + if(getMatsToCopy().length > 0) + tag.setIntArray("matFilter", getMatsToCopy()); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + IFluidCopiable.super.pasteSettings(nbt, index, world, player, x, y, z); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + ArrayList names = new ArrayList<>(); + int[] fluidIDs = getFluidIDToCopy(); + int[] matIDs = getMatsToCopy(); + + for (int fluidID : fluidIDs) { + names.add(Fluids.fromID(fluidID).getUnlocalizedName()); + } + for (int matID : matIDs) { + names.add(Mats.matById.get(matID).getUnlocalizedName()); + } + + return names.toArray(new String[0]); + } + + @Override + public int[] getMatsToCopy() { + ArrayList types = new ArrayList<>(); + if(leftStack != null) types.add(leftStack.material.id); + + if(rightStack != null) types.add(rightStack.material.id); + + return BobMathUtil.intCollectionToArray(types); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java index 9d522c1c0..c90d9ec0b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java @@ -1,10 +1,12 @@ package com.hbm.tileentity.machine; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.material.Mats.MaterialStack; import api.hbm.block.ICrucibleAcceptor; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -19,7 +21,7 @@ import net.minecraftforge.common.util.ForgeDirection; * @author hbm * */ -public abstract class TileEntityFoundryBase extends TileEntity implements ICrucibleAcceptor { +public abstract class TileEntityFoundryBase extends TileEntity implements ICrucibleAcceptor, ICopiable { public NTMMaterial type; protected NTMMaterial lastType; @@ -142,4 +144,16 @@ public abstract class TileEntityFoundryBase extends TileEntity implements ICruci public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return standardAdd(world, x, y, z, side, stack); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(type != null) nbt.setIntArray("matFilter", new int[]{ type.id }); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java index 1414283fe..a5f0d6086 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.packet.AuxParticlePacketNT; @@ -9,13 +10,16 @@ import com.hbm.util.CrucibleUtil; import api.hbm.block.ICrucibleAcceptor; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFoundryOutlet extends TileEntityFoundryBase { +import java.util.ArrayList; + +public class TileEntityFoundryOutlet extends TileEntityFoundryBase implements ICopiable { public NTMMaterial filter = null; public NTMMaterial lastFilter = null; @@ -121,4 +125,39 @@ public class TileEntityFoundryOutlet extends TileEntityFoundryBase { nbt.setBoolean("invertFilter", this.invertFilter); nbt.setShort("filter", this.filter == null ? -1 : (short) this.filter.id); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + + nbt.setBoolean("invert", this.invertRedstone); + nbt.setBoolean("invertFilter", this.invertFilter); + if(filter != null){ + nbt.setIntArray("matFilter", new int[]{ filter.id }); + } + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + if(nbt.hasKey("invert")) this.invertRedstone = nbt.getBoolean("invert"); + if(nbt.hasKey("invertFilter")) this.invertFilter = nbt.getBoolean("invertFilter"); + if(nbt.hasKey("matFilter")) { + int[] ids = nbt.getIntArray("matFilter"); + if(ids.length > 0) + this.filter = Mats.matById.get(ids[index]); + } + + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + ArrayList info = new ArrayList<>(); + info.add("copyTool.invertRedstone"); + info.add("copyTool.invertFilter"); + if (filter != null) info.add(filter.getUnlocalizedName()); + return info.toArray(new String[0]); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java index 2ef8e189e..2020301b4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIFurnaceCombo; import com.hbm.inventory.recipes.CombinationRecipes; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.Tuple.Pair; @@ -30,7 +31,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFurnaceCombination extends TileEntityMachinePolluting implements IFluidStandardSender, IGUIProvider { +public class TileEntityFurnaceCombination extends TileEntityMachinePolluting implements IFluidStandardSender, IGUIProvider, IFluidCopiable { public boolean wasOn; public int progress; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java index c1c830cf5..059fd07b9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java @@ -19,6 +19,7 @@ import com.hbm.main.MainRegistry; import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -31,9 +32,10 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { +public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { public int heat; public FluidTank[] tanks; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java index fe337615f..dcf75fa3b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java @@ -14,6 +14,7 @@ import com.hbm.main.MainRegistry; import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -26,8 +27,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; -public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { +public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { public int heat; public FluidTank[] tanks; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index 33c9910c2..2b0451477 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -224,13 +224,15 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem NBTTagCompound tag = new NBTTagCompound(); tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); tag.setInteger("burnRate", setting); + tag.setBoolean("isOn", isOn); return tag; } @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { int id = nbt.getIntArray("fluidID")[index]; tank.setTankType(Fluids.fromID(id)); - setting = nbt.getInteger("burnRate"); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("burnRate")) setting = nbt.getInteger("burnRate"); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java index 4f4c3d65d..d9c52bffe 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java @@ -13,6 +13,7 @@ import com.hbm.items.machine.ItemICFPellet; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -39,7 +40,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider, IFluidStandardTransceiver, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider, IFluidStandardTransceiver, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { public long laser; public long maxLaser; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java index 9c6eef7ad..b370c480d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java @@ -12,6 +12,7 @@ import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemICFPellet; import com.hbm.items.machine.ItemICFPellet.EnumICFFuel; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -26,7 +27,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class TileEntityICFPress extends TileEntityMachineBase implements IFluidStandardReceiver, IGUIProvider { +public class TileEntityICFPress extends TileEntityMachineBase implements IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public FluidTank[] tanks; public int muon; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 3b78b1168..fb1edf04f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -25,6 +25,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -52,7 +53,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 10000000; @@ -666,4 +667,9 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece } throw new NoSuchMethodException(); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index 6a3132006..cfa5f1022 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -16,10 +16,7 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.IConditionalInvAccess; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -41,7 +38,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineArcWelder extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IConditionalInvAccess, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineArcWelder extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IConditionalInvAccess, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public long maxPower = 2_000; @@ -392,4 +389,9 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java index 948022a43..60ad1e512 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java @@ -12,6 +12,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIAssemfac; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; @@ -31,7 +32,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public AssemblerArm[] arms; @@ -476,4 +477,9 @@ public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase im if(type == UpgradeType.OVERDRIVE) return 12; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 3ec39159b..4924fb718 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -11,6 +11,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.ModDamageSource; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; @@ -29,7 +30,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; -public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardReceiver { +public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardReceiver, IFluidCopiable { public static final HashSet acceptedFuels = new HashSet(); @@ -342,4 +343,8 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IN public double getMaxRenderDistanceSquared() { return 65536.0D; } + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index 53c90a9c0..cc0a80faa 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -14,6 +14,7 @@ import com.hbm.inventory.gui.GUIChemfac; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; @@ -32,7 +33,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase implements IUpgradeInfoProvider { +public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase implements IUpgradeInfoProvider, IFluidCopiable { float rotSpeed; public float rot; @@ -389,4 +390,9 @@ public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase imp if(type == UpgradeType.OVERDRIVE) return 12; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index 78292b220..be46200b1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -14,6 +14,7 @@ import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.EnumUtil; @@ -32,7 +33,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCombustionEngine extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider { +public class TileEntityMachineCombustionEngine extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IFluidCopiable { public boolean isOn = false; public static long maxPower = 2_500_000; @@ -318,4 +319,21 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin this.markChanged(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setBoolean("isOn", isOn); + tag.setInteger("burnRate", setting); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; + tank.setTankType(Fluids.fromID(id)); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("burnRate")) setting = nbt.getInteger("burnRate"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java index c3e94a705..e657f4a90 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java @@ -15,6 +15,7 @@ import com.hbm.inventory.recipes.CompressorRecipes.CompressorRecipe; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -37,7 +38,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCompressor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineCompressor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public FluidTank[] tanks; public long power; @@ -366,4 +367,34 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement if(type == UpgradeType.OVERDRIVE) return 9; return 0; } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", getFluidIDToCopy()); + tag.setInteger("compression", tanks[0].getPressure()); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("compression")) { + int compression = nbt.getInteger("compression"); + + if (compression != tanks[0].getPressure()) { + tanks[0].withPressure(compression); + + CompressorRecipe recipe = CompressorRecipes.recipes.get(new Pair(tanks[0].getTankType(), compression)); + + if (recipe == null) { + tanks[1].withPressure(compression + 1); + } else { + tanks[1].withPressure(recipe.output.pressure).setTankType(recipe.output.type); + } + + this.markChanged(); + } + } + IFluidCopiable.super.pasteSettings(nbt, index, world, player, x, y, z); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index effd7bf2e..074c8a031 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -16,10 +16,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IConditionalInvAccess; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.CompatEnergyControl; import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; @@ -42,7 +39,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000000; @@ -433,4 +430,9 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements data.setBoolean(CompatEnergyControl.B_ACTIVE, this.progress > 0); data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, this.progress > 0 ? getConsumption() : 0); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index 9cedc72c2..2616a2086 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -19,6 +19,7 @@ import com.hbm.inventory.gui.GUIMachineDiesel; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.CompatEnergyControl; @@ -37,7 +38,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineDiesel extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidContainer, IFluidStandardTransceiver, IConfigurableMachine, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineDiesel extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidContainer, IFluidStandardTransceiver, IConfigurableMachine, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public int soundCycle = 0; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java index 9a6dc8f21..1fa553080 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java @@ -15,6 +15,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -30,7 +31,7 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFluidStandardReceiver, IBufPacketReceiver { +public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFluidStandardReceiver, IBufPacketReceiver, IFluidCopiable { public FluidTank tank; @@ -157,4 +158,9 @@ public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFlu public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index 3ac1df89a..1090ae1f8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -24,6 +24,7 @@ import com.hbm.items.machine.ItemDrillbit.EnumDrillType; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.items.special.ItemBedrockOreBase; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -60,7 +61,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineExcavator extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineExcavator extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public static final long maxPower = 1_000_000; public long power; @@ -879,4 +880,9 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java index eb22b3289..ccc8406f9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -23,7 +24,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank input; public FluidTank output; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index e18ad96fd..8cbf5638b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -15,6 +15,7 @@ import com.hbm.inventory.gui.GUIMachineLargeTurbine; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -40,7 +41,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 100000000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java index 90e1ec36e..d7800be4b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java @@ -20,6 +20,7 @@ import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -46,7 +47,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 100_000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java index fde99d15e..f0f4f4db2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java @@ -13,6 +13,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIPlasmaHeater; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -29,7 +30,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase implements IFluidContainer, IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider { +public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase implements IFluidContainer, IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 100000000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java index 653064658..c96f013e6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -22,7 +23,7 @@ import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine { +public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine, IFluidCopiable { public static final HashSet validBlocks = new HashSet(); @@ -200,4 +201,9 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java index 3667aef4b..6a46dd80e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java @@ -12,6 +12,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPellet; import com.hbm.items.machine.ItemRTGPelletDepleted; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -34,7 +35,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineRadiolysis extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidContainer, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineRadiolysis extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidContainer, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final int maxPower = 1000000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 3d0e34caf..653252562 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -16,6 +16,7 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -38,7 +39,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineSolderingStation extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineSolderingStation extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public long maxPower = 2_000; @@ -363,4 +364,9 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index fb7374282..2fd1abea0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -12,6 +12,7 @@ import com.hbm.inventory.gui.GUIMachineTurbine; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -39,7 +40,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 24ad50e60..5cbdd3944 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -18,6 +18,7 @@ import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -42,7 +43,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineTurbineGas extends TileEntityMachineBase implements IFluidStandardTransceiver, IEnergyProviderMK2, IControlReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityMachineTurbineGas extends TileEntityMachineBase implements IFluidStandardTransceiver, IEnergyProviderMK2, IControlReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 1000000L; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index d0e1306bc..2559943c8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -21,6 +21,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachinePolluting; @@ -47,7 +48,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java index 46de4e4e1..406ac1452 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java @@ -14,6 +14,7 @@ import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumAshType; import com.hbm.lib.Library; import com.hbm.module.ModuleBurnTime; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -34,7 +35,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineWoodBurner extends TileEntityMachineBase implements IFluidStandardReceiver, IControlReceiver, IEnergyProviderMK2, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineWoodBurner extends TileEntityMachineBase implements IFluidStandardReceiver, IControlReceiver, IEnergyProviderMK2, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100_000; @@ -321,4 +322,9 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement if(this.liquidBurn) data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, 1D); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, power); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java index b6e4e9d55..9e11bf74c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine; import com.hbm.handler.CompatHandler; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.container.ContainerMicrowave; import com.hbm.inventory.gui.GUIMicrowave; import com.hbm.lib.Library; @@ -29,7 +30,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMicrowave extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityMicrowave extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, SimpleComponent, CompatHandler.OCComponent, ICopiable { public long power; public static final long maxPower = 50000; @@ -254,4 +255,21 @@ public class TileEntityMicrowave extends TileEntityMachineBase implements IEnerg public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMicrowave(player.inventory, this); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("microSpeed", speed); + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("microSpeed")) speed = nbt.getInteger("microSpeed"); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + return new String[]{ "copyTool.speed"}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java index c2803d6c6..212468a1d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java @@ -2,12 +2,14 @@ package com.hbm.tileentity.machine; import java.util.HashSet; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.fluid.IFluidStandardTransceiver; @@ -19,7 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChunkCoordinates; -public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver { +public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver, IFluidCopiable { private FluidTank water; private FluidTank steam; @@ -137,4 +139,9 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui water.deserialize(buf); steam.deserialize(buf); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index 5b09fa69d..d27ed3d82 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -15,6 +15,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -37,7 +38,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements ISidedInventory, IEnergyReceiverMK2, IFluidContainer, IFluidStandardReceiver, IGUIProvider { +public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements ISidedInventory, IEnergyReceiverMK2, IFluidContainer, IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1000000; @@ -463,4 +464,9 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISoyuzLauncher(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java index a09c5747e..fbab44838 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -24,7 +25,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine { +public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine, IFluidCopiable { public long powerBuffer; @@ -214,4 +215,9 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner this.tanks[0].readFromNBT(nbt, "s"); this.tanks[1].readFromNBT(nbt, "w"); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java index 70d060e0b..a8f753cba 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java @@ -14,6 +14,7 @@ import com.hbm.inventory.gui.GUIStorageDrum; import com.hbm.items.ModItems; import com.hbm.items.special.ItemWasteLong; import com.hbm.items.special.ItemWasteShort; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.ContaminationUtil; @@ -34,7 +35,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityStorageDrum extends TileEntityMachineBase implements IFluidContainer, IFluidStandardSender, IGUIProvider { +public class TileEntityStorageDrum extends TileEntityMachineBase implements IFluidContainer, IFluidStandardSender, IGUIProvider, IFluidCopiable { public FluidTank[] tanks; private static final int[] slots_arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; @@ -280,4 +281,9 @@ public class TileEntityStorageDrum extends TileEntityMachineBase implements IFlu public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIStorageDrum(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index 9168d4387..ed713def1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -20,6 +20,7 @@ import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Compat; @@ -44,7 +45,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityWatz extends TileEntityMachineBase implements IFluidStandardTransceiver, IControlReceiver, IGUIProvider { +public class TileEntityWatz extends TileEntityMachineBase implements IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IFluidCopiable { public FluidTank[] tanks; public int heat; @@ -549,4 +550,9 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand public FluidTank[] getReceivingTanks() { return new FluidTank[] { tanks[0] }; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java index 37f9f4fb0..3d4208642 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java @@ -5,6 +5,7 @@ import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.CrackingRecipes; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; @@ -17,7 +18,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank[] tanks; @@ -193,4 +194,9 @@ public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase impl public FluidTank[] getAllTanks() { return tanks; } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java index 3ef9daf56..25d9db59d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java @@ -10,6 +10,7 @@ import com.hbm.inventory.gui.GUIMachineCatalyticReformer; import com.hbm.inventory.recipes.ReformingRecipes; import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -28,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java index cf90645d5..5afde6a21 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java @@ -10,6 +10,7 @@ import com.hbm.inventory.gui.GUIMachineCoker; import com.hbm.inventory.recipes.CokerRecipes; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Tuple.Triplet; @@ -28,7 +29,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -public class TileEntityMachineCoker extends TileEntityMachineBase implements IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineCoker extends TileEntityMachineBase implements IFluidStandardTransceiver, IGUIProvider, IFluidCopiable { public boolean wasOn; public int progress; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java index 9052dd9fc..3afa3fb12 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java @@ -8,6 +8,7 @@ import com.hbm.lib.Library; import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; @@ -21,7 +22,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineFractionTower extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineFractionTower extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank[] tanks; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index 6e4ef2791..25bc68134 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -19,6 +19,7 @@ import com.hbm.inventory.gui.GUIMachineGasFlare; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -43,7 +44,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineGasFlare extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidContainer, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineGasFlare extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidContainer, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000; @@ -338,4 +339,21 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, this.fluidUsed); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, this.output); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setBoolean("isOn", isOn); + tag.setBoolean("doesBurn", doesBurn); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; + tank.setTankType(Fluids.fromID(id)); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("doesBurn")) doesBurn = nbt.getBoolean("doesBurn"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java index 9bffbf38b..1c278320d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java @@ -9,6 +9,7 @@ import com.hbm.inventory.gui.GUIMachineHydrotreater; import com.hbm.inventory.recipes.HydrotreatingRecipes; import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -28,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineHydrotreater extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineHydrotreater extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; @@ -222,4 +223,9 @@ public class TileEntityMachineHydrotreater extends TileEntityMachineBase impleme public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineHydrotreater(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index 04f78fad3..62af33e6d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -14,6 +14,7 @@ import com.hbm.inventory.gui.GUILiquefactor; import com.hbm.inventory.recipes.LiquefactionRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -35,7 +36,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index 65bf61681..e675dd2b2 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -24,11 +24,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IOverpressurable; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IRepairable; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.ParticleUtil; import com.hbm.util.Tuple.Quintet; import com.hbm.util.fauxpointtwelve.DirPos; @@ -49,7 +45,7 @@ import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineRefinery extends TileEntityMachineBase implements IEnergyReceiverMK2, IOverpressurable, IPersistentNBT, IRepairable, IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineRefinery extends TileEntityMachineBase implements IEnergyReceiverMK2, IOverpressurable, IPersistentNBT, IRepairable, IFluidStandardTransceiver, IGUIProvider, IFluidCopiable { public long power = 0; public int sulfur = 0; @@ -467,4 +463,5 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRefinery(player.inventory, this); } + } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index c6fd09ecc..3ee56345a 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -13,6 +13,7 @@ import com.hbm.inventory.gui.GUISolidifier; import com.hbm.inventory.recipes.SolidificationRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -35,7 +36,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000; @@ -294,4 +295,9 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement data.setBoolean(CompatEnergyControl.B_ACTIVE, this.progress > 0); data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, this.usage); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index 037982ffd..32fe42ea5 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -10,6 +10,7 @@ import com.hbm.inventory.recipes.RefineryRecipes; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -28,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java index 65ee56d44..331fdc479 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java @@ -9,11 +9,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; import com.hbm.util.Tuple; import com.hbm.util.Tuple.Triplet; @@ -28,9 +24,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider, IUpgradeInfoProvider { +public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public int indicator = 0; @@ -331,4 +328,9 @@ public abstract class TileEntityOilDrillBase extends TileEntityMachineBase imple if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 7f7815c78..a13fb00fa 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.network; import com.hbm.interfaces.ICopiable; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.TileEntityMachineBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -136,7 +137,7 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { if(index == 1) { if (nbt.hasKey("outputSide")) { outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java index 280c16fd0..449d44386 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java @@ -9,6 +9,7 @@ import com.hbm.inventory.container.ContainerDroneCrate; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIDroneCrate; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachineBase; @@ -27,7 +28,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, INBTPacketReceiver, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver { +public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, INBTPacketReceiver, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver, IFluidCopiable { public FluidTank tank; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 6fb76c124..342eb324d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -1,5 +1,9 @@ package com.hbm.tileentity.network; +import com.hbm.blocks.network.FluidDuctBase; +import com.hbm.blocks.network.IBlockFluidDuct; +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; @@ -8,6 +12,7 @@ import api.hbm.fluid.IPipeNet; import api.hbm.fluid.PipeNet; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.tileentity.IFluidCopiable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -181,7 +186,7 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, } @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { int[] ids = nbt.getIntArray("fluidID"); if(ids.length > 0) { int id; @@ -189,7 +194,16 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, id = ids[index]; else id = 0; - this.setType(Fluids.fromID(id)); + + FluidType fluid = Fluids.fromID(id); + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_CTRL)){ + IBlockFluidDuct pipe = (IBlockFluidDuct)world.getBlock(x, y, z); + pipe.changeTypeRecursively(world, x, y, z, getType(), fluid, 64); + } else { + this.setType(fluid); + } } + } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java index 0b6a4b8d7..a1edcc2bb 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java @@ -20,6 +20,7 @@ import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import api.hbm.fluid.IFluidStandardReceiver; +import com.hbm.tileentity.IFluidCopiable; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -31,7 +32,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFluidContainer, IFluidStandardReceiver { +public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFluidContainer, IFluidStandardReceiver, IFluidCopiable { public FluidTank tank; @@ -227,4 +228,9 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretFritz(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } From 8076c77448ca22090e5c58a864f0680340e7b6fc Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 25 Aug 2024 18:10:34 -0400 Subject: [PATCH 08/11] Last copy tool lad for a while --- .../machine/TileEntityHeaterHeatex.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java index 73f01dbce..dde3a6fc4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.BlockDummyable; import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.container.ContainerHeaterHeatex; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; @@ -9,6 +10,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.inventory.gui.GUIHeaterHeatex; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachineBase; @@ -27,7 +29,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHeatSource, INBTPacketReceiver, IFluidStandardTransceiver, IGUIProvider, IControlReceiver { +public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHeatSource, INBTPacketReceiver, IFluidStandardTransceiver, IGUIProvider, IControlReceiver, IFluidCopiable { public FluidTank[] tanks; public int amountToCool = 1; @@ -233,4 +235,23 @@ public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHe this.markChanged(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("toCool", amountToCool); + if(getFluidIDToCopy().length > 0) + nbt.setIntArray("fluidID", getFluidIDToCopy()); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0) { + int id = ids[index]; + tanks[0].setTankType(Fluids.fromID(id)); + } + if(nbt.hasKey("toCool")) amountToCool = nbt.getInteger("toCool"); + } } From c135700d7e0a182b09c8c3af41e082b7c8e1250e Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:34:07 -0400 Subject: [PATCH 09/11] forgot about the fucking router compat --- .../tileentity/IControlReceiverFilter.java | 7 ++- .../network/TileEntityCraneBase.java | 4 +- .../network/TileEntityCraneRouter.java | 58 +++++++++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 1 + 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 844c001e2..be5279ca1 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -79,7 +79,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { NBTTagCompound slotNBT = items.getCompoundTagAt(count); byte slot = slotNBT.getByte("slot"); ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null) { + if (loadedStack != null && slot < getFilterSlots()[1]) { inv.setInventorySlotContents(slot + getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); @@ -90,4 +90,9 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } } + + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + return new String[] { "copytool.filter" }; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index a13fb00fa..61a81339b 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -160,7 +160,7 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen NBTTagCompound slotNBT = items.getCompoundTagAt(count); byte slot = slotNBT.getByte("slot"); ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null) { + if (loadedStack != null && slot < filter.getFilterSlots()[1]) { inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); filter.nextMode(slot); this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); @@ -175,6 +175,6 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen @Override public String[] infoForDisplay(World world, int x, int y, int z) { - return new String[]{"Filter", "Orientation"}; + return new String[]{"copytool.filter", "copytool.orientation"}; } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index a12e59851..ff914eb34 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -12,8 +12,11 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -136,4 +139,59 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI setFilterContents(data); } } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + IInventory inv = (IInventory) this; + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList tags = new NBTTagList(); + + int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if (inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + + nbt.setTag("items", tags); + nbt.setIntArray("modes", modes); + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + + if(listSize > 0 && nbt.hasKey("modes")) { + for (int i = 0; i < listSize; i++) { + NBTTagCompound slotNBT = items.getCompoundTagAt(i); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + + if (loadedStack != null && slot > index * 5 && slot < Math.min(index * 5 + 5, 30)) { + this.setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(slotNBT)); + nextMode(slot); + this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + } + } else { + IControlReceiverFilter.super.pasteSettings(nbt, index, world, player, x, y, z); + } + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + String[] options = new String[patterns.length]; + for (int i = 0; i < options.length; i++) { + options[i] = "copytool.pattern" + i; + } + return options; + } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index ffab06692..a9ac23387 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4273,6 +4273,7 @@ item.seg_20.name=Size 20 Connector item.serum.name=Serum item.servo_set.name=Servo Set item.servo_set_desh.name=Desh Servo Set +item.settings_tool.name=Settings Tool item.shackles.name=Shackles item.shellntm.name=%s Shell item.shimmer_axe.name=Shimmer Axe From ffcce8d9bbc5985e8ef13dcbc803371b47b863bf Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 29 Aug 2024 20:12:58 -0400 Subject: [PATCH 10/11] finishing touches --- .../java/com/hbm/crafting/ToolRecipes.java | 1 + .../com/hbm/items/tool/ItemSettingsTool.java | 62 ++++++++++++------- .../tileentity/IControlReceiverFilter.java | 7 ++- .../com/hbm/tileentity/IFluidCopiable.java | 2 +- .../machine/TileEntityFoundryOutlet.java | 8 +-- .../network/TileEntityCraneBase.java | 4 +- .../network/TileEntityCraneRouter.java | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 11 ++++ 8 files changed, 65 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index d190636e0..113b4c80a 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -137,6 +137,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_tool, 1), new Object[] { "TBT", "SRS", "SCS", 'T', TA.nugget(), 'B', ModItems.nugget_bismuth, 'S', ANY_RESISTANTALLOY.ingot(), 'R', ModItems.reacher, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP) }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.sat_designator, 1), new Object[] { "RRD", "PIC", " P", 'P', GOLD.plate(), 'R', Items.redstone, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', ModItems.sat_chip, 'I', GOLD.ingot() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.sat_relay), new Object[] { ModItems.sat_chip, ModItems.ducttape, ModItems.radar_linker }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.settings_tool), new Object[] { " P ", "PCP", "III", 'P', IRON.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG), 'I', ModItems.plate_polymer }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette, 1), new Object[] { " L", " G ", "G ", 'L', ANY_RUBBER.ingot(), 'G', KEY_CLEARGLASS}); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette_boron, 1), new Object[] { " P", " B ", "B ", 'P', RUBBER.ingot(), 'B', ModBlocks.glass_boron}); diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index f0e1541cb..e7bc4bb85 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -17,6 +17,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; import javax.annotation.Nullable; @@ -48,9 +49,12 @@ public class ItemSettingsTool extends Item { if(displayInfo.tagCount() > 0){ for (int j = 0; j < displayInfo.tagCount(); j++) { NBTTagCompound nbt = displayInfo.getCompoundTagAt(j); - String info = nbt.getString("info"); EnumChatFormatting format = stack.stackTagCompound.getInteger("copyIndex") == j ? EnumChatFormatting.AQUA : EnumChatFormatting.YELLOW; - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(format + info, 897 + j, 4000 ), (EntityPlayerMP) entity); + PacketDispatcher.wrapper.sendTo( + new PlayerInformPacket(ChatBuilder.startTranslation(nbt.getString("info")) + .color(format) + .flush() + , 897 + j, 4000 ), (EntityPlayerMP) entity); } } } @@ -61,12 +65,16 @@ public class ItemSettingsTool extends Item { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { list.add("Can copy the settings (filters, fluid ID, etc) of machines"); list.add("Shift right-click to copy, right click to paste"); - if(stack.stackTagCompound != null) { + /*if(stack.stackTagCompound != null) { NBTTagCompound nbt = stack.stackTagCompound; - list.add(EnumChatFormatting.YELLOW + "Current machine:" - + (nbt.hasKey("tileName") ? EnumChatFormatting.BLUE + " " + nbt.getString("tileName") : EnumChatFormatting.RED + " None ")); - } + if (nbt.hasKey("tileName")){ + list.add(ChatBuilder.startTranslation(nbt.getString("tileName")).color(EnumChatFormatting.BLUE).flush().getFormattedText()); + } else { + list.add(EnumChatFormatting.RED + " None "); + } + }*/ + //the translation wont fucking work I swear to allah } @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { @@ -76,25 +84,33 @@ public class ItemSettingsTool extends Item { if(player.isSneaking()) { stack.stackTagCompound = copiable.getSettings(world, x, y, z); - stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); - stack.stackTagCompound.setInteger("copyIndex", 0); - stack.stackTagCompound.setInteger("inputDelay", 0); - String[] info = copiable.infoForDisplay(world, x, y, z); - if(info != null) { - NBTTagList displayInfo = new NBTTagList(); - for (String str : info) { - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("info", str); - displayInfo.appendTag(nbt); - } - stack.stackTagCompound.setTag("displayInfo", displayInfo); - } + if(stack.stackTagCompound != null) { - if(world.isRemote) { + stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); + stack.stackTagCompound.setInteger("copyIndex", 0); + stack.stackTagCompound.setInteger("inputDelay", 0); + String[] info = copiable.infoForDisplay(world, x, y, z); + if (info != null) { + NBTTagList displayInfo = new NBTTagList(); + for (String str : info) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("info", str); + displayInfo.appendTag(nbt); + } + stack.stackTagCompound.setTag("displayInfo", displayInfo); + } + + if (world.isRemote) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.AQUA).flush()); + } + } else { player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) - .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) - .next("] ").color(EnumChatFormatting.DARK_AQUA) - .next("Copied settings of " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.AQUA).flush()); + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copy failed, machine has no settings tool support: " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.RED).flush()); } } else if(stack.hasTagCompound()) { diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index be5279ca1..c48e053fc 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -74,12 +74,16 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { int listSize = items.tagCount(); if(listSize > 0) { int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { if (i < listSize) { NBTTagCompound slotNBT = items.getCompoundTagAt(count); byte slot = slotNBT.getByte("slot"); ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null && slot < getFilterSlots()[1]) { + //whether the filter info came from a router + boolean router = nbt.hasKey("modes") && slot > index * 5 && slot < index * + 5; + + if (loadedStack != null && index < listSize && (slot < getFilterSlots()[1] || router)) { inv.setInventorySlotContents(slot + getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); @@ -87,7 +91,6 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } count++; } - } } diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 15cb4c0c6..68c61fa0a 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -50,7 +50,7 @@ public interface IFluidCopiable extends ICopiable { default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { if(getTankToPaste() != null) { int[] ids = nbt.getIntArray("fluidID"); - if(ids.length > 0) { + if(ids.length > 0 && index < ids.length) { int id = ids[index]; getTankToPaste().setTankType(Fluids.fromID(id)); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java index a5f0d6086..15202f6de 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java @@ -19,7 +19,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; -public class TileEntityFoundryOutlet extends TileEntityFoundryBase implements ICopiable { +public class TileEntityFoundryOutlet extends TileEntityFoundryBase{ public NTMMaterial filter = null; public NTMMaterial lastFilter = null; @@ -146,7 +146,7 @@ public class TileEntityFoundryOutlet extends TileEntityFoundryBase implements IC if(nbt.hasKey("invertFilter")) this.invertFilter = nbt.getBoolean("invertFilter"); if(nbt.hasKey("matFilter")) { int[] ids = nbt.getIntArray("matFilter"); - if(ids.length > 0) + if(ids.length > 0 && index < ids.length) this.filter = Mats.matById.get(ids[index]); } @@ -155,8 +155,8 @@ public class TileEntityFoundryOutlet extends TileEntityFoundryBase implements IC @Override public String[] infoForDisplay(World world, int x, int y, int z) { ArrayList info = new ArrayList<>(); - info.add("copyTool.invertRedstone"); - info.add("copyTool.invertFilter"); + info.add("copytool.invertRedstone"); + info.add("copytool.invertFilter"); if (filter != null) info.add(filter.getUnlocalizedName()); return info.toArray(new String[0]); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 61a81339b..ef464547d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -160,7 +160,9 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen NBTTagCompound slotNBT = items.getCompoundTagAt(count); byte slot = slotNBT.getByte("slot"); ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null && slot < filter.getFilterSlots()[1]) { + //whether the filter info came from a router + boolean router = nbt.hasKey("modes") && slot > index * 5 && slot < index * + 5; + if (loadedStack != null && (slot < filter.getFilterSlots()[1] || router)) { inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); filter.nextMode(slot); this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index ff914eb34..c1d717099 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -181,6 +181,7 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); } } + modes = nbt.getIntArray("modes"); } else { IControlReceiverFilter.super.pasteSettings(nbt, index, world, player, x, y, z); } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a9ac23387..d5e64ebc0 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -858,6 +858,17 @@ container.wasteDrum=Spent Fuel Pool Drum container.watzPowerplant=Watz Power Plant container.zirnox=ZIRNOX Nuclear Reactor +copytool.filter=Filter +copytool.invertRedstone=Redstone Inverted +copytool.invertFilter=Filter Inverted +copytool.orientation=Orientation +copytool.pattern0=Red Side +copytool.pattern1=Orange Side +copytool.pattern2=Yellow Side +copytool.pattern3=Green Side +copytool.pattern4=Blue Side +copytool.pattern5=Purple Side + crucible.aa=Advanced Alloy Production crucible.abronze=Arsenic Bronze Production crucible.bbronze=Bismuth Bronze Production From 0303477a14c4f4b25eb15fd1c86c87ed5d6150a2 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Fri, 30 Aug 2024 18:02:45 -0400 Subject: [PATCH 11/11] peel off your skim --- src/main/java/com/hbm/items/tool/ItemSettingsTool.java | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index e7bc4bb85..3cd5c9d5f 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -65,6 +65,7 @@ public class ItemSettingsTool extends Item { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { list.add("Can copy the settings (filters, fluid ID, etc) of machines"); list.add("Shift right-click to copy, right click to paste"); + list.add("Ctrl click on pipes to paste settings to multiple pipes"); /*if(stack.stackTagCompound != null) { NBTTagCompound nbt = stack.stackTagCompound; if (nbt.hasKey("tileName")){ diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 516e5f57a..92411ce93 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1364,6 +1364,8 @@ hbm.key.dash=Dash (Unbind from Crouch in config) hbm.key.toggleBack=Toggle Backpack hbm.key.toggleHUD=Toggle HUD hbm.key.reload=Reload +hbm.key.copyToolAlt=Copy Tool: Switch Paste +hbm.key.copyToolCtrl=Copy Tool: Paste to Pipes hbmfluid.amat=Antimatter hbmfluid.aromatics=Aromatic Hydrocarbons