aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/gregtech/GT_Mod.java11
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java7
-rw-r--r--src/main/java/gregtech/api/enums/GT_Values.java4
-rw-r--r--src/main/java/gregtech/api/interfaces/ITextureBuilder.java16
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java34
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java31
-rw-r--r--src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java73
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java1
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java9
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java102
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java90
-rw-r--r--src/main/java/gregtech/api/util/GT_BlockMap.java133
-rw-r--r--src/main/java/gregtech/api/util/GT_BlockSet.java38
-rw-r--r--src/main/java/gregtech/api/util/GT_Config.java13
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java94
-rw-r--r--src/main/java/gregtech/api/util/GT_RenderingWorld.java191
-rw-r--r--src/main/java/gregtech/api/util/ISerializableObject.java4
-rw-r--r--src/main/java/gregtech/common/GT_Network.java4
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java3
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Casings4.java6
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Machines.java53
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Item_Machines.java14
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java27
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java235
-rw-r--r--src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java128
-rw-r--r--src/main/java/gregtech/common/render/GT_TextureBuilder.java39
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_PreLoad.java3
27 files changed, 1292 insertions, 71 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
index 1309186528..f834af648d 100644
--- a/src/main/java/gregtech/GT_Mod.java
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -1,5 +1,6 @@
package gregtech;
+import appeng.api.AEApi;
import com.google.common.base.Stopwatch;
import cpw.mods.fml.common.*;
import cpw.mods.fml.common.event.*;
@@ -20,6 +21,7 @@ import gregtech.common.GT_DummyWorld;
import gregtech.common.GT_Network;
import gregtech.common.GT_Proxy;
import gregtech.common.GT_RecipeAdder;
+import gregtech.common.covers.GT_Cover_FacadeAE;
import gregtech.common.entities.GT_Entity_Arrow;
import gregtech.common.entities.GT_Entity_Arrow_Potion;
import gregtech.common.misc.GT_Command;
@@ -343,8 +345,15 @@ public class GT_Mod implements IGT_Mod {
GT_Forestry_Compat.transferCentrifugeRecipes();
GT_Forestry_Compat.transferSqueezerRecipes();
}
- if (GregTech_API.mAE2)
+ if (GregTech_API.mAE2) {
GT_MetaTileEntity_DigitalChestBase.registerAEIntegration();
+ ItemStack facade = AEApi.instance().definitions().items().facade().maybeItem()
+ .transform(i -> new ItemStack(i, 1, GT_Values.W))
+ .orNull();
+ if (facade != null) {
+ GregTech_API.registerCover(facade, null, new GT_Cover_FacadeAE());
+ }
+ }
Arrays.stream(new String[]{
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java
index 23c4bdade0..011bd3d86e 100644
--- a/src/main/java/gregtech/api/GregTech_API.java
+++ b/src/main/java/gregtech/api/GregTech_API.java
@@ -767,9 +767,10 @@ public class GregTech_API {
if (aStack == null || aStack.getItem() == null)
return sNoBehavior;
GT_CoverBehaviorBase<?> rCover = sCoverBehaviors.get(new GT_ItemStack(aStack));
- if (rCover == null)
- return sDefaultBehavior;
- return rCover;
+ if (rCover != null) return rCover;
+ rCover = sCoverBehaviors.get(new GT_ItemStack(aStack, true));
+ if (rCover != null) return rCover;
+ return sDefaultBehavior;
}
/**
diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java
index 6505c34423..d922c2787c 100644
--- a/src/main/java/gregtech/api/enums/GT_Values.java
+++ b/src/main/java/gregtech/api/enums/GT_Values.java
@@ -9,7 +9,9 @@ import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.OreDictionary;
+import java.util.HashSet;
import java.util.Locale;
+import java.util.Set;
/**
* Made for static imports, this Class is just a Helper.
@@ -303,6 +305,8 @@ public class GT_Values {
public static boolean debugChunkloaders = false;
public static boolean cls_enabled;
+ public static final Set<String> mCTMEnabledBlock = new HashSet<>();
+ public static final Set<String> mCTMDisabledBlock = new HashSet<>();
public static boolean hideAssLineRecipes = false;
public static boolean updateFluidDisplayItems = true;
diff --git a/src/main/java/gregtech/api/interfaces/ITextureBuilder.java b/src/main/java/gregtech/api/interfaces/ITextureBuilder.java
index d72b538243..d0d25328b9 100644
--- a/src/main/java/gregtech/api/interfaces/ITextureBuilder.java
+++ b/src/main/java/gregtech/api/interfaces/ITextureBuilder.java
@@ -65,6 +65,22 @@ public interface ITextureBuilder {
ITextureBuilder stdOrient();
/**
+ * Force using world coord overload of getIcon.
+ *
+ * @return {@link ITextureBuilder} for chaining
+ * @throws IllegalStateException if setFromBlock has never been called.
+ */
+ ITextureBuilder useWorldCoord();
+
+ /**
+ * Force using meta overload of getIcon.
+ *
+ * @return {@link ITextureBuilder} for chaining
+ * @throws IllegalStateException if setFromBlock has never been called.
+ */
+ ITextureBuilder noWorldCoord();
+
+ /**
* Texture will orientate from block's {@link ExtendedFacing}
*
* @return {@link ITextureBuilder} for chaining
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
index bd060d9ae8..e0125ae50a 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
@@ -8,10 +8,8 @@ import java.util.Arrays;
import java.util.List;
import java.util.UUID;
-import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Textures;
-import gregtech.api.enums.Textures.BlockIcons;
import gregtech.api.graphs.Node;
import gregtech.api.graphs.paths.NodePath;
import gregtech.api.interfaces.ITexture;
@@ -25,12 +23,9 @@ import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
-import gregtech.api.util.ISerializableObject;
-import gregtech.common.GT_Client;
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.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -147,6 +142,9 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
oZ = zCoord;
if (isServerSide())
checkDropCover();
+ else {
+ requestCoverDataIfNeeded();
+ }
worldObj.markTileEntityChunkModified(xCoord, yCoord, zCoord, this);
mMetaTileEntity.onFirstTick(this);
if (!hasValidMetaTileEntity()) return;
@@ -247,6 +245,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
);
mSendClientData = false;
}
+ sendCoverDataIfNeeded();
}
@Override
@@ -371,22 +370,11 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
@Override
public void issueCoverUpdate(byte aSide) {
+ super.issueCoverUpdate(aSide);
issueClientUpdate();
}
@Override
- public void receiveCoverData(byte coverSide, int coverID, int coverData) {
- if ((coverSide >= 0 && coverSide < 6) && (mCoverSides[coverSide] == coverID))
- setCoverDataAtSide(coverSide, coverData);
- }
-
- @Override
- public void receiveCoverData(byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) {
- if ((aCoverSide >= 0 && aCoverSide < 6) && (mCoverSides[aCoverSide] == aCoverID))
- setCoverDataAtSide(aCoverSide, aCoverData);
- }
-
- @Override
public byte getStrongestRedstone() {
return (byte) Math.max(getInternalInputRedstoneSignal((byte) 0), Math.max(getInternalInputRedstoneSignal((byte) 1), Math.max(getInternalInputRedstoneSignal((byte) 2), Math.max(getInternalInputRedstoneSignal((byte) 3), Math.max(getInternalInputRedstoneSignal((byte) 4), getInternalInputRedstoneSignal((byte) 5))))));
}
@@ -401,14 +389,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
return getInternalInputRedstoneSignal(aSide) > 0;
}
- public ITexture getCoverTexture(byte aSide) {
- if (getCoverIDAtSide(aSide) == 0) return null;
- if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) {
- return BlockIcons.HIDDEN_TEXTURE[0]; // See through
- }
- return GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide)));
- }
-
@Override
public boolean isGivingInformation() {
if (canAccessData()) return mMetaTileEntity.isGivingInformation();
@@ -860,8 +840,8 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
if (getCoverIDAtSide(aSide) == 0) coverSide = tSide;
if (getCoverIDAtSide(coverSide) == 0) {
- if (GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem))) {
- if (GregTech_API.getCoverBehaviorNew(tCurrentItem).isCoverPlaceable(coverSide, new GT_ItemStack(tCurrentItem), this) &&
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCovers.keySet())) {
+ if (GregTech_API.getCoverBehaviorNew(tCurrentItem).isCoverPlaceable(coverSide, tCurrentItem, this) &&
mMetaTileEntity.allowCoverOnSide(coverSide, new GT_ItemStack(tCurrentItem)))
{
setCoverItemAtSide(coverSide, tCurrentItem);
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index ddcb9b99cd..5786edc8ce 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -19,7 +19,6 @@ import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Textures;
-import gregtech.api.enums.Textures.BlockIcons;
import gregtech.api.graphs.GenerateNodeMap;
import gregtech.api.graphs.GenerateNodeMapPower;
import gregtech.api.graphs.Node;
@@ -32,7 +31,6 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
import gregtech.api.net.GT_Packet_TileEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.util.*;
-import gregtech.common.GT_Client;
import gregtech.common.GT_Pollution;
import ic2.api.Direction;
import net.minecraft.block.Block;
@@ -40,7 +38,6 @@ import net.minecraft.block.BlockFire;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -271,6 +268,8 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
oZ = zCoord;
if (aSideServer) {
checkDropCover();
+ } else {
+ requestCoverDataIfNeeded();
}
worldObj.markTileEntityChunkModified(xCoord, yCoord, zCoord, this);
mMetaTileEntity.onFirstTick(this);
@@ -552,6 +551,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
);
mSendClientData = false;
}
+ sendCoverDataIfNeeded();
}
@Override
@@ -706,22 +706,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
@Override
public void issueCoverUpdate(byte aSide) {
+ super.issueCoverUpdate(aSide);
issueClientUpdate();
}
@Override
- public void receiveCoverData(byte coverSide, int coverID, int coverData) {
- if ((coverSide >= 0 && coverSide < 6) && (mCoverSides[coverSide] == coverID))
- setCoverDataAtSide(coverSide, coverData);
- }
-
- @Override
- public void receiveCoverData(byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) {
- if ((aCoverSide >= 0 && aCoverSide < 6) && (mCoverSides[aCoverSide] == aCoverID))
- setCoverDataAtSide(aCoverSide, aCoverData);
- }
-
- @Override
public byte getStrongestRedstone() {
return (byte) Math.max(getInternalInputRedstoneSignal((byte) 0), Math.max(getInternalInputRedstoneSignal((byte) 1), Math.max(getInternalInputRedstoneSignal((byte) 2), Math.max(getInternalInputRedstoneSignal((byte) 3), Math.max(getInternalInputRedstoneSignal((byte) 4), getInternalInputRedstoneSignal((byte) 5))))));
}
@@ -736,14 +725,6 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
return getInternalInputRedstoneSignal(aSide) > 0;
}
- public ITexture getCoverTexture(byte aSide) {
- if (getCoverIDAtSide(aSide) == 0) return null;
- if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) {
- return BlockIcons.HIDDEN_TEXTURE[0]; // See through
- }
- return GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide)));
- }
-
@Override
public boolean isGivingInformation() {
if (canAccessData()) return mMetaTileEntity.isGivingInformation();
@@ -1403,8 +1384,8 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
if (getCoverIDAtSide(aSide) == 0) coverSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
if (getCoverIDAtSide(coverSide) == 0) {
- if (GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem))) {
- if (GregTech_API.getCoverBehaviorNew(tCurrentItem).isCoverPlaceable(coverSide, new GT_ItemStack(tCurrentItem), this) &&
+ if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCovers.keySet())) {
+ if (GregTech_API.getCoverBehaviorNew(tCurrentItem).isCoverPlaceable(coverSide, tCurrentItem, this) &&
mMetaTileEntity.allowCoverOnSide(coverSide, new GT_ItemStack(tCurrentItem)))
{
setCoverItemAtSide(coverSide, tCurrentItem);
diff --git a/src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java
index 0460f93f78..13bb70dbda 100644
--- a/src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java
@@ -2,15 +2,21 @@ package gregtech.api.metatileentity;
import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.net.GT_Packet_RequestCoverData;
+import gregtech.api.net.GT_Packet_SendCoverData;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.GT_Client;
import gregtech.common.covers.GT_Cover_Fluidfilter;
import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@@ -20,13 +26,15 @@ import net.minecraftforge.fluids.FluidRegistry;
import java.util.Arrays;
import static gregtech.GT_Mod.GT_FML_LOGGER;
+import static gregtech.api.enums.GT_Values.NW;
public abstract class CoverableGregTechTileEntity extends BaseTileEntity implements IGregTechTileEntity {
- static final String[] COVER_DATA_NBT_KEYS = Arrays.stream(ForgeDirection.VALID_DIRECTIONS).mapToInt(Enum::ordinal).mapToObj(i -> "mCoverData" + i).toArray(String[]::new);
+ public static final String[] COVER_DATA_NBT_KEYS = Arrays.stream(ForgeDirection.VALID_DIRECTIONS).mapToInt(Enum::ordinal).mapToObj(i -> "mCoverData" + i).toArray(String[]::new);
protected final GT_CoverBehaviorBase<?>[] mCoverBehaviors = new GT_CoverBehaviorBase<?>[]{GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior};
protected int[] mCoverSides = new int[]{0, 0, 0, 0, 0, 0};
protected ISerializableObject[] mCoverData = new ISerializableObject[6];
+ protected final boolean[] mCoverNeedUpdate = new boolean[]{false, false, false, false, false, false};
protected short mID = 0;
public long mTickTimer = 0;
@@ -115,6 +123,8 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
mCoverData[i] = mCoverBehaviors[i].createDataObject(aNBT.getTag(COVER_DATA_NBT_KEYS[i]));
else
mCoverData[i] = mCoverBehaviors[i].createDataObject();
+ if (mCoverBehaviors[i].isDataNeededOnClient(i, mCoverSides[i], mCoverData[i], this))
+ issueCoverUpdate(i);
}
}
}
@@ -145,7 +155,29 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]);
}
- protected abstract boolean hasValidMetaTileEntity();
+ @Override
+ public void issueCoverUpdate(byte aSide) {
+ if (isServerSide() && getCoverBehaviorAtSideNew(aSide).isDataNeededOnClient(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
+ mCoverNeedUpdate[aSide] = true;
+ }
+
+ public ITexture getCoverTexture(byte aSide) {
+ if (getCoverIDAtSide(aSide) == 0) return null;
+ if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) {
+ return Textures.BlockIcons.HIDDEN_TEXTURE[0]; // See through
+ }
+ ITexture coverTexture = getCoverBehaviorAtSideNew(aSide).getSpecialCoverTexture(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
+ return coverTexture != null ? coverTexture : GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide)));
+ }
+
+ protected void requestCoverDataIfNeeded() {
+ for (byte i = 0; i < 6; i++) {
+ if (getCoverBehaviorAtSideNew(i).isDataNeededOnClient(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this))
+ NW.sendToServer(new GT_Packet_RequestCoverData(i, getCoverIDAtSide(i), this));
+ }
+ }
+
+ protected abstract boolean hasValidMetaTileEntity();
protected boolean createNewMetatileEntity(short aID) {
if (aID <= 0 || aID >= GregTech_API.METATILEENTITIES.length || GregTech_API.METATILEENTITIES[aID] == null) {
@@ -162,7 +194,9 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
@Override
public void setCoverIDAtSide(byte aSide, int aID) {
- if (aSide >= 0 && aSide < 6) {
+ if (aSide >= 0 && aSide < 6 && mCoverSides[aSide] != aID) {
+ if (aID == 0 && isClientSide())
+ mCoverBehaviors[aSide].onDropped(aSide, mCoverSides[aSide], mCoverData[aSide], this);
mCoverSides[aSide] = aID;
mCoverBehaviors[aSide] = GregTech_API.getCoverBehaviorNew(aID);
mCoverData[aSide] = mCoverBehaviors[aSide].createDataObject();
@@ -192,7 +226,7 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
@Override
public ItemStack getCoverItemAtSide(byte aSide) {
- return GT_Utility.intToStack(getCoverIDAtSide(aSide));
+ return getCoverBehaviorAtSideNew(aSide).getDisplayStack(getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide));
}
@Override
@@ -245,7 +279,7 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
if (getCoverBehaviorAtSideNew(aSide).onCoverRemoval(aSide, getCoverIDAtSide(aSide), mCoverData[aSide], this, aForced) || aForced) {
ItemStack tStack = getCoverBehaviorAtSideNew(aSide).getDrop(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
if (tStack != null) {
- tStack.setTagCompound(null);
+ getCoverBehaviorAtSideNew(aSide).onDropped(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
EntityItem tEntity = new EntityItem(worldObj, getOffsetX(aDroppedSide, 1) + 0.5, getOffsetY(aDroppedSide, 1) + 0.5, getOffsetZ(aDroppedSide, 1) + 0.5, tStack);
tEntity.motionX = 0;
tEntity.motionY = 0;
@@ -264,4 +298,33 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
setOutputRedstoneSignal(aSide, (byte) 0);
}
+ @Override
+ public void receiveCoverData(byte coverSide, int coverID, int coverData) {
+ if ((coverSide >= 0 && coverSide < 6) && (mCoverSides[coverSide] == coverID))
+ setCoverDataAtSide(coverSide, coverData);
+ }
+
+ @Override
+ public void receiveCoverData(byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) {
+ if ((aCoverSide >= 0 && aCoverSide < 6) && (mCoverSides[aCoverSide] == aCoverID)) {
+ setCoverDataAtSide(aCoverSide, aCoverData);
+ if (isClientSide())
+ getCoverBehaviorAtSideNew(aCoverSide).onDataChanged(aCoverSide, aCoverID, aCoverData, this);
+ }
+ }
+
+ protected void sendCoverDataIfNeeded() {
+ int mCoverNeedUpdateLength = mCoverNeedUpdate.length;
+ for (byte i = 0; i < mCoverNeedUpdateLength; i++) {
+ if (mCoverNeedUpdate[i]) {
+ NW.sendPacketToAllPlayersInRange(
+ worldObj,
+ new GT_Packet_SendCoverData(
+ i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this),
+ xCoord, zCoord
+ );
+ mCoverNeedUpdate[i] = false;
+ }
+ }
+ }
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java
index 8f54112885..a2de864f41 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java
@@ -55,6 +55,7 @@ public abstract class GT_MetaTileEntity_EnhancedMultiBlockBase<T extends GT_Meta
mExtendedFacing = newExtendedFacing;
IGregTechTileEntity base = getBaseMetaTileEntity();
mMachine = false;
+ mUpdated = false;
mUpdate = 100;
if (getBaseMetaTileEntity().isServerSide()) {
StructureLibAPI.sendAlignment((IAlignmentProvider) base,
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
index 8fa9819e6a..5564ff6b88 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
@@ -39,7 +39,8 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {
public boolean mMachine = false, mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, mSolderingTool = false, mCrowbar = false, mRunningOnLoad = false;
public boolean mStructureChanged = false;
public int mPollution = 0, mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mEfficiencyIncrease = 0, mStartUpCheck = 100, mRuntime = 0, mEfficiency = 0;
- public volatile int mUpdate = 0; //TODO: Replace with AtomicInteger
+ public volatile boolean mUpdated = false;
+ public int mUpdate = 0;
public ItemStack[] mOutputItems = null;
public FluidStack[] mOutputFluids = null;
public String mNEI;
@@ -243,7 +244,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {
@Override
public void onMachineBlockUpdate() {
- mUpdate = 50;
+ mUpdated = true;
}
/**
@@ -280,6 +281,10 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
if (mEfficiency < 0) mEfficiency = 0;
+ if (mUpdated) {
+ mUpdate = 50;
+ mUpdated = false;
+ }
if (--mUpdate == 0 || --mStartUpCheck == 0) {
checkStructure(true, aBaseMetaTileEntity);
}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java
new file mode 100644
index 0000000000..93bc5eba72
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java
@@ -0,0 +1,102 @@
+package gregtech.api.net;
+
+import com.google.common.io.ByteArrayDataInput;
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.ISerializableObject;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.network.INetHandler;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.common.DimensionManager;
+
+/**
+ * Client -> Server : ask for cover data
+ */
+public class GT_Packet_RequestCoverData extends GT_Packet_New {
+ protected int mX;
+ protected short mY;
+ protected int mZ;
+
+ protected byte side;
+ protected int coverID;
+
+ protected EntityPlayerMP mPlayer;
+
+ public GT_Packet_RequestCoverData() {
+ super(true);
+ }
+
+ public GT_Packet_RequestCoverData(int mX, short mY, int mZ, byte coverSide, int coverID) {
+ super(false);
+ this.mX = mX;
+ this.mY = mY;
+ this.mZ = mZ;
+
+ this.side = coverSide;
+ this.coverID = coverID;
+ }
+ public GT_Packet_RequestCoverData(byte coverSide, int coverID, ICoverable tile) {
+ super(false);
+ this.mX = tile.getXCoord();
+ this.mY = tile.getYCoord();
+ this.mZ = tile.getZCoord();
+
+ this.side = coverSide;
+ this.coverID = coverID;
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 17;
+ }
+
+ @Override
+ public void encode(ByteBuf aOut) {
+ aOut.writeInt(mX);
+ aOut.writeShort(mY);
+ aOut.writeInt(mZ);
+
+ aOut.writeByte(side);
+ aOut.writeInt(coverID);
+ }
+
+ @Override
+ public GT_Packet_New decode(ByteArrayDataInput aData) {
+ return new GT_Packet_RequestCoverData(
+ aData.readInt(),
+ aData.readShort(),
+ aData.readInt(),
+
+ aData.readByte(),
+ aData.readInt()
+ );
+ }
+
+ @Override
+ public void setINetHandler(INetHandler aHandler) {
+ if (aHandler instanceof NetHandlerPlayServer) {
+ mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity;
+ }
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ if (mPlayer == null) // impossible, but who knows
+ return;
+ World world = DimensionManager.getWorld(mPlayer.dimension);
+ if (world != null) {
+ TileEntity tile = world.getTileEntity(mX, mY, mZ);
+ if (tile instanceof IGregTechTileEntity) {
+ IGregTechTileEntity te = (IGregTechTileEntity) tile;
+ if (!te.isDead() && te.getCoverIDAtSide(side) == coverID) {
+ te.issueCoverUpdate(side);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java
new file mode 100644
index 0000000000..3e1abac4e7
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java
@@ -0,0 +1,90 @@
+package gregtech.api.net;
+
+import com.google.common.io.ByteArrayDataInput;
+import gregtech.api.GregTech_API;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.util.ISerializableObject;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.common.DimensionManager;
+
+/**
+ * Server -> Client : Update cover data
+ */
+public class GT_Packet_SendCoverData extends GT_Packet_New {
+ protected int mX;
+ protected short mY;
+ protected int mZ;
+
+ protected byte side;
+ protected int coverID;
+ protected ISerializableObject coverData;
+
+ public GT_Packet_SendCoverData() {
+ super(true);
+ }
+
+ public GT_Packet_SendCoverData(int mX, short mY, int mZ, byte coverSide, int coverID, ISerializableObject coverData) {
+ super(false);
+ this.mX = mX;
+ this.mY = mY;
+ this.mZ = mZ;
+
+ this.side = coverSide;
+ this.coverID = coverID;
+ this.coverData = coverData;
+ }
+ public GT_Packet_SendCoverData(byte coverSide, int coverID, ISerializableObject coverData, ICoverable tile) {
+ super(false);
+ this.mX = tile.getXCoord();
+ this.mY = tile.getYCoord();
+ this.mZ = tile.getZCoord();
+
+ this.side = coverSide;
+ this.coverID = coverID;
+ this.coverData = coverData;
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 16;
+ }
+
+ @Override
+ public void encode(ByteBuf aOut) {
+ aOut.writeInt(mX);
+ aOut.writeShort(mY);
+ aOut.writeInt(mZ);
+
+ aOut.writeByte(side);
+