From 57543ea5994402f6859a83b55e2cdddd12b4f069 Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Sun, 4 Sep 2022 00:01:02 +0800 Subject: merge in ASM-ed in changes from gt++ (#1339) * merge in ASM-ed in changes from gt++ * Spotless apply for branch gtpp-asm-merge for #1339 (#1340) Co-authored-by: Glease <4586901+Glease@users.noreply.github.com> Co-authored-by: GitHub GTNH Actions <> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/main/java/gregtech/api/GregTech_API.java | 19 +++++++++++++++++++ .../api/metatileentity/BaseMetaTileEntity.java | 9 ++++++++- .../java/gregtech/api/net/GT_Packet_TileEntity.java | 9 +++++++-- 3 files changed, 34 insertions(+), 3 deletions(-) (limited to 'src/main/java/gregtech/api') 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 sBaseMetaTileEntityClass = null; + @SuppressWarnings("unchecked") + private static final IntFunction[] 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 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); } } -- cgit