aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/objects')
-rw-r--r--src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java26
-rw-r--r--src/main/java/gregtech/api/objects/CollectorUtils.java30
-rw-r--r--src/main/java/gregtech/api/objects/ElementStack.java47
-rw-r--r--src/main/java/gregtech/api/objects/GT_ArrayList.java73
-rw-r--r--src/main/java/gregtech/api/objects/GT_ChunkManager.java204
-rw-r--r--src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java35
-rw-r--r--src/main/java/gregtech/api/objects/GT_Cover_Default.java81
-rw-r--r--src/main/java/gregtech/api/objects/GT_Cover_None.java237
-rw-r--r--src/main/java/gregtech/api/objects/GT_Fluid.java36
-rw-r--r--src/main/java/gregtech/api/objects/GT_HashSet.java91
-rw-r--r--src/main/java/gregtech/api/objects/GT_ItemStack.java107
-rw-r--r--src/main/java/gregtech/api/objects/GT_ItemStack2.java41
-rw-r--r--src/main/java/gregtech/api/objects/GT_MultiTexture.java26
-rw-r--r--src/main/java/gregtech/api/objects/GT_RenderedTexture.java33
-rw-r--r--src/main/java/gregtech/api/objects/GT_SidedTexture.java48
-rw-r--r--src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java46
-rw-r--r--src/main/java/gregtech/api/objects/GT_UO_Dimension.java54
-rw-r--r--src/main/java/gregtech/api/objects/GT_UO_DimensionList.java98
-rw-r--r--src/main/java/gregtech/api/objects/GT_UO_Fluid.java69
-rw-r--r--src/main/java/gregtech/api/objects/ItemData.java122
-rw-r--r--src/main/java/gregtech/api/objects/MaterialStack.java70
-rw-r--r--src/main/java/gregtech/api/objects/ObjMap.java239
-rw-r--r--src/main/java/gregtech/api/objects/XSTR.java246
-rw-r--r--src/main/java/gregtech/api/objects/blockupdate/BlockUpdateHandler.java117
-rw-r--r--src/main/java/gregtech/api/objects/blockupdate/Cooldown.java27
-rw-r--r--src/main/java/gregtech/api/objects/blockupdate/RandomCooldown.java31
-rw-r--r--src/main/java/gregtech/api/objects/iterators/MergedIterator.java31
-rw-r--r--src/main/java/gregtech/api/objects/overclockdescriber/EUNoOverclockDescriber.java110
-rw-r--r--src/main/java/gregtech/api/objects/overclockdescriber/EUOverclockDescriber.java80
-rw-r--r--src/main/java/gregtech/api/objects/overclockdescriber/FusionOverclockDescriber.java63
-rw-r--r--src/main/java/gregtech/api/objects/overclockdescriber/OverclockDescriber.java106
-rw-r--r--src/main/java/gregtech/api/objects/overclockdescriber/SteamOverclockDescriber.java64
32 files changed, 2688 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java b/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java
new file mode 100644
index 0000000000..c2e0556de9
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java
@@ -0,0 +1,26 @@
+package gregtech.api.objects;
+
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import gregtech.api.metatileentity.BaseMetaTileEntity;
+import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase;
+
+public class AE2DigitalChestHandler implements appeng.api.storage.IExternalStorageHandler {
+
+ @Override
+ public boolean canHandle(final TileEntity te, final ForgeDirection d, final appeng.api.storage.StorageChannel chan,
+ final appeng.api.networking.security.BaseActionSource mySrc) {
+ return chan == appeng.api.storage.StorageChannel.ITEMS && te instanceof BaseMetaTileEntity
+ && ((BaseMetaTileEntity) te).getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalChestBase;
+ }
+
+ @Override
+ public appeng.api.storage.IMEInventory<?> getInventory(final TileEntity te, final ForgeDirection d,
+ final appeng.api.storage.StorageChannel chan, final appeng.api.networking.security.BaseActionSource src) {
+ if (chan == appeng.api.storage.StorageChannel.ITEMS) {
+ return ((GT_MetaTileEntity_DigitalChestBase) (((BaseMetaTileEntity) te).getMetaTileEntity()));
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/gregtech/api/objects/CollectorUtils.java b/src/main/java/gregtech/api/objects/CollectorUtils.java
new file mode 100644
index 0000000000..7265076683
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/CollectorUtils.java
@@ -0,0 +1,30 @@
+package gregtech.api.objects;
+
+import java.util.Map;
+import java.util.function.BiFunction;
+import java.util.function.BinaryOperator;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
+
+public class CollectorUtils {
+
+ /**
+ * Returns a merge function, suitable for use in {@link Map#merge(Object, Object, BiFunction) Map.merge()} or
+ * {@link Collectors#toMap(Function, Function, BinaryOperator) toMap()}, which always throws
+ * {@code IllegalStateException}. This can be used to enforce the assumption that the elements being collected are
+ * distinct.
+ *
+ * @param <T> the type of input arguments to the merge function
+ * @return a merge function which always throw {@code IllegalStateException}
+ */
+ public static <T> BinaryOperator<T> throwingMerger() {
+ return (u, v) -> { throw new IllegalStateException(String.format("Duplicate key %s", u)); };
+ }
+
+ public static <K, V, E extends Map.Entry<K, V>, M extends Map<K, V>> Collector<E, ?, M> entriesToMap(
+ Supplier<M> mapSupplier) {
+ return Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, CollectorUtils.throwingMerger(), mapSupplier);
+ }
+}
diff --git a/src/main/java/gregtech/api/objects/ElementStack.java b/src/main/java/gregtech/api/objects/ElementStack.java
new file mode 100644
index 0000000000..58fffd475a
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/ElementStack.java
@@ -0,0 +1,47 @@
+package gregtech.api.objects;
+
+import gregtech.api.enums.Element;
+
+public class ElementStack implements Cloneable {
+
+ public int mAmount;
+ public Element mElement;
+
+ public ElementStack(Element aElement, int aAmount) {
+ mElement = aElement == null ? Element._NULL : aElement;
+ mAmount = aAmount;
+ }
+
+ public ElementStack copy(int aAmount) {
+ return new ElementStack(mElement, aAmount);
+ }
+
+ @Override
+ public ElementStack clone() {
+ try {
+ return (ElementStack) super.clone();
+ } catch (Exception e) {
+ return new ElementStack(mElement, mAmount);
+ }
+ }
+
+ @Override
+ public boolean equals(Object aObject) {
+ if (aObject == this) return true;
+ if (aObject == null) return false;
+ if (aObject instanceof Element) return aObject == mElement;
+ if (aObject instanceof ElementStack) return ((ElementStack) aObject).mElement == mElement
+ && (mAmount < 0 || ((ElementStack) aObject).mAmount < 0 || ((ElementStack) aObject).mAmount == mAmount);
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return mElement.toString() + mAmount;
+ }
+
+ @Override
+ public int hashCode() {
+ return mElement.hashCode();
+ }
+}
diff --git a/src/main/java/gregtech/api/objects/GT_ArrayList.java b/src/main/java/gregtech/api/objects/GT_ArrayList.java
new file mode 100644
index 0000000000..9124ef8616
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_ArrayList.java
@@ -0,0 +1,73 @@
+package gregtech.api.objects;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Objects;
+
+import com.google.common.collect.Collections2;
+
+public class GT_ArrayList<E> extends ArrayList<E> {
+
+ private static final long serialVersionUID = 1L;
+ private int size_sS;
+
+ private final boolean mAllowNulls;
+
+ public GT_ArrayList(boolean aAllowNulls, int aCapacity) {
+ super(aCapacity);
+ mAllowNulls = aAllowNulls;
+ }
+
+ @SafeVarargs
+ public GT_ArrayList(boolean aAllowNulls, E... aArray) {
+ super(Arrays.asList(aArray));
+ mAllowNulls = aAllowNulls;
+ if (!mAllowNulls) {
+ size_sS = size();
+ for (int i = 0; i < size_sS; i++) if (get(i) == null) {
+ remove(i--);
+ size_sS = size();
+ }
+ }
+ }
+
+ public GT_ArrayList(boolean aAllowNulls, Collection<? extends E> aList) {
+ super(aList);
+ mAllowNulls = aAllowNulls;
+ if (!mAllowNulls) {
+ size_sS = size();
+ for (int i = 0; i < size_sS; i++) if (get(i) == null) {
+ remove(i--);
+ size_sS = size();
+ }
+ }
+ }
+
+ @Override
+ public E set(int aIndex, E aElement) {
+ if (mAllowNulls || aElement != null) return super.set(aIndex, aElement);
+ return null;
+ }
+
+ @Override
+ public boolean add(E aElement) {
+ if (mAllowNulls || aElement != null) return super.add(aElement);
+ return false;
+ }
+
+ @Override
+ public void add(int aIndex, E aElement) {
+ if (mAllowNulls || aElement != null) super.add(aIndex, aElement);
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends E> aList) {
+ return super.addAll(Collections2.filter(aList, Objects::nonNull));
+ }
+
+ @Override
+ public boolean addAll(int aIndex, Collection<? extends E> aList) {
+ return super.addAll(aIndex, Collections2.filter(aList, Objects::nonNull));
+ }
+}
diff --git a/src/main/java/gregtech/api/objects/GT_ChunkManager.java b/src/main/java/gregtech/api/objects/GT_ChunkManager.java
new file mode 100644
index 0000000000..14baaddd3d
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_ChunkManager.java
@@ -0,0 +1,204 @@
+package gregtech.api.objects;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.ChunkCoordIntPair;
+import net.minecraft.world.World;
+import net.minecraftforge.common.ForgeChunkManager;
+import net.minecraftforge.common.ForgeChunkManager.Ticket;
+
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
+
+import gregtech.GT_Mod;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.interfaces.IChunkLoader;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.GT_Log;
+
+/**
+ * Handles re-initialization of chunks after a server restart.
+ */
+public class GT_ChunkManager
+ implements ForgeChunkManager.OrderedLoadingCallback, ForgeChunkManager.PlayerOrderedLoadingCallback {
+
+ private final Map<TileEntity, Ticket> registeredTickets = new HashMap<>();
+ public static GT_ChunkManager instance = new GT_ChunkManager();
+
+ public static void init() {
+ ForgeChunkManager.setForcedChunkLoadingCallback(GT_Mod.instance, instance);
+ }
+
+ @Override
+ public void ticketsLoaded(List<Ticket> tickets, World world) {}
+
+ /**
+ * Determines if tickets should be kept. Based on if the ticket is a machine or a working-chunk ticket.
+ * Working-chunk tickets are tossed and recreated when the machine reactivates.
+ * Machine tickets are kept only if the config {@code alwaysReloadChunkloaders} is true.
+ * Otherwise, machine chunks are tossed and recreated only when the machine reactivates,
+ * similarly to a Passive Anchor.
+ *
+ * @param tickets The tickets that you will want to select from.
+ * The list is immutable and cannot be manipulated directly. Copy it first.
+ * @param world The world
+ * @param maxTicketCount The maximum number of tickets that will be allowed.
+ * @return list of tickets
+ */
+
+ @Override
+ public List<Ticket> ticketsLoaded(List<Ticket> tickets, World world, int maxTicketCount) {
+ List<Ticket> validTickets = new ArrayList<>();
+ if (GT_Values.alwaysReloadChunkloaders) {
+ for (Ticket ticket : tickets) {
+ int x = ticket.getModData()
+ .getInteger("OwnerX");
+ int y = ticket.getModData()
+ .getInteger("OwnerY");
+ int z = ticket.getModData()
+ .getInteger("OwnerZ");
+ if (y > 0) {
+ TileEntity tile = world.getTileEntity(x, y, z);
+ if (tile instanceof IGregTechTileEntity && ((IGregTechTileEntity) tile).isAllowedToWork()) {
+ ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(x >> 4, z >> 4));
+ if (!registeredTickets.containsKey(tile)) {
+ registeredTickets.put(tile, ticket);
+ if (((IGregTechTileEntity) tile).getMetaTileEntity() instanceof IChunkLoader)
+ ForgeChunkManager.forceChunk(
+ ticket,
+ ((IChunkLoader) ((IGregTechTileEntity) tile).getMetaTileEntity()).getActiveChunk());
+ validTickets.add(ticket);
+ }
+ }
+ }
+ }
+ }
+ return validTickets;
+ }
+
+ /**
+ * Determines if player tickets should be kept. This is where a ticket list per-player would be created and
+ * maintained. When a player joins, an event occurs, their name/UUID/etc is compared against tickets on this list
+ * and those tickets are reactivated.
+ * Since that info would be maintained/dealt with on a per-player startup, the list returned back to Forge is empty.
+ *
+ * @param tickets The tickets that you will want to select from.
+ * The list is immutable and cannot be manipulated directly. Copy it first.
+ * @param world The world
+ * @return the list of string-ticket paris
+ */
+ @Override
+ public ListMultimap<String, Ticket> playerTicketsLoaded(ListMultimap<String, Ticket> tickets, World world) {
+ // Not currently used, so just return an empty list.
+ return ArrayListMultimap.create();
+ }
+
+ /**
+ * Requests a chunk to be loaded for this machine. May pass a {@code null} chunk to load just the machine itself if
+ * {@code alwaysReloadChunkloaders} is enabled in config.
+ *
+ * @param owner owner of the TileEntity
+ * @param chunkXZ chunk coordinates
+ * @param player player
+ * @return if the chunk was loaded successfully
+ */
+ public static boolean requestPlayerChunkLoad(TileEntity owner, ChunkCoordIntPair chunkXZ, String player) {
+ if (!GT_Values.enableChunkloaders) return false;
+ if (!GT_Values.alwaysReloadChunkloaders && chunkXZ == null) return false;
+ if (GT_Values.debugChunkloaders && chunkXZ != null) GT_Log.out
+ .println("GT_ChunkManager: Chunk request: (" + chunkXZ.chunkXPos + ", " + chunkXZ.chunkZPos + ")");
+ if (instance.registeredTickets.containsKey(owner)) {
+ ForgeChunkManager.forceChunk(instance.registeredTickets.get(owner), chunkXZ);
+ } else {
+ Ticket ticket;
+ if (player.equals("")) ticket = ForgeChunkManager
+ .requestTicket(GT_Mod.instance, owner.getWorldObj(), ForgeChunkManager.Type.NORMAL);
+ else ticket = ForgeChunkManager
+ .requestPlayerTicket(GT_Mod.instance, player, owner.getWorldObj(), ForgeChunkManager.Type.NORMAL);
+ if (ticket == null) {
+ if (GT_Values.debugChunkloaders)
+ GT_Log.out.println("GT_ChunkManager: ForgeChunkManager.requestTicket failed");
+ return false;
+ }
+ if (GT_Values.debugChunkloaders) GT_Log.out.println(
+ "GT_ChunkManager: ticket issued for machine at: (" + owner.xCoord
+ + ", "
+ + owner.yCoord
+ + ", "
+ + owner.zCoord
+ + ")");
+ NBTTagCompound tag = ticket.getModData();
+ tag.setInteger("OwnerX", owner.xCoord);
+ tag.setInteger("OwnerY", owner.yCoord);
+ tag.setInteger("OwnerZ", owner.zCoord);
+ ForgeChunkManager.forceChunk(ticket, chunkXZ);
+ if (GT_Values.alwaysReloadChunkloaders)
+ ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(owner.xCoord >> 4, owner.zCoord >> 4));
+ instance.registeredTickets.put(owner, ticket);
+ }
+ return true;
+ }
+
+ @SuppressWarnings("UnusedReturnValue")
+ public static boolean requestChunkLoad(TileEntity owner, ChunkCoordIntPair chunkXZ) {
+ return requestPlayerChunkLoad(owner, chunkXZ, "");
+ }
+
+ public static void releaseChunk(TileEntity owner, ChunkCoordIntPair chunkXZ) {
+ if (!GT_Values.enableChunkloaders) return;
+ Ticket ticket = instance.registeredTickets.get(owner);
+ if (ticket != null) {
+ if (GT_Values.debugChunkloaders) GT_Log.out
+ .println("GT_ChunkManager: Chunk release: (" + chunkXZ.chunkXPos + ", " + chunkXZ.chunkZPos + ")");
+ ForgeChunkManager.unforceChunk(ticket, chunkXZ);
+ }
+ }
+
+ public static void releaseTicket(TileEntity owner) {
+ if (!GT_Values.enableChunkloaders) return;
+ Ticket ticket = instance.registeredTickets.get(owner);
+ if (ticket != null) {
+ if (GT_Values.debugChunkloaders) {
+ GT_Log.out.println(
+ "GT_ChunkManager: ticket released by machine at: (" + owner.xCoord
+ + ", "
+ + owner.yCoord
+ + ", "
+ + owner.zCoord
+ + ")");
+ for (ChunkCoordIntPair chunk : ticket.getChunkList()) GT_Log.out
+ .println("GT_ChunkManager: Chunk release: (" + chunk.chunkXPos + ", " + chunk.chunkZPos + ")");
+ }
+ ForgeChunkManager.releaseTicket(ticket);
+ instance.registeredTickets.remove(owner);
+ }
+ }
+
+ public static void printTickets() {
+ GT_Log.out.println("GT_ChunkManager: Start forced chunks dump:");
+ instance.registeredTickets.forEach((machine, ticket) -> {
+ GT_Log.out.print(
+ "GT_ChunkManager: Chunks forced by the machine at (" + machine.xCoord
+ + ", "
+ + machine.yCoord
+ + ", "
+ + machine.zCoord
+ + ")");
+ if (ticket.isPlayerTicket()) GT_Log.out.print(" Owner: " + ticket.getPlayerName());
+ GT_Log.out.print(" :");
+ for (ChunkCoordIntPair c : ticket.getChunkList()) {
+ GT_Log.out.print("(");
+ GT_Log.out.print(c.chunkXPos);
+ GT_Log.out.print(", ");
+ GT_Log.out.print(c.chunkZPos);
+ GT_Log.out.print("), ");
+ }
+ });
+ GT_Log.out.println("GT_ChunkManager: End forced chunks dump:");
+ }
+}
diff --git a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java
new file mode 100644
index 0000000000..c5307b4803
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java
@@ -0,0 +1,35 @@
+package gregtech.api.objects;
+
+import net.minecraft.block.Block;
+
+import gregtech.api.enums.Dyes;
+import gregtech.api.interfaces.ITexture;
+
+/**
+ * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API.
+ */
+@Deprecated
+public class GT_CopiedBlockTexture extends gregtech.common.render.GT_CopiedBlockTexture implements ITexture {
+
+ // Backwards Compat
+ @Deprecated
+ public short[] mRGBa;
+
+ public GT_CopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean aAllowAlpha) {
+ super(aBlock, ordinalSide, aMeta, aRGBa, aAllowAlpha);
+ GT_CopiedBlockTexture.this.mRGBa = aRGBa;
+ }
+
+ public GT_CopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa) {
+ this(aBlock, ordinalSide, aMeta, aRGBa, true);
+ }
+
+ public GT_CopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta) {
+ this(aBlock, ordinalSide, aMeta, Dyes._NULL.mRGBa);
+ }
+
+ @Override
+ public boolean isOldTexture() {
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/api/objects/GT_Cover_Default.java b/src/main/java/gregtech/api/objects/GT_Cover_Default.java
new file mode 100644
index 0000000000..cc5f96eef3
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_Cover_Default.java
@@ -0,0 +1,81 @@
+package gregtech.api.objects;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+
+public class GT_Cover_Default extends GT_CoverBehavior {
+
+ /**
+ * This is the Dummy, if there is a generic Cover without behavior
+ */
+ public GT_Cover_Default() {
+ super();
+ }
+
+ @Override
+ public boolean isSimpleCover() {
+ return true;
+ }
+
+ @Override
+ public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ aCoverVariable = ((aCoverVariable + 1) & 15);
+ GT_Utility.sendChatToPlayer(
+ aPlayer,
+ ((aCoverVariable & 1) != 0 ? GT_Utility.trans("128.1", "Redstone ") : "")
+ + ((aCoverVariable & 2) != 0 ? GT_Utility.trans("129.1", "Energy ") : "")
+ + ((aCoverVariable & 4) != 0 ? GT_Utility.trans("130.1", "Fluids ") : "")
+ + ((aCoverVariable & 8) != 0 ? GT_Utility.trans("131.1", "Items ") : ""));
+ return aCoverVariable;
+ }
+
+ @Override
+ public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return (aCoverVariable & 1) != 0;
+ }
+
+ @Override
+ public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return (aCoverVariable & 1) != 0;
+ }
+
+ @Override
+ public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return (aCoverVariable & 2) != 0;
+ }
+
+ @Override
+ public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return (aCoverVariable & 2) != 0;
+ }
+
+ @Override
+ public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid,
+ ICoverable aTileEntity) {
+ return (aCoverVariable & 4) != 0;
+ }
+
+ @Override
+ public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid,
+ ICoverable aTileEntity) {
+ return (aCoverVariable & 4) != 0;
+ }
+
+ @Override
+ public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot,
+ ICoverable aTileEntity) {
+ return (aCoverVariable & 8) != 0;
+ }
+
+ @Override
+ public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot,
+ ICoverable aTileEntity) {
+ return (aCoverVariable & 8) != 0;
+ }
+}
diff --git a/src/main/java/gregtech/api/objects/GT_Cover_None.java b/src/main/java/gregtech/api/objects/GT_Cover_None.java
new file mode 100644
index 0000000000..279efe63d8
--- /dev/null
+++ b/src/main/java/gregtech/api/objects/GT_Cover_None.java
@@ -0,0 +1,237 @@
+package gregtech.api.objects;
+
+import static gregtech.api.enums.GT_Values.E;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.ISerializableObject;
+
+public class GT_Cover_None extends GT_CoverBehavior {
+
+ /**
+ * This is the Dummy, if there is no Cover
+ */
+ public GT_Cover_None() {}
+
+ @Override
+ public float getBlastProofLevel(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return 10.0F;
+ }
+
+ @Override
+ public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid,
+ ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid,
+ ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot,
+ ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot,
+ ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean isGUIClickable(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable,
+ ICoverable aTileEntity) {
+ return false;
+ }
+
+ @Override
+ public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ return false;
+ }
+
+ @Override
+ public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ boolean aForced) {
+ return true;
+ }
+
+ @Override
+ public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable,
+ ICoverable aTileEntity, long aTimer) {
+ return 0;
+ }
+
+ @Override
+ public boolean isSimpleCover() {
+ return true;
+ }
+
+ @Override
+ protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID,
+ ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ return false;
+ }
+
+ @Override
+ protected ISerializableObject.LegacyCoverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone,
+ int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ return aCoverVariable;
+ }
+
+ @Override
+ protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID,
+ ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX,
+ float aY, float aZ) {
+ return false;
+ }
+
+ @Override
+ protected ISerializableObject.LegacyCoverData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID,
+ ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX,
+ float aY, float aZ) {
+ return aCoverVariable;
+ }
+
+ @Override
+ protected boolean onCoverShiftRightClickImpl(ForgeDirection side, int aCoverID,
+ ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer) {
+ return false;
+ }
+
+ @Override
+ protected boolean onCove