aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtnhlanth/common/hatch
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gtnhlanth/common/hatch')
-rw-r--r--src/main/java/gtnhlanth/common/hatch/MTEBusInputFocus.java84
-rw-r--r--src/main/java/gtnhlanth/common/hatch/MTEHatchBeamlineConnector.java134
-rw-r--r--src/main/java/gtnhlanth/common/hatch/MTEHatchInputBeamline.java130
-rw-r--r--src/main/java/gtnhlanth/common/hatch/MTEHatchOutputBeamline.java137
4 files changed, 485 insertions, 0 deletions
diff --git a/src/main/java/gtnhlanth/common/hatch/MTEBusInputFocus.java b/src/main/java/gtnhlanth/common/hatch/MTEBusInputFocus.java
new file mode 100644
index 0000000000..1d8840295b
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/hatch/MTEBusInputFocus.java
@@ -0,0 +1,84 @@
+package gtnhlanth.common.hatch;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GTRenderedTexture;
+import gtPlusPlus.api.objects.data.AutoMap;
+import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.MTEHatchNbtConsumable;
+import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;
+import gtnhlanth.common.item.ICanFocus;
+import gtnhlanth.util.Util;
+
+public class MTEBusInputFocus extends MTEHatchNbtConsumable {
+
+ private static final int INPUT_SLOTS = 4;
+
+ public MTEBusInputFocus(int id, String name, String nameRegional) {
+ super(id, name, nameRegional, 0, INPUT_SLOTS, "Input Bus for Foci", false);
+ }
+
+ public MTEBusInputFocus(String name, String[] descriptionArray, ITexture[][][] textures) {
+ super(name, 0, INPUT_SLOTS, descriptionArray, false, textures);
+ }
+
+ @Override
+ public int getInputSlotCount() {
+ return INPUT_SLOTS;
+ }
+
+ @Override
+ public boolean isFacingValid(ForgeDirection facing) {
+ return true;
+ }
+
+ @Override
+ public AutoMap<ItemStack> getItemsValidForUsageSlots() {
+ return new AutoMap<>();
+ }
+
+ @Override
+ public boolean isItemValidForUsageSlot(ItemStack aStack) {
+
+ if (this.getContentUsageSlots()
+ .size() == 0) {
+ return aStack.getItem() instanceof ICanFocus;
+ } else {
+ return false;
+ }
+
+ }
+
+ @Override
+ public String getNameGUI() {
+ return "Focus Input Bus";
+ }
+
+ public void depleteFocusDurability(int damage) {
+
+ ItemStack stack = this.getContentUsageSlots()
+ .toArray()[0];
+
+ Util.depleteDurabilityOfStack(stack, damage);
+
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) };
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) };
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
+ return new MTEBusInputFocus(mName, mDescriptionArray, mTextures);
+ }
+
+}
diff --git a/src/main/java/gtnhlanth/common/hatch/MTEHatchBeamlineConnector.java b/src/main/java/gtnhlanth/common/hatch/MTEHatchBeamlineConnector.java
new file mode 100644
index 0000000000..9e223ee9a1
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/hatch/MTEHatchBeamlineConnector.java
@@ -0,0 +1,134 @@
+package gtnhlanth.common.hatch;
+
+import static net.minecraft.util.StatCollector.translateToLocalFormatted;
+import static tectech.util.CommonValues.MOVE_AT;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraftforge.fluids.FluidStack;
+
+import org.apache.commons.lang3.reflect.FieldUtils;
+
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.MTEHatch;
+import gtnhlanth.common.beamline.IConnectsToBeamline;
+import tectech.mechanics.dataTransport.DataPacket;
+import tectech.util.TTUtility;
+
+public abstract class MTEHatchBeamlineConnector<T extends DataPacket> extends MTEHatch implements IConnectsToBeamline {
+
+ private String clientLocale = "en_US";
+
+ public T q;
+
+ public short id = -1;
+
+ protected MTEHatchBeamlineConnector(int aID, String aName, String aNameRegional, int aTier, String descr) {
+ super(aID, aName, aNameRegional, aTier, 0, descr);
+ TTUtility.setTier(aTier, this);
+ }
+
+ protected MTEHatchBeamlineConnector(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, 0, aDescription, aTextures);
+ }
+
+ @Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ aNBT.setShort("eID", id);
+ if (q != null) {
+ aNBT.setTag("eDATA", q.toNbt());
+ }
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ id = aNBT.getShort("eID");
+ if (aNBT.hasKey("eDATA")) {
+ q = loadPacketFromNBT(aNBT.getCompoundTag("eDATA"));
+ }
+ }
+
+ protected abstract T loadPacketFromNBT(NBTTagCompound nbt);
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ if (aBaseMetaTileEntity.isServerSide()) {
+ if (MOVE_AT == aTick % 20) {
+ if (q == null) {
+ getBaseMetaTileEntity().setActive(false);
+ } else {
+ getBaseMetaTileEntity().setActive(true);
+ moveAround(aBaseMetaTileEntity);
+ }
+ }
+ }
+ }
+
+ public abstract void moveAround(IGregTechTileEntity aBaseMetaTileEntity);
+
+ @Override
+ public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
+ if (aBaseMetaTileEntity.isClientSide()) {
+ return true;
+ }
+ try {
+ EntityPlayerMP player = (EntityPlayerMP) aPlayer;
+ clientLocale = (String) FieldUtils.readField(player, "translator", true);
+ } catch (Exception e) {
+ clientLocale = "en_US";
+ }
+ return true;
+ }
+
+ @Override
+ public boolean isAccessAllowed(EntityPlayer aPlayer) {
+ return true;
+ }
+
+ @Override
+ public boolean isFluidInputAllowed(FluidStack aFluid) {
+ return false;
+ }
+
+ @Override
+ public boolean isValidSlot(int aIndex) {
+ return false;
+ }
+
+ @Override
+ public boolean isGivingInformation() {
+ return true;
+ }
+
+ @Override
+ public String[] getInfoData() {
+ if (id > 0) {
+ return new String[] {
+ translateToLocalFormatted("tt.keyword.ID", clientLocale) + ": " + EnumChatFormatting.AQUA + id,
+ translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": "
+ + EnumChatFormatting.AQUA
+ + (q != null ? q.getContentString() : 0),
+ translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": "
+ + EnumChatFormatting.RED
+ + (q != null ? q.getTraceSize() : 0), };
+ }
+ return new String[] {
+ translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": "
+ + EnumChatFormatting.AQUA
+ + (q != null ? q.getContentString() : 0),
+ translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": "
+ + EnumChatFormatting.RED
+ + (q != null ? q.getTraceSize() : 0), };
+ }
+
+ @Override
+ public String[] getDescription() {
+ return new String[] { "Text description shouldn't be seen, report to Tec", "High speed fibre optics connector.",
+ EnumChatFormatting.AQUA + "Must be painted to work" };
+ }
+}
diff --git a/src/main/java/gtnhlanth/common/hatch/MTEHatchInputBeamline.java b/src/main/java/gtnhlanth/common/hatch/MTEHatchInputBeamline.java
new file mode 100644
index 0000000000..1d13270e31
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/hatch/MTEHatchInputBeamline.java
@@ -0,0 +1,130 @@
+package gtnhlanth.common.hatch;
+
+import static gregtech.api.enums.Dyes.MACHINE_METAL;
+
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.MetaTileEntity;
+import gregtech.api.objects.GTRenderedTexture;
+import gtnhlanth.common.beamline.BeamLinePacket;
+import gtnhlanth.common.beamline.IConnectsToBeamline;
+import tectech.util.TTUtility;
+
+public class MTEHatchInputBeamline extends MTEHatchBeamlineConnector<BeamLinePacket> {
+
+ private boolean delay = true;
+
+ private static final String activeIconPath = "iconsets/OVERLAY_BI_ACTIVE";
+ private static final String sideIconPath = "iconsets/OVERLAY_BI_SIDES";
+ private static final String connIconPath = "iconsets/BI_CONN";
+
+ private static final Textures.BlockIcons.CustomIcon activeIcon = new Textures.BlockIcons.CustomIcon(activeIconPath);
+ private static final Textures.BlockIcons.CustomIcon sideIcon = new Textures.BlockIcons.CustomIcon(sideIconPath);
+ private static final Textures.BlockIcons.CustomIcon connIcon = new Textures.BlockIcons.CustomIcon(connIconPath);
+
+ public MTEHatchInputBeamline(int id, String name, String nameRegional, int tier) {
+
+ super(id, name, nameRegional, tier, "");
+ TTUtility.setTier(tier, this);
+ }
+
+ public MTEHatchInputBeamline(String name, int tier, String[] desc, ITexture[][][] textures) {
+ super(name, tier, desc, textures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] { aBaseTexture,
+ new GTRenderedTexture(
+ activeIcon,
+ Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())),
+ new GTRenderedTexture(connIcon) };
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] { aBaseTexture,
+ new GTRenderedTexture(
+ sideIcon,
+ Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())),
+ new GTRenderedTexture(connIcon) };
+ }
+
+ @Override
+ public MetaTileEntity newMetaEntity(IGregTechTileEntity tile) {
+ return new MTEHatchInputBeamline(mName, mTier, mDescriptionArray, mTextures);
+ }
+
+ @Override
+ protected BeamLinePacket loadPacketFromNBT(NBTTagCompound tag) {
+ return new BeamLinePacket(tag);
+ }
+
+ @Override
+ public boolean isInputFacing(ForgeDirection side) {
+ return side == getBaseMetaTileEntity().getFrontFacing();
+ }
+
+ @Override
+ public boolean isDataInputFacing(ForgeDirection side) {
+ return isInputFacing(side);
+ }
+
+ @Override
+ public boolean isOutputFacing(ForgeDirection aSide) {
+ return false;
+ }
+
+ @Override
+ public boolean isFacingValid(ForgeDirection facing) {
+ return true;
+ }
+
+ @Override
+ public boolean isSimpleMachine() {
+ return true;
+ }
+
+ @Override
+ public boolean canConnect(ForgeDirection side) {
+ return isInputFacing(side);
+ }
+
+ @Override
+ public IConnectsToBeamline getNext(IConnectsToBeamline source) {
+ return null;
+ }
+
+ @Override
+ public String[] getDescription() {
+ return null;
+ }
+
+ public void setContents(BeamLinePacket in) {
+ if (in == null) {
+ this.q = null;
+ } else {
+ if (in.getContent()
+ .getRate() > 0) {
+ this.q = in;
+ delay = true;
+ } else {
+ this.q = null;
+ }
+ }
+ }
+
+ @Override
+ public void moveAround(IGregTechTileEntity tile) {
+ if (delay) {
+ delay = false;
+ } else {
+ this.setContents(null);
+ }
+ }
+}
diff --git a/src/main/java/gtnhlanth/common/hatch/MTEHatchOutputBeamline.java b/src/main/java/gtnhlanth/common/hatch/MTEHatchOutputBeamline.java
new file mode 100644
index 0000000000..dfb210d725
--- /dev/null
+++ b/src/main/java/gtnhlanth/common/hatch/MTEHatchOutputBeamline.java
@@ -0,0 +1,137 @@
+package gtnhlanth.common.hatch;
+
+import static gregtech.api.enums.Dyes.MACHINE_METAL;
+
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.objects.GTRenderedTexture;
+import gtnhlanth.common.beamline.BeamLinePacket;
+import gtnhlanth.common.beamline.IConnectsToBeamline;
+import gtnhlanth.common.beamline.MTEBeamlinePipe;
+import tectech.util.TTUtility;
+
+public class MTEHatchOutputBeamline extends MTEHatchBeamlineConnector<BeamLinePacket> implements IConnectsToBeamline {
+
+ private static final String activeIconPath = "iconsets/OVERLAY_BO_ACTIVE";
+ private static final String sideIconPath = "iconsets/OVERLAY_BO_SIDES";
+ private static final String connIconPath = "iconsets/BO_CONN";
+
+ private static final Textures.BlockIcons.CustomIcon activeIcon = new Textures.BlockIcons.CustomIcon(activeIconPath);
+ private static final Textures.BlockIcons.CustomIcon sideIcon = new Textures.BlockIcons.CustomIcon(sideIconPath);
+ private static final Textures.BlockIcons.CustomIcon connIcon = new Textures.BlockIcons.CustomIcon(connIconPath);
+
+ public MTEHatchOutputBeamline(int id, String name, String nameRegional, int tier) {
+ super(id, name, nameRegional, tier, "");
+ TTUtility.setTier(tier, this);
+ }
+
+ public MTEHatchOutputBeamline(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) {
+ super(aName, aTier, aDescription, aTextures);
+ }
+
+ @Override
+ public ITexture[] getTexturesActive(ITexture aBaseTexture) {
+ return new ITexture[] { aBaseTexture,
+ new GTRenderedTexture(
+ activeIcon,
+ Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())),
+ new GTRenderedTexture(connIcon) };
+ }
+
+ @Override
+ public ITexture[] getTexturesInactive(ITexture aBaseTexture) {
+ return new ITexture[] { aBaseTexture,
+ new GTRenderedTexture(
+ sideIcon,
+ Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())),
+ new GTRenderedTexture(connIcon) };
+ }
+
+ @Override
+ public IConnectsToBeamline getNext(IConnectsToBeamline source) {
+
+ IGregTechTileEntity base = this.getBaseMetaTileEntity();
+ IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing());
+
+ if (next == null) {
+ return null;
+ }
+
+ IMetaTileEntity meta = next.getMetaTileEntity();
+ if (meta instanceof MTEBeamlinePipe) {
+
+ ((MTEBeamlinePipe) meta).markUsed();
+ return (IConnectsToBeamline) meta;
+
+ } else if (meta instanceof MTEHatchInputBeamline && ((MTEHatchInputBeamline) meta).canConnect(
+ base.getFrontFacing()
+ .getOpposite())) {
+
+ return (IConnectsToBeamline) meta;
+ }
+
+ return null;
+ }
+
+ @Override
+ public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) {
+ IConnectsToBeamline current = this, source = this, next;
+ int range = 0;
+ while ((next = current.getNext(source)) != null && range++ < 100) {
+ if (next instanceof MTEHatchInputBeamline) {
+ ((MTEHatchInputBeamline) next).setContents(q);
+ break;
+ }
+ source = current;
+ current = next;
+ }
+ q = null;
+ }
+
+ @Override
+ protected BeamLinePacket loadPacketFromNBT(NBTTagCompound nbt) {
+ return new BeamLinePacket(nbt);
+ }
+
+ @Override
+ public boolean canConnect(ForgeDirection side) {
+ return this.isOutputFacing(side);
+ }
+
+ @Override
+ public boolean isDataInputFacing(ForgeDirection side) {
+ return this.isInputFacing(side);
+ }
+
+ @Override
+ public boolean isFacingValid(ForgeDirection facing) {
+ return true;
+ }
+
+ @Override
+ public boolean isInputFacing(ForgeDirection aSide) {
+ return false;
+ }
+
+ @Override
+ public boolean isOutputFacing(ForgeDirection side) {
+ return side == this.getBaseMetaTileEntity()
+ .getFrontFacing();
+ }
+
+ @Override
+ public String[] getDescription() {
+ return null;
+ }
+
+ @Override
+ public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) {
+ return new MTEHatchOutputBeamline(mName, mTier, mDescriptionArray, mTextures);
+ }
+}