aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorbasdxz <tudurap.com@gmail.com>2020-12-15 13:50:35 +0000
committerbasdxz <tudurap.com@gmail.com>2020-12-15 13:50:35 +0000
commit6f9466f7251748b7308edea9d845655f3d9b4ac6 (patch)
tree1a124ef849319c78ef8e7fb467b40bba3be2f83f /src/main/java
parent43d44fb27efb0d0832e0ca4182416913472d4711 (diff)
downloadGT5-Unofficial-6f9466f7251748b7308edea9d845655f3d9b4ac6.tar.gz
GT5-Unofficial-6f9466f7251748b7308edea9d845655f3d9b4ac6.tar.bz2
GT5-Unofficial-6f9466f7251748b7308edea9d845655f3d9b4ac6.zip
Ender Covers
Things missing: -UI -Texture -Recipe -Wiki
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java5
-rw-r--r--src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java4
-rw-r--r--src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java1
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java100
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkCoverMessage.java122
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTag.java39
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTank.java46
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderWorldSavedData.java129
-rw-r--r--src/main/java/com/github/technus/tectech/thing/CustomItemList.java2
-rw-r--r--src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java356
-rw-r--r--src/main/java/com/github/technus/tectech/thing/item/EnderLinkCover.java82
11 files changed, 885 insertions, 1 deletions
diff --git a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java
index 581c81d15f..1edd924587 100644
--- a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java
+++ b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java
@@ -2,6 +2,7 @@ package com.github.technus.tectech.loader;
import com.github.technus.tectech.mechanics.data.ChunkDataMessage;
import com.github.technus.tectech.mechanics.data.PlayerDataMessage;
+import com.github.technus.tectech.mechanics.enderStorage.EnderLinkCoverMessage;
import com.github.technus.tectech.mechanics.spark.RendererMessage;
import com.github.technus.tectech.mechanics.alignment.AlignmentMessage;
import com.github.technus.tectech.thing.metaTileEntity.hatch.TextParametersMessage;
@@ -34,6 +35,10 @@ public class NetworkDispatcher extends eu.usrv.yamcore.network.PacketDispatcher
registerMessage(RendererMessage.ClientHandler.class, RendererMessage.RendererData.class);
+ registerMessage(EnderLinkCoverMessage.ServerHandler.class, EnderLinkCoverMessage.EnderLinkCoverQuery.class);
+ registerMessage(EnderLinkCoverMessage.ServerUpdateHandler.class, EnderLinkCoverMessage.EnderLinkCoverUpdate.class);
+ registerMessage(EnderLinkCoverMessage.ClientHandler.class, EnderLinkCoverMessage.EnderLinkCoverData.class);
+
registerMessage(TextParametersMessage.ServerHandler.class, TextParametersMessage.ParametersTextQuery.class);
registerMessage(TextParametersMessage.ServerUpdateHandler.class, TextParametersMessage.ParametersTextUpdate.class);
registerMessage(TextParametersMessage.ClientHandler.class, TextParametersMessage.ParametersTextData.class);
diff --git a/src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java
index d7e9a21a67..84dd00f65c 100644
--- a/src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java
+++ b/src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java
@@ -1,8 +1,10 @@
package com.github.technus.tectech.loader.thing;
import com.github.technus.tectech.TecTech;
+import com.github.technus.tectech.thing.cover.GT_Cover_TM_EnderFluidLink;
import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil;
import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate;
+import com.github.technus.tectech.thing.item.EnderLinkCover;
import com.github.technus.tectech.thing.item.TeslaCoilCover;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Textures;
@@ -16,9 +18,11 @@ public class CoverLoader implements Runnable {
public void run() {
final IIconContainer TESLA_OVERLAY = new Textures.BlockIcons.CustomIcon("iconsets/TESLA_OVERLAY");
final IIconContainer TESLA_OVERLAY_ULTIMATE = new Textures.BlockIcons.CustomIcon("iconsets/TESLA_OVERLAY_ULTIMATE");
+ final IIconContainer ENDERFLUIDLINK_OVERLAY = new Textures.BlockIcons.CustomIcon("iconsets/ENDERFLUIDLINK_OVERLAY");
GregTech_API.registerCover(new ItemStack(TeslaCoilCover.INSTANCE, 1, 0), new GT_RenderedTexture(TESLA_OVERLAY), new GT_Cover_TM_TeslaCoil());
GregTech_API.registerCover(new ItemStack(TeslaCoilCover.INSTANCE, 1, 1), new GT_RenderedTexture(TESLA_OVERLAY_ULTIMATE), new GT_Cover_TM_TeslaCoil_Ultimate());
+ GregTech_API.registerCover(new ItemStack(EnderLinkCover.INSTANCE, 1, 0), new GT_RenderedTexture(ENDERFLUIDLINK_OVERLAY), new GT_Cover_TM_EnderFluidLink());
TecTech.LOGGER.info("Cover functionality registered");
}
}
diff --git a/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java
index 7b432dbcb4..c5d8a2bb89 100644
--- a/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java
+++ b/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java
@@ -60,6 +60,7 @@ public class ThingsLoader implements Runnable {
TeslaStaff.run();
TeslaCoilCover.run();
TeslaCoilCapacitor.run();
+ EnderLinkCover.run();
TecTech.LOGGER.info("Useful Items registered");
TeslaCoilComponent.run();
diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java
new file mode 100644
index 0000000000..1a5ad6a69c
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java
@@ -0,0 +1,100 @@
+package com.github.technus.tectech.mechanics.enderStorage;
+
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTankInfo;
+import net.minecraftforge.fluids.IFluidHandler;
+
+import java.io.Serializable;
+
+public class EnderFluidContainer implements IFluidHandler, Serializable {
+ private static final int CAPACITY = 64000;
+ private int fluidID = -1;
+ private int fluidQuantity = 0;
+
+ public EnderFluidContainer() {
+ }
+
+ private FluidStack getFluidStack() {
+ FluidStack fluidStack = null;
+ if (fluidID >= 0) {
+ fluidStack = new FluidStack(fluidID, fluidQuantity);
+ }
+ return fluidStack;
+ }
+
+ private void setFluidStack(FluidStack fluidStack) {
+ if (fluidStack != null && fluidStack.amount != 0) {
+ fluidID = fluidStack.getFluidID();
+ fluidQuantity = fluidStack.amount;
+ } else {
+ fluidID = -1;
+ fluidQuantity = 0;
+ }
+ }
+
+
+ @Override
+ public int fill(ForgeDirection side, FluidStack fluidStackIn, boolean doFill) {
+ int filledFluid = 0;
+ FluidStack fluidStackStored = getFluidStack();
+ if (fluidStackIn != null) {
+ if (fluidStackStored == null) {
+ fluidStackStored = fluidStackIn.copy();
+ fluidStackStored.amount = 0;
+ }
+ if (fluidStackStored.amount < CAPACITY && fluidStackIn.isFluidEqual(fluidStackStored)) {
+ filledFluid = Math.min(CAPACITY - fluidStackStored.amount, fluidStackIn.amount);
+ if (doFill) {
+ fluidStackStored.amount += filledFluid;
+ setFluidStack(fluidStackStored);
+ }
+ }
+ }
+ return filledFluid;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection side, FluidStack fluidStack, boolean doDrain) {
+ FluidStack fluidStackOutput = null;
+ if (fluidStack != null && fluidStack.isFluidEqual(getFluidStack())) {
+ fluidStackOutput = drain(side, fluidStack.amount, doDrain);
+ }
+ return fluidStackOutput;
+ }
+
+ @Override
+ public FluidStack drain(ForgeDirection side, int amount, boolean doDrain) {
+ FluidStack fluidStackOutput = null;
+ FluidStack fluidStackStored = getFluidStack();
+ if (fluidStackStored != null && fluidStackStored.amount > 0) {
+ int drainedFluid = Math.min(fluidStackStored.amount, amount);
+ fluidStackOutput = fluidStackStored.copy();
+ fluidStackOutput.amount = drainedFluid;
+ if (doDrain) {
+ fluidStackStored.amount -= drainedFluid;
+ if (fluidStackStored.amount == 0) {
+ fluidStackStored = null;
+ }
+ setFluidStack(fluidStackStored);
+ }
+ }
+ return fluidStackOutput;
+ }
+
+ @Override
+ public boolean canFill(ForgeDirection forgeDirection, Fluid fluid) {
+ return true;
+ }
+
+ @Override
+ public boolean canDrain(ForgeDirection forgeDirection, Fluid fluid) {
+ return true;
+ }
+
+ @Override
+ public FluidTankInfo[] getTankInfo(ForgeDirection forgeDirection) {
+ return new FluidTankInfo[]{new FluidTankInfo(getFluidStack(), CAPACITY)};
+ }
+}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkCoverMessage.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkCoverMessage.java
new file mode 100644
index 0000000000..de9b10c51d
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkCoverMessage.java
@@ -0,0 +1,122 @@
+package com.github.technus.tectech.mechanics.enderStorage;
+
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+import eu.usrv.yamcore.network.client.AbstractClientMessageHandler;
+import eu.usrv.yamcore.network.server.AbstractServerMessageHandler;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fluids.IFluidHandler;
+
+import java.io.*;
+import java.util.Arrays;
+
+import static com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData.bindEnderLinkTag;
+import static com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData.getEnderLinkTag;
+import static com.github.technus.tectech.thing.cover.GT_Cover_TM_EnderFluidLink.setEnderLinkTag;
+
+public class EnderLinkCoverMessage implements IMessage {
+ EnderLinkTankWithTag messageData;
+
+ public EnderLinkCoverMessage() {
+ }
+
+ @Override
+ public void fromBytes(ByteBuf pBuffer) {
+ try {
+ //I'd love to know why I need to offset by one byte for this to work
+ byte[] boop = pBuffer.array();
+ boop = Arrays.copyOfRange(boop, 1, boop.length);
+ InputStream is = new ByteArrayInputStream(boop);
+ ObjectInputStream ois = new ObjectInputStream(is);
+ Object data = ois.readObject();
+ messageData = (EnderLinkTankWithTag) data;
+ } catch (Exception ignore) {
+ }
+ }
+
+ @Override
+ public void toBytes(ByteBuf pBuffer) {
+ try {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(messageData);
+ oos.flush();
+ InputStream is = new ByteArrayInputStream(baos.toByteArray());
+ pBuffer.writeBytes(is, baos.toByteArray().length);
+ } catch (Exception ignore) {
+ }
+ }
+
+ public static class EnderLinkCoverQuery extends EnderLinkCoverMessage {
+ public EnderLinkCoverQuery() {
+ }
+
+ public EnderLinkCoverQuery(EnderLinkTag tag, IFluidHandler fluidHandler) {
+ messageData = new EnderLinkTankWithTag(tag, fluidHandler);
+ }
+ }
+
+ public static class EnderLinkCoverUpdate extends EnderLinkCoverMessage {
+ public EnderLinkCoverUpdate() {
+ }
+
+ public EnderLinkCoverUpdate(EnderLinkTag tag, IFluidHandler fluidHandler) {
+ messageData = new EnderLinkTankWithTag(tag, fluidHandler);
+ }
+ }
+
+ public static class EnderLinkCoverData extends EnderLinkCoverMessage {
+ public EnderLinkCoverData() {
+ }
+
+ public EnderLinkCoverData(EnderLinkTag tag, IFluidHandler fluidHandler) {
+ messageData = new EnderLinkTankWithTag(tag, fluidHandler);
+ }
+ }
+
+ public static class ServerHandler extends AbstractServerMessageHandler<EnderLinkCoverQuery> {
+ @Override
+ public IMessage handleServerMessage(EntityPlayer pPlayer, EnderLinkCoverQuery pMessage, MessageContext pCtx) {
+ IMessage reply = null;
+ if (pMessage.messageData != null) {
+ reply = new EnderLinkCoverData(getEnderLinkTag(pMessage.messageData.getFluidHandler()),
+ pMessage.messageData.getFluidHandler());
+ }
+ return reply;
+ }
+ }
+
+ public static class ServerUpdateHandler extends AbstractServerMessageHandler<EnderLinkCoverUpdate> {
+ @Override
+ public IMessage handleServerMessage(EntityPlayer pPlayer, EnderLinkCoverUpdate pMessage, MessageContext pCtx) {
+ if (pMessage.messageData != null) {
+ bindEnderLinkTag(pMessage.messageData.getFluidHandler(), pMessage.messageData.getTag());
+ }
+ return null;
+ }
+ }
+
+ public static class ClientHandler extends AbstractClientMessageHandler<EnderLinkCoverData> {
+ @Override
+ public IMessage handleClientMessage(EntityPlayer pPlayer, EnderLinkCoverData pMessage, MessageContext pCtx) {
+ if (pMessage.messageData != null) {
+ setEnderLinkTag(pMessage.messageData.getTag());
+ }
+ return null;
+ }
+ }
+
+ private static class EnderLinkTankWithTag extends EnderLinkTank {
+ private final EnderLinkTag tag;
+
+ public EnderLinkTankWithTag(EnderLinkTag tag, IFluidHandler fluidHandler) {
+ super(fluidHandler);
+ this.tag = tag;
+ }
+
+ public EnderLinkTag getTag() {
+ return tag;
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTag.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTag.java
new file mode 100644
index 0000000000..3d7b7a20b8
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTag.java
@@ -0,0 +1,39 @@
+package com.github.technus.tectech.mechanics.enderStorage;
+
+import com.google.common.base.Objects;
+
+import java.awt.*;
+import java.io.Serializable;
+import java.util.UUID;
+
+public class EnderLinkTag implements Serializable {
+ private final Color color;
+ private final UUID player;
+
+ public EnderLinkTag(Color color, UUID player) {
+ this.color = color;
+ this.player = player;
+ }
+
+ public int getColorInt() {
+ return color.getRGB();
+ }
+
+ public UUID getUUID() {
+ return player;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ EnderLinkTag that = (EnderLinkTag) o;
+ return Objects.equal(color, that.color) &&
+ Objects.equal(player, that.player);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(color, player);
+ }
+}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTank.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTank.java
new file mode 100644
index 0000000000..a64a629161
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTank.java
@@ -0,0 +1,46 @@
+package com.github.technus.tectech.mechanics.enderStorage;
+
+import com.google.common.base.Objects;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.DimensionManager;
+import net.minecraftforge.fluids.IFluidHandler;
+
+import java.io.Serializable;
+
+public class EnderLinkTank implements Serializable {
+ private final int X;
+ private final int Y;
+ private final int Z;
+ private final int D;
+
+ public EnderLinkTank(IFluidHandler fluidHandler) {
+ TileEntity tile = (TileEntity)fluidHandler;
+ X = tile.xCoord;
+ Y = tile.yCoord;
+ Z = tile.zCoord;
+ D = tile.getWorldObj().provider.dimensionId;
+ }
+
+ public IFluidHandler getFluidHandler() {
+ IFluidHandler fluidHandler = null;
+ TileEntity tile = DimensionManager.getWorld(D).getTileEntity(X, Y, Z);
+ if (tile instanceof IFluidHandler) fluidHandler = (IFluidHandler) tile;
+ return fluidHandler;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ EnderLinkTank that = (EnderLinkTank) o;
+ return X == that.X &&
+ Y == that.Y &&
+ Z == that.Z &&
+ D == that.D;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(X, Y, Z, D);
+ }
+}
diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderWorldSavedData.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderWorldSavedData.java
new file mode 100644
index 0000000000..6afa3a494f
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderWorldSavedData.java
@@ -0,0 +1,129 @@
+package com.github.technus.tectech.mechanics.enderStorage;
+
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.WorldSavedData;
+import net.minecraft.world.storage.MapStorage;
+import net.minecraftforge.common.DimensionManager;
+import net.minecraftforge.fluids.IFluidHandler;
+
+import java.awt.*;
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.github.technus.tectech.Reference.MODID;
+
+public class EnderWorldSavedData extends WorldSavedData {
+ private static EnderWorldSavedData INSTANCE;
+
+ private static final String DATA_NAME = MODID + "_EnderWorldSavedData";
+ private static final String ENDER_LIQUID_TAG_LINK = DATA_NAME + "_EnderLiquidTagLink";
+ private static final String ENDER_LIQUID_TANK_LINK = DATA_NAME + "_EnderLiquidTankLink";
+ private static final EnderLinkTag DEFAULT_LINK_TAG = new EnderLinkTag(Color.WHITE, null);
+
+ private Map<EnderLinkTag, EnderFluidContainer> EnderLiquidTagLink = new HashMap<>();
+ private Map<EnderLinkTank, EnderLinkTag> EnderLiquidTankLink = new HashMap<>();
+
+ public EnderWorldSavedData() {
+ super(DATA_NAME);
+ }
+
+ public EnderWorldSavedData(String s) {
+ super(s);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound nbtTagCompound) {
+ try {
+ byte[] ba = nbtTagCompound.getByteArray(ENDER_LIQUID_TAG_LINK);
+ InputStream is = new ByteArrayInputStream(ba);
+ ObjectInputStream ois = new ObjectInputStream(is);
+ Object data = ois.readObject();
+ EnderLiquidTagLink = (Map<EnderLinkTag, EnderFluidContainer>) data;
+ } catch (IOException | ClassNotFoundException ignored) {
+ System.out.println("ENDER_LIQUID_TAG_LINK LOAD FAILED");
+ System.out.println(ignored);
+ }
+
+ try {
+ byte[] ba = nbtTagCompound.getByteArray(ENDER_LIQUID_TANK_LINK);
+ InputStream is = new ByteArrayInputStream(ba);
+ ObjectInputStream ois = new ObjectInputStream(is);
+ Object data = ois.readObject();
+ EnderLiquidTankLink = (Map<EnderLinkTank, EnderLinkTag>) data;
+ } catch (IOException | ClassNotFoundException ignored) {
+ System.out.println("ENDER_LIQUID_TANK_LINK LOAD FAILED");
+ System.out.println(ignored);
+ }
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound nbtTagCompound) {
+ try {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(bos);
+ oos.writeObject(EnderLiquidTagLink);
+ oos.flush();
+ byte[] data = bos.toByteArray();
+ nbtTagCompound.setByteArray(ENDER_LIQUID_TAG_LINK, data);
+ } catch (IOException ignored) {
+ System.out.println("ENDER_LIQUID_TAG_LINK SAVE FAILED");
+ System.out.println(ignored);
+ }
+
+ try {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(bos);
+ oos.writeObject(EnderLiquidTankLink);
+ oos.flush();
+ byte[] data = bos.toByteArray();
+ nbtTagCompound.setByteArray(ENDER_LIQUID_TANK_LINK, data);
+ } catch (IOException ignored) {
+ System.out.println("ENDER_LIQUID_TANK_LINK SAVE FAILED");
+ System.out.println(ignored);
+ }
+ }
+
+ private static void loadInstance() {
+ if (INSTANCE == null) {
+ MapStorage storage = DimensionManager.getWorld(0).mapStorage;
+ INSTANCE = (EnderWorldSavedData) storage.loadData(EnderWorldSavedData.class, DATA_NAME);
+ if (INSTANCE == null) {
+ INSTANCE = new EnderWorldSavedData();
+ storage.setData(DATA_NAME, INSTANCE);
+ }
+ }
+ INSTANCE.markDirty();
+ }
+
+ private static Map<EnderLinkTag, EnderFluidContainer> getEnderLiquidLink() {
+ loadInstance();
+ return INSTANCE.EnderLiquidTagLink;
+ }
+
+ private static Map<EnderLinkTank, EnderLinkTag> getEnderLiquidTankLink() {
+ loadInstance();
+ return INSTANCE.EnderLiquidTankLink;
+ }
+
+ public static EnderFluidContainer getEnderFluidContainer(EnderLinkTag tag) {
+ if (!getEnderLiquidLink().containsKey(tag)) {
+ getEnderLiquidLink().put(tag, new EnderFluidContainer());
+ }
+ return getEnderLiquidLink().get(tag);
+ }
+
+ public static EnderLinkTag getEnderLinkTag(IFluidHandler handler) {
+ EnderLinkTank tank = new EnderLinkTank(handler);
+ if (!getEnderLiquidTankLink().containsKey(tank)) {
+ getEnderLiquidTankLink().put(tank, DEFAULT_LINK_TAG);
+ }
+ return getEnderLiquidTankLink().get(tank);
+ }
+
+ public static void bindEnderLinkTag(IFluidHandler handler, EnderLinkTag tag) {
+ EnderLinkTank tank = new EnderLinkTank(handler);
+ getEnderLiquidTankLink().remove(tank);
+ getEnderLiquidTankLink().put(tank, tag);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java
index a86695ff4a..44c18fbe09 100644
--- a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java
+++ b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java
@@ -94,7 +94,7 @@ public enum CustomItemList implements IItemContainer {
eM_avr_HV, eM_avr_EV, eM_avr_IV, eM_avr_LuV, eM_avr_ZPM, eM_avr_UV, eM_avr_UHV, eM_avr_UEV, eM_avr_UIV, eM_avr_UMV,
- scanContainer, parametrizerMemory, teslaCapacitor, teslaCover, teslaComponent, teslaStaff,
+ scanContainer, parametrizerMemory, teslaCapacitor, teslaCover, teslaComponent, teslaStaff, enderLinkCover,
Machine_TeslaCoil_1by1_LV, Machine_TeslaCoil_1by1_MV, Machine_TeslaCoil_1by1_HV, Machine_TeslaCoil_1by1_EV, Machine_TeslaCoil_1by1_IV,
Machine_TeslaCoil_2by2_LV, Machine_TeslaCoil_2by2_MV, Machine_TeslaCoil_2by2_HV, Machine_TeslaCoil_2by2_EV, Machine_TeslaCoil_2by2_IV,
diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java
new file mode 100644
index 0000000000..9404b3af9f
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java
@@ -0,0 +1,356 @@
+package com.github.technus.tectech.thing.cover;
+
+import com.github.technus.tectech.loader.NetworkDispatcher;
+import com.github.technus.tectech.mechanics.enderStorage.EnderLinkCoverMessage;
+import com.github.technus.tectech.mechanics.enderStorage.EnderLinkTag;
+import eu.usrv.yamcore.auxiliary.PlayerChatHelper;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.gui.GT_GUICover;
+import gregtech.api.gui.widgets.GT_GuiIcon;
+import gregtech.api.gui.widgets.GT_GuiIconButton;
+import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
+import gregtech.api.interfaces.IGuiScreen;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.net.GT_Packet_TileEntityCover;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidHandler;
+
+import java.awt.*;
+
+import static com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData.*;
+
+public class GT_Cover_TM_EnderFluidLink extends GT_CoverBehavior {
+ private static final int L_PER_TICK = 8000;
+ private final static int IMPORT_EXPORT_MASK = 0b0001;
+ private final static int PUBLIC_PRIVATE_MASK = 0b0010;
+ private static EnderLinkTag tag = new EnderLinkTag(Color.WHITE, null);
+
+ public GT_Cover_TM_EnderFluidLink() {
+ }
+
+ public static void setEnderLinkTag(EnderLinkTag inputTag) {
+ if(inputTag != null) {
+ tag = inputTag;
+ //Hacky Way to update the gui
+ GUI_INSTANCE.resetColorField();
+ }
+ }
+
+ private void transferFluid(IFluidHandler source, byte sSide, IFluidHandler target, byte tSide, int amount) {
+ FluidStack fluidStack = source.drain(ForgeDirection.getOrientation(sSide), amount, false);
+
+ if (fluidStack != null) {
+ int fluidTransferred = target.fill(ForgeDirection.getOrientation(tSide), fluidStack, true);
+ source.drain(ForgeDirection.getOrientation(sSide), fluidTransferred, true);
+ }
+ }
+
+ private boolean testBit(int aCoverVariable, int bitMask) {
+ return (aCoverVariable & bitMask) != 0;
+ }
+
+ private int toggleBit(int aCoverVariable, int bitMask) {
+ return (aCoverVariable ^ bitMask);
+ }
+
+ @Override
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ if ((aTileEntity instanceof IFluidHandler)) {
+ IFluidHandler fluidHandlerSelf = (IFluidHandler) aTileEntity;
+ IFluidHandler fluidHandlerEnder = getEnderFluidContainer(getEnderLinkTag((IFluidHandler) aTileEntity));
+
+ if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) {
+ transferFluid(fluidHandlerEnder, (byte) 6, fluidHandlerSelf, aSide, L_PER_TICK);
+ } else {
+ transferFluid(fluidHandlerSelf, aSide, fluidHandlerEnder, (byte) 6, L_PER_TICK);
+ }
+ }
+ return aCoverVariable;
+ }
+
+ @Override
+ public String getDescription(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return "";
+ }
+
+ @Override
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ int newCoverVariable = toggleBit(aCoverVariable, IMPORT_EXPORT_MASK);
+
+ if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) {
+ PlayerChatHelper.SendInfo(aPlayer, "Ender Suction Engaged!");//TODO Translation support
+ } else {
+ PlayerChatHelper.SendInfo(aPlayer, "Ender Filling Engaged!");
+ }
+ return newCoverVariable;
+ }
+
+ @Override
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ //Runs each tick
+ return 1;
+ }
+
+ //region GUI
+ @Override
+ public boolean hasCoverGUI() {
+ return true;
+ }
+
+ @Override
+ public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
+ //Only open gui if we're placed on a fluid tank
+ Object gui = null;
+ if (aTileEntity instanceof IFluidHandler) {
+ gui = new TM_EnderFluidLinkCover(aSide, aCoverID, coverData, aTileEntity);
+ }
+ return gui;
+ }
+
+ private static TM_EnderFluidLinkCover GUI_INSTANCE;
+
+ private class TM_EnderFluidLinkCover extends GT_GUICover {
+ private final byte side;
+ private final int coverID;
+ private int coverVariable;
+ private GT_GuiIntegerHexTextBox colorField;
+
+ private final static int START_X = 10;
+ private final static int START_Y = 25;
+ private final static int SPACE_X = 18;
+ private final static int SPACE_Y = 18;
+
+ private final static int SIZE_X = 176;
+ private final static int SIZE_Y = 107;
+
+ private final static int BOX_SIZE_X = 34;
+ private final static int BOX_SIZE_Y = 34;
+
+ private final static int TEXT_FIELD_SIZE_X = 72;
+ private final static int TEXT_FIELD_SIZE_Y = 12;
+ private final static int TEXT_STRING_LENGTH = 9;
+
+ private final static int FONT_COLOR = 0xFF555555;
+ private final static int BOX_BORDER_COLOR = 0xFF000000;
+
+ private final static int COLOR_FIELD_ID = 0;
+ private final static int PUBLIC_BUTTON_ID = 1;
+ private final static int PRIVATE_BUTTON_ID = 2;
+ private final static int IMPORT_BUTTON_ID = 3;
+ private final static int EXPORT_BUTTON_ID = 4;
+
+ private GT_GuiIconButton newButtonWithSpacing(int id, int x, int y, GT_GuiIcon icon) {
+ return new GT_GuiIconButton(this, id, START_X + SPACE_X * x, START_Y + SPACE_Y * y, icon);
+ }
+
+ private GT_GuiIntegerHexTextBox newTextField(int id, int x, int y) {
+ GT_GuiIntegerHexTextBox field = new GT_GuiIntegerHexTextBox(this, id, START_X + SPACE_X * x,
+ START_Y + SPACE_Y * y, TEXT_FIELD_SIZE_X, TEXT_FIELD_SIZE_Y);
+ field.setMaxStringLength(TEXT_STRING_LENGTH);
+ return field;
+ }
+
+ private int drawNewString(String text, int x, int y) {
+ int align = 4;
+ return fontRendererObj.drawString(text, START_X + SPACE_X * x, align + START_Y + SPACE_Y * y, FONT_COLOR);
+ }
+
+ private void drawColorSquare(int x, int y) {
+ //Draw the border square
+ int borderX1 = START_X + SPACE_X * x;
+ int borderY1 = START_Y + SPACE_Y * y;
+ int borderX2 = borderX1 + BOX_SIZE_X;
+ int borderY2 = borderY1 + BOX_SIZE_Y;
+ drawRect(borderX1, borderY1, borderX2, borderY2, BOX_BORDER_COLOR);
+
+ //
+ //int white = 0xFFFFFFFF;
+ //int black = 0xFF000000;
+ //int checkers_x = 5;
+ //int checkers_wide = 3;
+ //int checkers_y = 5;
+ //int checkers_tall = 3;
+ //int checkeredX = borderX1 + 1;
+ //int checkeredY = borderY1 + 1;
+ //for (int i = 0; i < checkers_x; i++) {
+ // int checkerX1 = checkeredX + (checkers_wide * i);
+ // int checkerX2 = checkerX1 + checkers_wide;
+ // for (int j = 0; j < checkers_y; j++) {
+ // int checkerY1 = checkeredY + (checkers_tall * j);
+ // int checkerY2 = checkerY1 + checkers_tall;
+ // //Sets the color to white-black-white black and snakes around
+ // int nowColor = (checkers_x * i) + j % 2 == 0 ? white : black;
+ // drawRect(checkerX1, checkerY1, checkerX2, checkerY2, nowColor);
+ // }
+ //}
+
+ int insideX1 = borderX1 + 1;
+ int insideY1 = borderY1 + 1;
+ int insideX2 = borderX2 - 1;
+ int insideY2 = borderY2 - 1;
+ drawRect(insideX1, insideY1, insideX2, insideY2, tag.getColorInt());
+ }
+
+ public TM_EnderFluidLinkCover(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ super(aTileEntity, SIZE_X, SIZE_Y, GT_Utility.intToStack(aCoverID));
+ side = aSide;
+ coverID = aCoverID;
+ coverVariable = aCoverVariable;
+ NetworkDispatcher.INSTANCE.sendToServer(new EnderLinkCoverMessage.EnderLinkCoverQuery(tag, (IFluidHandler) tile));
+ //Color Value Field
+ colorField = newTextField(COLOR_FIELD_ID, 2, 1);
+ GUI_INSTANCE = this;
+ resetColorField();
+ //Public/Private Buttons
+ newButtonWithSpacing(PUBLIC_BUTTON_ID, 0, 2, GT_GuiIcon.WHITELIST)
+ .setTooltipText("Public");
+ newButtonWithSpacing(PRIVATE_BUTTON_ID, 1, 2, GT_GuiIcon.BLACKLIST)
+ .setTooltipText("Private");
+ //Import/Export Buttons
+ newButtonWithSpacing(IMPORT_BUTTON_ID, 0, 3, GT_GuiIcon.IMPORT)
+ .setTooltipText(trans("007", "Import"));
+ newButtonWithSpacing(EXPORT_BUTTON_ID, 1, 3, GT_GuiIcon.EXPORT)
+ .setTooltipText(trans("007", "Export"));
+ }
+
+ @Override
+ public void drawExtras(int mouseX, int mouseY, float parTicks) {
+ super.drawExtras(mouseX, mouseY, parTicks);
+ drawColorSquare(0, 0);
+ drawNewString("Color Value", 2, 0);
+ drawNewString("Public/Private", 2, 2);
+ drawNewString(trans("229", "Import/Export"), 2, 3);
+ }
+
+ @Override
+ protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
+ updateButtons();
+ }
+
+ @Override
+ public void buttonClicked(GuiButton btn){
+ if (getClickable(btn.id)){
+ coverVariable = getNewCoverVariable(btn.id);
+ GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
+ }
+ updateButtons();
+ }
+
+ private void updateButtons(){
+ GuiButton b;
+ for (Object o : buttonList) {
+ b = (GuiButton) o;
+ b.enabled = getClickable(b.id);
+ }
+ }
+
+ private int getNewCoverVariable(int id) {
+ //TODO make this work between 0 and 1 screwdriver state things
+ //switch (id) {
+ // case 0:
+ // return coverVariable & ~0x1;
+ // case 1:
+ // return coverVariable | 0x1;
+ // case 2:
+ // if (coverVariable > 5)
+ // return 0x6 | (coverVariable & ~0xE);
+ // return (coverVariable & ~0xE);
+ // case 3:
+ // if (coverVariable > 5)
+ // return 0x8 | (coverVariable & ~0xE);
+ // return 0x2 | (coverVariable & ~0xE);
+ // case 4:
+ // if (coverVariable > 5)
+ // return 0xA | (coverVariable & ~0xE);
+ // return (0x4 | (coverVariable & ~0xE));
+ // case 5:
+ // if (coverVariable <= 5)
+ // return coverVariable + 6;
+ // break;
+ // case 6:
+ // if (coverVariable > 5)
+ // return coverVariable - 6;
+ //}
+ return coverVariable;
+ }
+
+ private boolean getClickable(int id) {
+ //TODO Make this work for 1 to 2 buttons
+ //if (coverVariable < 0 | 11 < coverVariable)
+ // return false;
+ //
+ //switch (id) {
+ // case 0: case 1:
+ // return (0x1 & coverVariable) != id;
+ // case 2:
+ // return (coverVariable % 6) >= 2;
+ // case 3:
+ // return (coverVariable % 6) < 2 | 4 <= (coverVariable % 6);
+ // case 4:
+ // return (coverVariable % 6) < 4;
+ // case 5:
+ // return coverVariable < 6;
+ // case 6:
+ // return coverVariable >= 6;
+ //}
+ return false;
+ }
+
+ @Override
+ public void applyTextBox(GT_GuiIntegerTextBox box) {
+ try {
+ String string = box.getText();
+ int colorValue = (int) Long.parseLong(string.replaceFirst("#", ""), 16);
+ tag = new EnderLinkTag(new Color(colorValue, true), tag.getUUID());
+ NetworkDispatcher.INSTANCE.sendToServer(new EnderLinkCoverMessage.EnderLinkCoverUpdate(tag, (IFluidHandler) tile));
+ } catch (NumberFormatException ignored) {
+ }
+ resetColorField();
+ }
+
+ @Override
+ public void resetTextBox(GT_GuiIntegerTextBox box) {
+ //Solid White becomes: #FFFFFFFF
+ box.setText("#" + String.format("%08X", tag.getColorInt()));
+ }
+
+ public void resetColorField() {
+ resetTextBox(colorField);
+ }
+
+ private class GT_GuiIntegerHexTextBox extends GT_GuiIntegerTextBox {
+ public GT_GuiIntegerHexTextBox(IGuiScreen gui, int id, int x, int y, int width, int height) {
+ super(gui, id, x, y, width, height);
+ }
+
+ @Override
+ public boolean validChar(char c, int key) {
+ boolean isValid;
+ if (getCursorPosition() == 0) {
+ isValid = c == '#';
+ } else {
+ isValid = super.validChar(c, key)
+ || c == 'A' || c == 'B' || c == 'C' || c == 'D' || c == 'E' || c == 'F'
+ || c == 'a' || c == 'b' || c == 'c' || c == 'd' || c == 'e' || c == 'f';
+ }
+ return isValid;
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/github/technus/tectech/thing/item/EnderLinkCover.java b/src/main/java/com/github/technus/tectech/thing/item/EnderLinkCover.java
new file mode 100644
index 0000000000..9e23d2f076
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/thing/item/EnderLinkCover.java
@@ -0,0 +1,82 @@
+package com.github.technus.tectech.thing.item;
+
+import com.github.technus.tectech.util.CommonValues;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IIcon;
+
+import java.util.List;
+
+import static com.github.technus.tectech.Reference.MODID;
+import static com.github.technus.tectech.thing.CustomItemList.enderLinkCover;
+import static com.github.technus.tectech.thing.CustomItemList.teslaCover;
+import static net.minecraft.util.StatCollector.translateToLocal;
+
+
+public final class EnderLinkCover extends Item {
+ public static EnderLinkCover INSTANCE;
+ //private static IIcon ultItemIcon;
+
+ private EnderLinkCover() {
+ setHasSubtypes(true);
+ setUnlocalizedName("tm.enderlinkcover");
+ setTextureName(MODID + ":itemEnderLinkCover");
+ }
+
+ @Override
+ public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) {
+ aList.add(CommonValues.BASS_MARK);
+ //switch (aStack.getItemDamage()) {
+ // case 0:
+ // aList.add(translateToLocal("item.tm.teslaCover.desc.0"));//Tesla-Enables Machines!
+ // break;
+ // case 1:
+ // aList.add(translateToLocal("item.tm.teslaCover.desc.1"));//Tesla-Enables Machines! (BUT LOUDER!!)
+ // break;
+ // default:
+ // aList.add(translateToLocal("item.tm.teslaCover.desc.2"));//Yeet this broken item into some spicy water!
+ // break;
+ //}
+ //aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCover.desc.3"));//Use on top of a machine to enable Tesla capabilities
+ //aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCover.desc.4"));//Who the hell uses cables anyway?
+ }
+
+ @Override
+ public String getUnlocalizedName(ItemStack aStack) {
+ return getUnlocalizedName() + "." + getDamage(aStack);
+ }
+
+ public static void run() {
+ INSTANCE = new EnderLinkCover();
+ GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName());
+ enderLinkCover.set(INSTANCE);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister iconRegister) {
+ itemIcon = iconRegister.registerIcon(getIconString());
+ //ultItemIcon = iconRegister.registerIcon(MODID + ":itemTeslaCoverUltimate");
+ }
+
+ @Override
+ public IIcon getIconFromDamage(int damage) {
+ //if (damage == 1) {
+ // return ultItemIcon;
+ //}
+ return itemIcon;
+ }
+
+ @Override
+ public void getSubItems(Item aItem, CreativeTabs par2CreativeTabs, List aList) {
+ aList.add(new ItemStack(aItem, 1, 0));
+ //aList.add(new ItemStack(aItem, 1, 1));
+ }
+}