aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGlease <4586901+Glease@users.noreply.github.com>2022-09-04 00:01:02 +0800
committerGitHub <noreply@github.com>2022-09-03 18:01:02 +0200
commit57543ea5994402f6859a83b55e2cdddd12b4f069 (patch)
treebe227fa9b3de366b2d70f62a7f2009d1bef05b39 /src
parent1d081aab2517de56a8d4e76b09e6abf7a0453009 (diff)
downloadGT5-Unofficial-57543ea5994402f6859a83b55e2cdddd12b4f069.tar.gz
GT5-Unofficial-57543ea5994402f6859a83b55e2cdddd12b4f069.tar.bz2
GT5-Unofficial-57543ea5994402f6859a83b55e2cdddd12b4f069.zip
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>
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/GT_Mod.java9
-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
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Machines.java5
-rw-r--r--src/main/java/gregtech/loaders/misc/GT_Achievements.java9
6 files changed, 53 insertions, 7 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
index 1d1f8cb0d6..351895636e 100644
--- a/src/main/java/gregtech/GT_Mod.java
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -29,6 +29,7 @@ import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.internal.IGT_Mod;
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.objects.ItemData;
import gregtech.api.objects.ReverseShapedRecipe;
@@ -180,6 +181,14 @@ public class GT_Mod implements IGT_Mod {
GT_Values.DW = new GT_DummyWorld();
GT_Values.NW = new GT_Network();
GT_Values.RA = new GT_RecipeAdder();
+
+ for (int i = 0; i < 4; i++) {
+ GregTech_API.registerTileEntityConstructor(i, i2 -> GregTech_API.constructBaseMetaTileEntity());
+ }
+ for (int i = 4; i < 12; i++) {
+ GregTech_API.registerTileEntityConstructor(i, i2 -> new BaseMetaPipeEntity());
+ }
+
//noinspection deprecation// Need run-time initialization
GregTech_API.sRecipeAdder = GT_Values.RA;
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);
}
}
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
index ea1df39932..b497ccaa8e 100644
--- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
@@ -587,10 +587,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo
@Override
public TileEntity createTileEntity(World aWorld, int aMeta) {
- if (aMeta < 4) {
- return GregTech_API.constructBaseMetaTileEntity();
- }
- return new BaseMetaPipeEntity();
+ return GregTech_API.createTileEntity(aMeta);
}
@Override
diff --git a/src/main/java/gregtech/loaders/misc/GT_Achievements.java b/src/main/java/gregtech/loaders/misc/GT_Achievements.java
index c0a89e723c..eb556f0a44 100644
--- a/src/main/java/gregtech/loaders/misc/GT_Achievements.java
+++ b/src/main/java/gregtech/loaders/misc/GT_Achievements.java
@@ -367,6 +367,15 @@ public class GT_Achievements {
}
public Achievement registerAssAchievement(GT_Recipe recipe) {
+ if (recipe == null) {
+ GT_Mod.GT_FML_LOGGER.error("Invalid achievement registration attempt for null recipe", new Exception());
+ return null;
+ }
+ if (recipe.getOutput(0) == null) {
+ GT_Mod.GT_FML_LOGGER.error(
+ "Invalid achievement registration attempt for recipe with null output", new Exception());
+ return null;
+ }
if (this.achievementList.get(recipe.getOutput(0).getUnlocalizedName()) == null) {
assReg++;
return registerAchievement(