aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java19
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java9
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntity.java9
3 files changed, 34 insertions, 3 deletions
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java
index b565190507..7a52021eea 100644
--- a/src/main/java/gregtech/api/GregTech_API.java
+++ b/src/main/java/gregtech/api/GregTech_API.java
@@ -55,6 +55,7 @@ import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiFunction;
+import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import net.minecraft.block.Block;
@@ -63,6 +64,7 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
@@ -368,6 +370,9 @@ public class GregTech_API {
private static Class<BaseMetaTileEntity> sBaseMetaTileEntityClass = null;
+ @SuppressWarnings("unchecked")
+ private static final IntFunction<TileEntity>[] teCreators = new IntFunction[16];
+
static {
sItemStackMappings.add(sCovers);
sItemStackMappings.add(sCoverBehaviors);
@@ -1039,4 +1044,18 @@ public class GregTech_API {
public static void setItemIconRegister(IIconRegister aIconRegister) {
GregTech_API.sItemIcons = aIconRegister;
}
+
+ public static void registerTileEntityConstructor(int meta, IntFunction<TileEntity> constructor) {
+ if (meta < 0 || meta > 15 || constructor == null) throw new IllegalArgumentException();
+ if (teCreators[meta] != null)
+ throw new IllegalStateException(
+ "previous constructor: " + teCreators[meta] + " new constructor: " + constructor + " meta:" + meta);
+ teCreators[meta] = constructor;
+ }
+
+ public static TileEntity createTileEntity(int meta) {
+ meta = GT_Utility.clamp(meta, 0, 15);
+ if (teCreators[meta] == null) return null;
+ return teCreators[meta].apply(meta);
+ }
}
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index 76a6d3237e..cdc81220e6 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -1839,7 +1839,14 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
@Override
public void setMetaTileEntity(IMetaTileEntity aMetaTileEntity) {
- mMetaTileEntity = (MetaTileEntity) aMetaTileEntity;
+ if (aMetaTileEntity instanceof MetaTileEntity || aMetaTileEntity == null)
+ mMetaTileEntity = (MetaTileEntity) aMetaTileEntity;
+ else {
+ GT_FML_LOGGER.error(
+ "Unknown meta tile entity set! Class {}, inventory name {}.",
+ aMetaTileEntity.getClass(),
+ aMetaTileEntity.getInventoryName());
+ }
}
public byte getLightValue() {
diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java
index f805fee76c..b7aa229530 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java
@@ -1,6 +1,7 @@
package gregtech.api.net;
import com.google.common.io.ByteArrayDataInput;
+import gregtech.GT_Mod;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.metatileentity.BaseMetaTileEntity;
import gregtech.api.multitileentity.MultiTileEntityBlock;
@@ -160,8 +161,9 @@ public class GT_Packet_TileEntity extends GT_Packet_New {
@Override
public void process(IBlockAccess aWorld) {
- if (aWorld != null) {
- final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ);
+ if (aWorld == null) return;
+ final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ);
+ try {
final Block tBlock;
if (tTileEntity instanceof BaseMetaTileEntity)
((BaseMetaTileEntity) tTileEntity)
@@ -192,6 +194,9 @@ public class GT_Packet_TileEntity extends GT_Packet_New {
mRedstone,
mColor);
}
+ } catch (Exception e) {
+ GT_Mod.GT_FML_LOGGER.error(
+ "Exception setting tile entity data for tile entity {} at ({}, {}, {})", tTileEntity, mX, mY, mZ);
}
}