diff options
Diffstat (limited to 'src')
22 files changed, 437 insertions, 761 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java index ac523eb82c..f3c65a1bfe 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java @@ -1,10 +1,7 @@ package gregtech.api.metatileentity; -import static gregtech.api.enums.GT_Values.COMPASS_DIRECTIONS; import static gregtech.api.enums.GT_Values.GT; import static gregtech.api.enums.GT_Values.NW; -import static gregtech.api.enums.GT_Values.SIDE_DOWN; -import static gregtech.api.enums.GT_Values.SIDE_UP; import java.util.Arrays; import java.util.List; @@ -26,7 +23,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java index 800e9af20a..1697eb03ce 100644 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java +++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java @@ -14,6 +14,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; @@ -24,7 +25,6 @@ import net.minecraft.entity.EnumCreatureType; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; @@ -62,11 +62,14 @@ import gregtech.common.render.GT_MultiTile_Renderer; * MultiTileEntityBlock ported from GT6 */ @Optional.Interface(iface = "com.cricketcraft.chisel.api.IFacade", modid = "ChiselAPI") -public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITileEntityProvider, IFacade { +public class MultiTileEntityBlock extends BlockContainer implements IDebugableBlock, ITileEntityProvider, IFacade { + + private MultiTileEntityRegistry registry; private static boolean LOCK = false; - private boolean registered = false, normalCube; + private boolean registered = false; + private boolean normalCube; protected String internalName, toolName, materialName, modID; public String getName() { @@ -125,7 +128,7 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil internalName = getName(); lightOpacity = isOpaqueCube() ? 255 : 0; - GameRegistry.registerBlock(this, ItemBlock.class, internalName); + GameRegistry.registerBlock(this, MultiTileEntityItem.class, internalName); return this; } @@ -382,6 +385,18 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil return 0; } + public MultiTileEntityRegistry getRegistry() { + return registry; + } + + public void setRegistry(MultiTileEntityRegistry registry) { + this.registry = registry; + } + + public boolean isRegistered() { + return registered; + } + @Override protected boolean canSilkHarvest() { return false; @@ -389,11 +404,13 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil @Override public final String getLocalizedName() { + // return StatCollector.translateToLocal(registry.getInternalName() + ".name"); return StatCollector.translateToLocal(internalName + ".name"); } @Override public final String getUnlocalizedName() { + // return registry.getInternalName(); return internalName; } @@ -571,12 +588,7 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil } @Override - public final TileEntity createTileEntity(World world, int meta) { - return null; - } - - @Override - public TileEntity createNewTileEntity(World world, int i) { - return null; + public TileEntity createNewTileEntity(World world, int meta) { + return registry.getNewTileEntity(meta); } } diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlockRegistryInternal.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlockRegistryInternal.java deleted file mode 100644 index 3d8da5d796..0000000000 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlockRegistryInternal.java +++ /dev/null @@ -1,47 +0,0 @@ -package gregtech.api.multitileentity; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.util.StatCollector; - -import gregtech.common.render.GT_MultiTile_Renderer; - -/* - * The internal block used in the registry for lookup. - * - Not the same as the block spawned with the MuTE to allow for multiple different types of blocks/materials - * in each registry. - */ -public class MultiTileEntityBlockRegistryInternal extends Block { - - public MultiTileEntityRegistry registry; - - public MultiTileEntityBlockRegistryInternal() { - super(Material.anvil); - } - - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - /* Do Nothing */ - } - - @Override - public int getRenderType() { - return GT_MultiTile_Renderer.INSTANCE == null ? super.getRenderType() - : GT_MultiTile_Renderer.INSTANCE.getRenderId(); - } - - @Override - public final String getUnlocalizedName() { - return registry.getInternalName(); - } - - @Override - public final String getLocalizedName() { - return StatCollector.translateToLocal(registry.getInternalName() + ".name"); - } - - public MultiTileEntityRegistry getRegistry() { - return registry; - } -} diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java index 6eba28bad9..325f583149 100644 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java +++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java @@ -21,15 +21,11 @@ public class MultiTileEntityClassContainer { private String localized; private String categoryName; - public final short muteID; - public Class<? extends MultiTileEntity> muteClass; - public MultiTileEntityBlock block; - public MultiTileEntity referenceTileEntity; - public NBTTagCompound parameters; - - // These have defaults - public byte blockMetaData = 1; - public byte maxStackSize = 64; + private final short muteID; + private final Class<? extends MultiTileEntity> muteClass; + private MultiTileEntity referenceTileEntity; + private NBTTagCompound parameters; + public boolean hidden = false; public MultiTileEntityClassContainer(MultiTileEntityRegistry aRegistry, int aID, @@ -72,26 +68,11 @@ public class MultiTileEntityClassContainer { return this; } - public MultiTileEntityClassContainer meta(int aMeta) { - blockMetaData = (byte) aMeta; - return this; - } - - public MultiTileEntityClassContainer stackSize(int aStackSize) { - maxStackSize = (byte) aStackSize; - return this; - } - public MultiTileEntityClassContainer hide() { hidden = true; return this; } - public MultiTileEntityClassContainer setBlock(MultiTileEntityBlock aBlock) { - block = aBlock; - return this; - } - /* These methods are builder methods for commonly used NBT tags */ // Need a base texture for the MTE machine, and then a separate texture set for the machine/active overlays @@ -177,6 +158,26 @@ public class MultiTileEntityClassContainer { return this; } + public WeakReference<MultiTileEntityRegistry> getRegistry() { + return registry; + } + + public Class<? extends MultiTileEntity> getMuteClass() { + return muteClass; + } + + public short getMuteID() { + return muteID; + } + + public MultiTileEntity getReferenceTileEntity() { + return referenceTileEntity; + } + + public NBTTagCompound getParameters() { + return parameters; + } + private void verifyDescendentOf(Class<?> cls) { // Check if cls is extended by mClass if (!cls.isAssignableFrom(muteClass)) { diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityContainer.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityContainer.java deleted file mode 100644 index 3ca0ee46f4..0000000000 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityContainer.java +++ /dev/null @@ -1,24 +0,0 @@ -package gregtech.api.multitileentity; - -import net.minecraft.world.World; - -import gregtech.api.multitileentity.base.MultiTileEntity; -import gregtech.api.util.GT_Util; - -public class MultiTileEntityContainer { - - public final MultiTileEntity tileEntity; - public final MultiTileEntityBlock block; - public final byte blockMetaData; - - public MultiTileEntityContainer(MultiTileEntity tileEntity, MultiTileEntityBlock block, byte blockMetaData) { - this.blockMetaData = blockMetaData; - this.tileEntity = tileEntity; - this.block = block; - } - - public void setMultiTile(World aWorld, int aX, int aY, int aZ) { - GT_Util.setBlock(aWorld, aX, aY, aZ, block, blockMetaData, 0, false); - GT_Util.setTileEntity(aWorld, aX, aY, aZ, tileEntity, true); - } -} diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java index 8dc1d348ff..e67ab61e96 100644 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java +++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java @@ -16,44 +16,43 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.metatileentity.CoverableTileEntity; -import gregtech.api.multitileentity.interfaces.IItemUpdatable; import gregtech.api.multitileentity.interfaces.IMultiTileEntity; -public class MultiTileEntityItem extends ItemBlock implements IFluidContainerItem, IItemUpdatable { +public class MultiTileEntityItem extends ItemBlock { - public final MultiTileEntityBlockRegistryInternal mBlock; + public final MultiTileEntityBlock block; - public MultiTileEntityItem(Block aBlock) { - super(aBlock); + public MultiTileEntityItem(Block block) { + super(block); setMaxDamage(0); setHasSubtypes(true); - mBlock = (MultiTileEntityBlockRegistryInternal) aBlock; + this.block = (MultiTileEntityBlock) block; } @Override @SuppressWarnings("unchecked") - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List<String> aList, boolean aF3_H) { - final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack); - if (tTileEntityContainer == null) { - aList.add("INVALID ITEM!"); + public void addInformation(ItemStack stack, EntityPlayer player, List<String> list, boolean F3_H) { + final IMultiTileEntity mute = block.getRegistry() + .getReferenceTileEntity(stack); + if (mute == null) { + list.add("INVALID ITEM!"); return; } try { - tTileEntityContainer.tileEntity.addToolTips(aList, aStack, aF3_H); + mute.addToolTips(list, stack, F3_H); } catch (Throwable e) { GT_FML_LOGGER.error("addInformation", e); } - final NBTTagCompound aNBT = aStack.getTagCompound(); - CoverableTileEntity.addInstalledCoversInformation(aNBT, aList); + final NBTTagCompound aNBT = stack.getTagCompound(); + CoverableTileEntity.addInstalledCoversInformation(aNBT, list); // TODO: Add anything else relevant } @@ -61,68 +60,68 @@ public class MultiTileEntityItem extends ItemBlock implements IFluidContainerIte @SideOnly(Side.CLIENT) @SuppressWarnings("unchecked") public void getSubItems(Item aItem, CreativeTabs aTab, List<ItemStack> aList) { - for (MultiTileEntityClassContainer tClass : mBlock.registry.registrations) { - if (!tClass.hidden && ((IMultiTileEntity) tClass.referenceTileEntity) - .getSubItems(mBlock, aItem, aTab, aList, tClass.muteID)) { - aList.add(mBlock.registry.getItem(tClass.muteID)); + for (MultiTileEntityClassContainer tClass : block.getRegistry().registrations) { + if (!tClass.hidden && ((IMultiTileEntity) tClass.getReferenceTileEntity()) + .getSubItems(block, aItem, aTab, aList, tClass.getMuteID())) { + aList.add( + block.getRegistry() + .getItem(tClass.getMuteID())); } } } @Override - public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int ordinalSide, float aHitX, float aHitY, float aHitZ) { + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int ordinalSide, + float hitX, float hitY, float hitZ) { - if (aY < 0 || aY > aWorld.getHeight()) return false; + if (y < 0 || y > world.getHeight()) return false; - if (aPlayer == null) return false; + if (player == null) return false; try { ForgeDirection side = ForgeDirection.getOrientation(ordinalSide); - final Block tClickedBlock = aWorld.getBlock(aX, aY, aZ); + final Block clickedBlock = world.getBlock(x, y, z); - if (tClickedBlock instanceof BlockSnow && (aWorld.getBlockMetadata(aX, aY, aZ) & 7) < 1) { + if (clickedBlock instanceof BlockSnow && (world.getBlockMetadata(x, y, z) & 7) < 1) { ordinalSide = SIDE_TOP; side = ForgeDirection.UP; - } else if (tClickedBlock != Blocks.vine && tClickedBlock != Blocks.tallgrass - && tClickedBlock != Blocks.deadbush - && !tClickedBlock.isReplaceable(aWorld, aX, aY, aZ)) { - aX += side.offsetX; - aY += side.offsetY; - aZ += side.offsetZ; + } else if (clickedBlock != Blocks.vine && clickedBlock != Blocks.tallgrass + && clickedBlock != Blocks.deadbush + && !clickedBlock.isReplaceable(world, x, y, z)) { + x += side.offsetX; + y += side.offsetY; + z += side.offsetZ; } - final Block tReplacedBlock = aWorld.getBlock(aX, aY, aZ); + final Block tReplacedBlock = world.getBlock(x, y, z); - if (!tReplacedBlock.isReplaceable(aWorld, aX, aY, aZ) - || !mBlock.canReplace(aWorld, aX, aY, aZ, ordinalSide, aStack)) { + if (!tReplacedBlock.isReplaceable(world, x, y, z) + || !block.canReplace(world, x, y, z, ordinalSide, stack)) { return false; } - if (aStack.stackSize == 0 || (!aPlayer.canPlayerEdit(aX, aY, aZ, ordinalSide, aStack))) { + if (stack.stackSize == 0 || (!player.canPlayerEdit(x, y, z, ordinalSide, stack))) { return false; } + // final TileEntity tileEntity = block.getRegistry().getNewTileEntity(world, x, y, z, stack); - final MultiTileEntityContainer MuTEContainer = mBlock.registry - .getNewTileEntityContainer(aWorld, aX, aY, aZ, aStack); - - if (MuTEContainer == null) return false; - - if (!aWorld.setBlock(aX, aY, aZ, MuTEContainer.block, 15 - MuTEContainer.blockMetaData, 2)) { + if (!world.setBlock(x, y, z, block, Items.feather.getDamage(stack), 2)) { return false; } - - MuTEContainer.setMultiTile(aWorld, aX, aY, aZ); + final TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof IMultiTileEntity mute)) { + throw new IllegalStateException("TileEntity is not an IMultiTileEntity"); + } + // MuTEContainer.setMultiTile(world, x, y, z); try { - if (((IMultiTileEntity) MuTEContainer.tileEntity) - .onPlaced(aStack, aPlayer, aWorld, aX, aY, aZ, side, aHitX, aHitY, aHitZ)) { - aWorld.playSoundEffect( - aX + 0.5, - aY + 0.5, - aZ + 0.5, - MuTEContainer.block.stepSound.func_150496_b(), - (MuTEContainer.block.stepSound.getVolume() + 1) / 2, - MuTEContainer.block.stepSound.getPitch() * 0.8F); + if (mute.onPlaced(stack, player, world, x, y, z, side, hitX, hitY, hitZ)) { + world.playSoundEffect( + x + 0.5, + y + 0.5, + z + 0.5, + block.stepSound.func_150496_b(), + (block.stepSound.getVolume() + 1) / 2, + block.stepSound.getPitch() * 0.8F); } } catch (Throwable e) { GT_FML_LOGGER.error("onPlaced", e); @@ -139,25 +138,25 @@ public class MultiTileEntityItem extends ItemBlock implements IFluidContainerIte // } // spotless:on try { - if (!aWorld.isRemote) { - aWorld.notifyBlockChange(aX, aY, aZ, tReplacedBlock); - aWorld.func_147453_f /* updateNeighborsAboutBlockChange */(aX, aY, aZ, MuTEContainer.block); + if (!world.isRemote) { + world.notifyBlockChange(x, y, z, tReplacedBlock); + world.func_147453_f /* updateNeighborsAboutBlockChange */(x, y, z, block); } } catch (Throwable e) { GT_FML_LOGGER.error("notifyBlockChange", e); } try { - ((IMultiTileEntity) MuTEContainer.tileEntity).onTileEntityPlaced(); + mute.onTileEntityPlaced(); } catch (Throwable e) { GT_FML_LOGGER.error("onTileEntityPlaced", e); } try { - aWorld.func_147451_t /* updateAllLightTypes */(aX, aY, aZ); + world.func_147451_t /* updateAllLightTypes */(x, y, z); } catch (Throwable e) { GT_FML_LOGGER.error("updateAllLightTypes", e); } - aStack.stackSize--; + stack.stackSize--; return true; } catch (Throwable e) { @@ -167,87 +166,6 @@ public class MultiTileEntityItem extends ItemBlock implements IFluidContainerIte } @Override - public void updateItemStack(ItemStack aStack) { - final MultiTileEntityClassContainer tContainer = mBlock.registry.getClassContainer(aStack); - if (tContainer == null) return; - final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack); - if (tTileEntityContainer != null && tTileEntityContainer.tileEntity instanceof IItemUpdatable itemUpdatable) { - itemUpdatable.updateItemStack(aStack); - } - } - - @Override - public void updateItemStack(ItemStack aStack, World aWorld, int aX, int aY, int aZ) { - final MultiTileEntityClassContainer tContainer = mBlock.registry.getClassContainer(aStack); - if (tContainer == null) return; - final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack); - if (tTileEntityContainer != null && tTileEntityContainer.tileEntity instanceof IItemUpdatable itemUpdatable) { - itemUpdatable.updateItemStack(aStack, aWorld, aX, aY, aZ); - } - } - - @Override - public int getItemStackLimit(ItemStack aStack) { - final MultiTileEntityClassContainer tContainer = mBlock.registry.getClassContainer(aStack); - if (tContainer == null) return 1; - final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack); - return tContainer.maxStackSize; - } - - @Override - public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - updateItemStack(aStack); - } - - @Override - public FluidStack getFluid(ItemStack aStack) { - final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack); - if (tTileEntityContainer != null - && tTileEntityContainer.tileEntity instanceof IFluidContainerItem fluidContainerItem) { - final FluidStack rFluid = fluidContainerItem.getFluid(aStack); - updateItemStack(aStack); - return rFluid; - } - return null; - } - - @Override - public int getCapacity(ItemStack aStack) { - final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack); - if (tTileEntityContainer != null - && tTileEntityContainer.tileEntity instanceof IFluidContainerItem fluidContainerItem) { - final int rCapacity = fluidContainerItem.getCapacity(aStack); - updateItemStack(aStack); - return rCapacity; - } - return 0; - } - - @Override - public int fill(ItemStack aStack, FluidStack aFluid, boolean aDoFill) { - final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack); - if (tTileEntityContainer != null - && tTileEntityContainer.tileEntity instanceof IFluidContainerItem fluidContainerItem) { - final int tFilled = fluidContainerItem.fill(aStack, aFluid, aDoFill); - updateItemStack(aStack); - return tFilled; - } - return 0; - } - - @Override - public FluidStack drain(ItemStack aStack, int aMaxDrain, boolean aDoDrain) { - final MultiTileEntityContainer tTileEntityContainer = mBlock.registry.getCachedTileEntityContainer(aStack); - if (tTileEntityContainer != null - && tTileEntityContainer.tileEntity instanceof IFluidContainerItem fluidContainerItem) { - final FluidStack rFluid = fluidContainerItem.drain(aStack, aMaxDrain, aDoDrain); - updateItemStack(aStack); - return rFluid; - } - return null; - } - - @Override public boolean func_150936_a /* canPlaceAtSide */(World aWorld, int aX, int aY, int aZ, int ordinalSide, EntityPlayer aPlayer, ItemStack aStack) { return true; @@ -255,12 +173,15 @@ public class MultiTileEntityItem extends ItemBlock implements IFluidContainerIte @Override public final String getUnlocalizedName() { - return mBlock.registry.getInternalName(); + return block.getRegistry() + .getInternalName(); } @Override public final String getUnlocalizedName(ItemStack aStack) { - return mBlock.registry.getInternalName() + "." + getDamage(aStack); + return block.getRegistry() + .getInternalName() + "." + + getDamage(aStack); } @Override diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java index 7fe83075cd..0b5afbb043 100644 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java +++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java @@ -10,7 +10,6 @@ import java.util.List; import net.minecraft.block.Block; import net.minecraft.init.Items; import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -22,7 +21,6 @@ import com.gtnewhorizon.gtnhlib.util.map.ItemStackMap; import appeng.core.CreativeTab; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.LoaderState; -import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.GT_Values; import gregtech.api.multitileentity.base.MultiTileEntity; import gregtech.api.multitileentity.interfaces.IMultiTileEntity; @@ -39,59 +37,50 @@ public class MultiTileEntityRegistry { // TODO: NBT sensitive or not? Starting with not for now private static final ItemStackMap<MultiTileEntityRegistry> REGISTRIES = new ItemStackMap<>(false); private static final HashSet<Class<?>> sRegisteredTileEntities = new HashSet<>(); - private final HashMap<Integer, MultiTileEntityContainer> cachedTileEntityContainers = new HashMap<>(); public HashMap<Short, CreativeTab> creativeTabs = new HashMap<>(); public final Short2ObjectMap<MultiTileEntityClassContainer> registry = new Short2ObjectOpenHashMap<>(); public List<MultiTileEntityClassContainer> registrations = new ArrayList<>(); private final String internalName; - private final MultiTileEntityBlockRegistryInternal block; - - private static MultiTileEntityBlockRegistryInternal regblock(String internalName, - MultiTileEntityBlockRegistryInternal block, Class<? extends ItemBlock> itemClass) { - GameRegistry.registerBlock(block, itemClass == null ? ItemBlock.class : itemClass, internalName); - return block; - } - - /** - * @param internalName the internal Name of the Item - */ - public MultiTileEntityRegistry(String internalName) { - this(internalName, new MultiTileEntityBlockRegistryInternal(), MultiTileEntityItem.class); - } + private final MultiTileEntityBlock block; /** * @param internalName the internal Name of the Item */ - public MultiTileEntityRegistry(String internalName, MultiTileEntityBlockRegistryInternal block, - Class<? extends ItemBlock> itemClass) { - this(internalName, regblock(internalName, block, itemClass)); - } - - /** - * @param internalName the internal Name of the Item - */ - public MultiTileEntityRegistry(String internalName, MultiTileEntityBlockRegistryInternal block) { + public MultiTileEntityRegistry(String internalName, MultiTileEntityBlock block) { if (!Loader.instance() .isInState(LoaderState.PREINITIALIZATION)) { throw new IllegalStateException( "The MultiTileEntity Registry must be initialized during Preload Phase and not before"); } + if (!block.isRegistered()) { + throw new IllegalStateException("Block not registered"); + } this.internalName = internalName; this.block = block; - GT_FML_LOGGER.info(internalName + " " + Block.getIdFromBlock(block) + "This is the answer"); - this.block.registry = this; + GT_FML_LOGGER.info(internalName + " " + Block.getIdFromBlock(block) + " This is the answer"); + this.block.setRegistry(this); REGISTRIES.put(new ItemStack(Item.getItemById(Block.getIdFromBlock(block)), 1, GT_Values.W), this); NAMED_REGISTRIES.put(internalName, this); } - public static TileEntity getCanonicalTileEntity(int aRegistryID, int aMultiTileEntityID) { + public static TileEntity getReferenceTileEntity(int aRegistryID, int aMultiTileEntityID) { final MultiTileEntityRegistry tRegistry = getRegistry(aRegistryID); if (tRegistry == null) return null; final MultiTileEntityClassContainer tClassContainer = tRegistry.getClassContainer(aMultiTileEntityID); if (tClassContainer == null) return null; - return tClassContainer.referenceTileEntity; + return tClassContainer.getReferenceTileEntity(); + } + + public MultiTileEntity getReferenceTileEntity(ItemStack stack) { + return getReferenceTileEntity(Items.feather.getDamage(stack)); + } + + public MultiTileEntity getReferenceTileEntity(int metaId) { + final MultiTileEntityClassContainer muteClass = registry.get((short) metaId); + if (muteClass == null) return null; + return muteClass.getReferenceTileEntity(); } public static MultiTileEntityRegistry getRegistry(int aRegistryID) { @@ -120,27 +109,27 @@ public class MultiTileEntityRegistry { GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class Container is null!"); tFailed = true; } else { - if (aClassContainer.muteClass == null) { + if (aClassContainer.getMuteClass() == null) { GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class inside Class Container is null!"); tFailed = true; } - if (aClassContainer.muteID == GT_Values.W) { + if (aClassContainer.getMuteID() == GT_Values.W) { GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class Container uses Wildcard MetaData!"); tFailed = true; } - if (aClassContainer.muteID < 0) { + if (aClassContainer.getMuteID() < 0) { GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class Container uses negative MetaData!"); tFailed = true; } - if (registry.containsKey(aClassContainer.muteID)) { + if (registry.containsKey(aClassContainer.getMuteID())) { GT_FML_LOGGER.error( - "MULTI-TILE REGISTRY ERROR: Class Container uses occupied MetaData! (" + aClassContainer.muteID + "MULTI-TILE REGISTRY ERROR: Class Container uses occupied MetaData! (" + aClassContainer.getMuteID() + ")"); tFailed = true; } } if (tFailed) { - GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: STACKTRACE START"); + GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR " + aLocalised + " : STACKTRACE START"); int i = 0; for (StackTraceElement tElement : new Exception().getStackTrace()) if (i++ < 5 && !tElement.getClassName() .startsWith("sun")) GT_FML_LOGGER.error("\tat " + tElement); @@ -149,16 +138,20 @@ public class MultiTileEntityRegistry { return null; } - GT_LanguageManager.addStringLocalization(internalName + "." + aClassContainer.muteID + ".name", aLocalised); - registry.put(aClassContainer.muteID, aClassContainer); - mLastRegisteredID = aClassContainer.muteID; + GT_LanguageManager + .addStringLocalization(internalName + "." + aClassContainer.getMuteID() + ".name", aLocalised); + registry.put(aClassContainer.getMuteID(), aClassContainer); + mLastRegisteredID = aClassContainer.getMuteID(); registrations.add(aClassContainer); - if (sRegisteredTileEntities.add(aClassContainer.referenceTileEntity.getClass())) { - aClassContainer.referenceTileEntity.onRegistrationFirst(this, aClassContainer.muteID); + if (sRegisteredTileEntities.add( + aClassContainer.getReferenceTileEntity() + .getClass())) { + aClassContainer.getReferenceTileEntity() + .onRegistrationFirst(this, aClassContainer.getMuteID()); } - return getItem(aClassContainer.muteID); + return getItem(aClassContainer.getMuteID()); } public short mLastRegisteredID = GT_Values.W; @@ -179,15 +172,15 @@ public class MultiTileEntityRegistry { return getItem(aID, aAmount, null); } - public ItemStack getItem(int aID, long aAmount, NBTTagCompound nbt) { - final ItemStack rStack = new ItemStack(block, (int) aAmount, aID); + public ItemStack getItem(int metaID, long amount, NBTTagCompound nbt) { + final ItemStack stack = new ItemStack(block, (int) amount, metaID); if (nbt == null || nbt.hasNoTags()) { nbt = new NBTTagCompound(); - final MultiTileEntityContainer tTileEntityContainer = getNewTileEntityContainer(aID, nbt); - if (tTileEntityContainer != null) ((IMultiTileEntity) tTileEntityContainer.tileEntity).writeItemNBT(nbt); + final TileEntity tileEntity = getNewTileEntity(metaID, nbt); + ((IMultiTileEntity) tileEntity).writeItemNBT(nbt); } - rStack.setTagCompound(nbt); - return rStack; + stack.setTagCompound(nbt); + return stack; } public String getLocal(int aID) { @@ -203,84 +196,37 @@ public class MultiTileEntityRegistry { } public TileEntity getNewTileEntity(int aID) { - final MultiTileEntityContainer tContainer = getNewTileEntityContainer(null, 0, 0, 0, aID, null); - return tContainer == null ? null : tContainer.tileEntity; - } - - public MultiTileEntityContainer getNewTileEntityContainer(World world, int x, int y, int z, int aID, - NBTTagCompound nbt) { - final MultiTileEntityClassContainer tClass = registry.get((short) aID); - if (tClass == null || tClass.block == null) return null; - final MultiTileEntityContainer container = new MultiTileEntityContainer( - (MultiTileEntity) GT_Utility.callConstructor(tClass.muteClass, -1, null, true), - tClass.block, - tClass.blockMetaData); - if (container.tileEntity == null) return null; - final MultiTileEntity tileEntity = container.tileEntity; - tileEntity.setWorldObj(world); - tileEntity.xCoord = x; - tileEntity.yCoord = y; - tileEntity.zCoord = z; - tileEntity.initFromNBT( - nbt == null || nbt.hasNoTags() ? tClass.parameters : GT_Util.fuseNBT(nbt, tClass.parameters), - (short) aID, - (short) Block.getIdFromBlock(block)); - return container; - } - - public TileEntity getNewTileEntity(World world, int x, int y, int z, int aID) { - final MultiTileEntityContainer tContainer = getNewTileEntityContainer(world, x, y, z, aID, null); - return tContainer == null ? null : tContainer.tileEntity; - } - - public TileEntity getNewTileEntity(ItemStack stack) { - final MultiTileEntityContainer tContainer = getNewTileEntityContainer( - null, - 0, - 0, - 0, - Items.feather.getDamage(stack), - stack.getTagCompound()); - return tContainer == null ? null : tContainer.tileEntity; - } - - public TileEntity getNewTileEntity(World world, int x, int y, int z, ItemStack stack) { - final MultiTileEntityContainer tContainer = getNewTileEntityContainer( - world, - x, - y, - z, - Items.feather.getDamage(stack), - stack.getTagCompound()); - return tContainer == null ? null : tContainer.tileEntity; - } - - public MultiTileEntityContainer getCachedTileEntityContainer(ItemStack stack) { - MultiTileEntityContainer container = cachedTileEntityContainers.get(Items.feather.getDamage(stack)); - if (container == null) { - container = getNewTileEntityContainer(stack); - cachedTileEntityContainers.put(Items.feather.getDamage(stack), container); - } - return container; + return getNewTileEntity(null, 0, 0, 0, aID); } - public MultiTileEntityContainer getNewTileEntityContainer(ItemStack stack) { - return getNewTileEntityContainer(null, 0, 0, 0, Items.feather.getDamage(stack), stack.getTagCompound()); + public TileEntity getNewTileEntity(World aWorld, int x, int y, int z, int metaID) { + return getNewTileEntity(aWorld, x, y, z, metaID, null); } - public MultiTileEntityContainer getNewTileEntityContainer(World world, int x, int y, int z, ItemStack stack) { - return getNewTileEntityContainer(world, x, y, z, Items.feather.getDamage(stack), stack.getTagCompound()); + public TileEntity getNewTileEntity(World aWorld, int x, int y, int z, int metaID, NBTTagCompound nbt) { + final MultiTileEntityClassContainer container = registry.get((short) metaID); + if (container == null) return null; + final MultiTileEntity te = (MultiTileEntity) GT_Utility + .callConstructor(container.getMuteClass(), -1, null, true); + te.setWorldObj(aWorld); + te.xCoord = x; + te.yCoord = y; + te.zCoord = z; + nbt = (nbt == null || nbt.hasNoTags()) ? container.getParameters() + : GT_Util.fuseNBT(nbt, container.getParameters()); + te.initFromNBT(nbt, (short) metaID, (short) Block.getIdFromBlock(block)); + return te; } - public MultiTileEntityContainer getNewTileEntityContainer(int aID, NBTTagCompound nbt) { - return getNewTileEntityContainer(null, 0, 0, 0, aID, nbt); + public TileEntity getNewTileEntity(int meta, NBTTagCompound nbt) { + return getNewTileEntity(null, 0, 0, 0, meta, nbt); } public String getInternalName() { return internalName; } - public MultiTileEntityBlockRegistryInternal getBlock() { + public MultiTileEntityBlock getBlock() { return block; } } diff --git a/src/main/java/gregtech/api/multitileentity/WeakTargetRef.java b/src/main/java/gregtech/api/multitileentity/WeakTargetRef.java new file mode 100644 index 0000000000..1509384f5e --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/WeakTargetRef.java @@ -0,0 +1,88 @@ +package gregtech.api.multitileentity; + +import java.lang.ref.WeakReference; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.World; + +import gregtech.api.multitileentity.interfaces.IMultiTileEntity; + +public class WeakTargetRef<T extends IMultiTileEntity> { + + protected final ChunkCoordinates position = new ChunkCoordinates(0, -1, 0); + protected final Class<?> targetClass; + protected boolean shouldCache; + protected WeakReference<T> target = new WeakReference<>(null); + protected World world = null; + + public WeakTargetRef(Class<?> targetClass, boolean shouldCache) { + this.targetClass = targetClass; + this.shouldCache = shouldCache; + } + + public WeakTargetRef(T target, boolean shouldCache) { + this(target.getClass(), shouldCache); + setTarget(target); + } + + public void setTarget(T newTarget) { + if (!targetClass.isInstance(newTarget)) { + throw new IllegalArgumentException("Target is not of the correct type"); + } + position.set(newTarget.getXCoord(), newTarget.getYCoord(), newTarget.getZCoord()); + world = newTarget.getWorld(); + } + + public void setWorld(World world) { + this.world = world; + } + + public void setPosition(ChunkCoordinates position) { + this.position.set(position.posX, position.posY, position.posZ); + } + + public void setPosition(int x, int y, int z) { + this.position.set(x, y, z); + } + + public void setShouldCache(boolean shouldCache) { + this.shouldCache = shouldCache; + } + + public T get() { + if (!shouldCache) { + return resolveTarget(); + } + T result = target.get(); + if (result == null || result.isDead()) { + result = resolveTarget(); + if (result != null) { + target = new WeakReference<>(result); + } else { + target.clear(); + } + } + return result; + } + + @SuppressWarnings("unchecked") + protected T resolveTarget() { + if (world != null && position.posX >= 0 && world.blockExists(position.posX, position.posY, position.posZ)) { + final TileEntity te = world.getTileEntity(position.posX, position.posY, position.posZ); + return this.targetClass.isInstance(te) ? (T) te : null; + } + return null; + } + + public ChunkCoordinates getPosition() { + return position; + } + + public void invalidate() { + target.clear(); + world = null; + position.set(0, -1, 0); + } + +} diff --git a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java index 85f9f2497a..eeadfe7602 100644 --- a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java +++ b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java @@ -47,7 +47,7 @@ import gregtech.api.gui.modularui.GT_UIInfos; import gregtech.api.interfaces.ITexture; import gregtech.api.metatileentity.CoverableTileEntity; import gregtech.api.metatileentity.GregTechTileClientEvents; -import gregtech.api.multitileentity.MultiTileEntityBlockRegistryInternal; +import gregtech.api.multitileentity.MultiTileEntityBlock; import gregtech.api.multitileentity.MultiTileEntityClassContainer; import gregtech.api.multitileentity.MultiTileEntityRegistry; import gregtech.api.multitileentity.interfaces.IMultiTileEntity; @@ -171,12 +171,11 @@ public abstract class MultiTileEntity extends CoverableTileEntity @Override public void copyTextures() { // Loading an instance - final TileEntity tCanonicalTileEntity = MultiTileEntityRegistry - .getCanonicalTileEntity(getMultiTileEntityRegistryID(), getMultiTileEntityID()); - if (!(tCanonicalTileEntity instanceof MultiTileEntity)) { + final TileEntity referenceTileEntity = MultiTileEntityRegistry + .getReferenceTileEntity(getMultiTileEntityRegistryID(), getMultiTileEntityID()); + if (!(referenceTileEntity instanceof MultiTileEntity canonicalEntity)) { return; } - final MultiTileEntity canonicalEntity = (MultiTileEntity) tCanonicalTileEntity; baseTexture = canonicalEntity.baseTexture; topOverlayTexture = canonicalEntity.topOverlayTexture; bottomOverlayTexture = canonicalEntity.bottomOverlayTexture; @@ -225,7 +224,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity if (tClass != null) { // Add the Default Parameters. Useful for things that differ between different tiers/types of the // same machine - nbt = GT_Util.fuseNBT(nbt, tClass.parameters); + nbt = GT_Util.fuseNBT(nbt, tClass.getParameters()); } } } @@ -996,8 +995,8 @@ public abstract class MultiTileEntity extends CoverableTileEntity } @Override - public boolean getSubItems(MultiTileEntityBlockRegistryInternal block, Item item, CreativeTabs tab, - List<ItemStack> list, short aID) { + public boolean getSubItems(MultiTileEntityBlock block, Item item, CreativeTabs tab, List<ItemStack> list, + short aID) { return true; } @@ -1378,4 +1377,9 @@ public abstract class MultiTileEntity extends CoverableTileEntity getTimedPacketData(timedPacket); GT_Values.NW.sendPacketToAllPlayersInRange(worldObj, timedPacket, getXCoord(), getZCoord()); } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + } } diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IItemUpdatable.java b/src/main/java/gregtech/api/multitileentity/interfaces/IItemUpdatable.java deleted file mode 100644 index 89d281eb27..0000000000 --- a/src/main/java/gregtech/api/multitileentity/interfaces/IItemUpdatable.java +++ /dev/null @@ -1,19 +0,0 @@ -package gregtech.api.multitileentity.interfaces; - -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public interface IItemUpdatable { - - /** - * Updates the Data of the ItemStack. Not called every tick but instead called whenever something important happens - * to the Stack. - */ - void updateItemStack(ItemStack aStack); - - /** - * Updates the Data of the ItemStack. Not called every tick but instead called whenever something important happens - * to the Stack. - */ - void updateItemStack(ItemStack aStack, World aWorld, int aX, int aY, int aZ); -} diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java index b239f4c4c0..f5bbbec7ab 100644 --- a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java @@ -12,8 +12,6 @@ public interface IMultiBlockPart extends IMultiTileEntity, ItemInventoryLogicHos ChunkCoordinates getTargetPos(); - void setTargetPos(ChunkCoordinates aTargetPos); - void setLockedInventoryIndex(int aIndex); int getLockedInventoryIndex(); diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java index d504e34c25..b16ca8a376 100644 --- a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java +++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java @@ -21,7 +21,7 @@ import net.minecraftforge.common.util.ForgeDirection; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.ITurnable; -import gregtech.api.multitileentity.MultiTileEntityBlockRegistryInternal; +import gregtech.api.multitileentity.MultiTileEntityBlock; import gregtech.api.multitileentity.MultiTileEntityRegistry; /* @@ -169,8 +169,7 @@ public interface IMultiTileEntity extends ICoverable, ITurnable, IDebugableTileE boolean recolourBlock(ForgeDirection side, byte aColor); /** Adds to the Creative Tab. return false to prevent it from being added. */ - boolean getSubItems(MultiTileEntityBlockRegistryInternal block, Item item, CreativeTabs tab, List<ItemStack> list, - short aID); + boolean getSubItems(MultiTileEntityBlock block, Item item, CreativeTabs tab, List<ItemStack> list, short aID); ItemStack getPickBlock(MovingObjectPosition aTarget); diff --git a/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java b/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java index 4b348c2fec..0953b4905c 100644 --- a/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java +++ b/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java @@ -246,7 +246,7 @@ public abstract class MultiTileBasicMachine<P extends MuTEProcessingLogic<P>> ex public void copyTextures() { super.copyTextures(); final TileEntity tCanonicalTileEntity = MultiTileEntityRegistry - .getCanonicalTileEntity(getMultiTileEntityRegistryID(), getMultiTileEntityID()); + .getReferenceTileEntity(getMultiTileEntityRegistryID(), getMultiTileEntityID()); if (!(tCanonicalTileEntity instanceof MultiTileBasicMachine)) { return; } diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java index 442d37a47a..552cf6d94e 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java @@ -4,11 +4,9 @@ import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; import static mcp.mobius.waila.api.SpecialChars.*; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -16,6 +14,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -31,6 +30,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.lwjgl.input.Keyboard; import com.gtnewhorizon.structurelib.StructureLibAPI; @@ -57,6 +57,7 @@ import gregtech.api.logic.FluidInventoryLogic; import gregtech.api.logic.ItemInventoryLogic; import gregtech.api.logic.MuTEProcessingLogic; import gregtech.api.logic.PowerLogic; +import gregtech.api.multitileentity.WeakTargetRef; import gregtech.api.multitileentity.enums.MultiTileCasingPurpose; import gregtech.api.multitileentity.interfaces.IMultiBlockController; import gregtech.api.multitileentity.interfaces.IMultiBlockPart; @@ -81,8 +82,8 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce protected static final int AUTO_OUTPUT_FREQUENCY_TICK = 20; private static final Map<Integer, GT_Multiblock_Tooltip_Builder> tooltip = new ConcurrentHashMap<>(); - private final List<UpgradeCasing> upgradeCasings = new ArrayList<>(); - private final List<FunctionalCasing> functionalCasings = new ArrayList<>(); + private final List<WeakTargetRef<UpgradeCasing>> upgradeCasings = new ArrayList<>(); + private final List<WeakTargetRef<FunctionalCasing>> functionalCasings = new ArrayList<>(); protected BuildState buildState = new BuildState(); private boolean structureOkay = false, structureChanged = false; @@ -104,20 +105,20 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce // A list of sides // Each side has a list of parts that have a cover that need to be ticked - protected List<LinkedList<WeakReference<IMultiBlockPart>>> registeredCoveredParts = Arrays.asList( - new LinkedList<>(), - new LinkedList<>(), - new LinkedList<>(), - new LinkedList<>(), - new LinkedList<>(), - new LinkedList<>()); + protected List<List<WeakTargetRef<IMultiBlockPart>>> registeredCoveredParts = Arrays.asList( + new ArrayList<>(), + new ArrayList<>(), + new ArrayList<>(), + new ArrayList<>(), + new ArrayList<>(), + new ArrayList<>()); // A list for each purpose that a casing can register to, to be ticked - protected List<LinkedList<WeakReference<IMultiBlockPart>>> registeredTickableParts = new ArrayList<>(); + protected List<List<WeakTargetRef<IMultiBlockPart>>> registeredTickableParts = new ArrayList<>(); public Controller() { for (int i = 0; i < MultiTileCasingPurpose.values().length; i++) { - registeredTickableParts.add(new LinkedList<>()); + registeredTickableParts.add(new ArrayList<>()); } } @@ -157,11 +158,13 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce } protected void calculateTier() { - double sum = 0; - if (functionalCasings == null || functionalCasings.size() == 0) { + if (functionalCasings.size() == 0) { return; } - for (FunctionalCasing casing : functionalCasings) { + double sum = 0; + for (WeakTargetRef<FunctionalCasing> casingRef : functionalCasings) { + final FunctionalCasing casing = casingRef.get(); + if (casing == null) continue; sum += casing.getPartTier() * casing.getPartModifier(); } tier = (int) Math.min(Math.floor(sum / functionalCasings.size()), 14); @@ -432,17 +435,17 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce public void registerCoveredPartOnSide(final ForgeDirection side, IMultiBlockPart part) { if (side == ForgeDirection.UNKNOWN) return; - final LinkedList<WeakReference<IMultiBlockPart>> registeredCovers = registeredCoveredParts.get(side.ordinal()); + final List<WeakTargetRef<IMultiBlockPart>> registeredCovers = registeredCoveredParts.get(side.ordinal()); // TODO: Make sure that we're not already registered on this side - registeredCovers.add(new WeakReference<>(part)); + registeredCovers.add(new WeakTargetRef<>(part, true)); } @Override public void unregisterCoveredPartOnSide(final ForgeDirection side, IMultiBlockPart aPart) { if (side == ForgeDirection.UNKNOWN) return; - final LinkedList<WeakReference<IMultiBlockPart>> coveredParts = registeredCoveredParts.get(side.ordinal()); - final Iterator<WeakReference<IMultiBlockPart>> it = coveredParts.iterator(); + final List<WeakTargetRef<IMultiBlockPart>> coveredParts = registeredCoveredParts.get(side.ordinal()); + final Iterator<WeakTargetRef<IMultiBlockPart>> it = coveredParts.listIterator(); while (it.hasNext()) { final IMultiBlockPart part = (it.next()).get(); if (part == null || part == aPart) it.remove(); @@ -451,8 +454,8 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce @Override public void registerCaseWithPurpose(MultiTileCasingPurpose purpose, IMultiBlockPart part) { - final LinkedList<WeakReference<IMultiBlockPart>> tickableParts = registeredTickableParts.get(purpose.ordinal()); - final Iterator<WeakReference<IMultiBlockPart>> it = tickableParts.iterator(); + final List<WeakTargetRef<IMultiBlockPart>> tickableParts = registeredTickableParts.get(purpose.ordinal()); + final Iterator<WeakTargetRef<IMultiBlockPart>> it = tickableParts.listIterator(); while (it.hasNext()) { final IMultiBlockPart next = (it.next()).get(); if (next == null) { @@ -461,13 +464,13 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce return; } } - tickableParts.add(new WeakReference<>(part)); + tickableParts.add(new WeakTargetRef<>(part, true)); } @Override public void unregisterCaseWithPurpose(MultiTileCasingPurpose purpose, IMultiBlockPart part) { - final LinkedList<WeakReference<IMultiBlockPart>> tickableParts = registeredTickableParts.get(purpose.ordinal()); - final Iterator<WeakReference<IMultiBlockPart>> it = tickableParts.iterator(); + final List<WeakTargetRef<IMultiBlockPart>> tickableParts = registeredTickableParts.get(purpose.ordinal()); + final Iterator<WeakTargetRef<IMultiBlockPart>> it = tickableParts.listIterator(); while (it.hasNext()) { final IMultiBlockPart next = (it.next()).get(); if (next == null || next == part) it.remove(); @@ -487,9 +490,8 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce private boolean tickCovers() { for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { // TODO: Tick controller covers, if any - final LinkedList<WeakReference<IMultiBlockPart>> coveredParts = this.registeredCoveredParts - .get(side.ordinal()); - final Iterator<WeakReference<IMultiBlockPart>> it = coveredParts.iterator(); + final List<WeakTargetRef<IMultiBlockPart>> coveredParts = this.registeredCoveredParts.get(side.ordinal()); + final Iterator<WeakTargetRef<IMultiBlockPart>> it = coveredParts.listIterator(); while (it.hasNext()) { final IMultiBlockPart part = (it.next()).get(); if (part == null) { @@ -505,9 +507,7 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce @Override public void onTick(long tick, boolean isServerSide) { - if (!tickCovers()) { - return; - } + tickCovers(); } @Override @@ -535,9 +535,9 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce protected void pushItemOutputs(long tick) { if (tick % AUTO_OUTPUT_FREQUENCY_TICK != 0) return; - final LinkedList<WeakReference<IMultiBlockPart>> registeredItemOutputs = registeredTickableParts + final List<WeakTargetRef<IMultiBlockPart>> registeredItemOutputs = registeredTickableParts .get(MultiTileCasingPurpose.ItemOutput.ordinal()); - final Iterator<WeakReference<IMultiBlockPart>> itemOutputIterator = registeredItemOutputs.iterator(); + final Iterator<WeakTargetRef<IMultiBlockPart>> itemOutputIterator = registeredItemOutputs.listIterator(); while (itemOutputIterator.hasNext()) { final IMultiBlockPart part = (itemOutputIterator.next()).get(); if (part == null) { @@ -567,7 +567,8 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce (byte) 1, part.getSizeInventory()); for (int i = 0; i < part.getSizeInventory(); i++) { - if (part.getStackInSlot(i) != null && part.getStackInSlot(i).stackSize <= 0) { + final ItemStack stack = part.getStackInSlot(i); + if (stack != null && stack.stackSize <= 0) { part.setInventorySlotContents(i, null); } } @@ -577,9 +578,9 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce protected void pushFluidOutputs(long tick) { if (tick % AUTO_OUTPUT_FREQUENCY_TICK != 0) return; - final LinkedList<WeakReference<IMultiBlockPart>> registeredFluidOutputs = registeredTickableParts + final List<WeakTargetRef<IMultiBlockPart>> registeredFluidOutputs = registeredTickableParts .get(MultiTileCasingPurpose.FluidOutput.ordinal()); - final Iterator<WeakReference<IMultiBlockPart>> fluidOutputIterator = registeredFluidOutputs.iterator(); + final Iterator<WeakTargetRef<IMultiBlockPart>> fluidOutputIterator = registeredFluidOutputs.listIterator(); while (fluidOutputIterator.hasNext()) { final IMultiBlockPart part = (fluidOutputIterator.next()).get(); if (part == null) { @@ -694,11 +695,11 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce } public void registerSpecialCasings(MultiBlockPart part) { - if (part instanceof UpgradeCasing) { - upgradeCasings.add((UpgradeCasing) part); + if (part instanceof UpgradeCasing upgradeCasing) { + upgradeCasings.add(new WeakTargetRef<>(upgradeCasing, true)); } - if (part instanceof FunctionalCasing) { - functionalCasings.add((FunctionalCasing) part); + if (part instanceof FunctionalCasing functionalCasing) { + functionalCasings.add(new WeakTargetRef<>(functionalCasing, true)); } } @@ -715,12 +716,13 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce }; } - @Nullable - public FluidInventoryLogic getFluidLogic(@Nonnull InventoryType type, @Nullable UUID id) { + @Override + @Nonnull + public @NotNull FluidInventoryLogic getFluidLogic(@Nonnull InventoryType type, @Nullable UUID id) { return switch (type) { case Input -> controllerFluidInput.getInventoryLogic(id); case Output -> controllerFluidOutput.getInventoryLogic(id); - default -> null; + default -> throw new IllegalStateException("Unexpected value: " + type); }; } @@ -753,9 +755,8 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce FluidInventoryLogic input = controllerFluidInput.removeInventory(id); FluidInventoryLogic output = controllerFluidOutput.removeInventory(id); yield new FluidInventoryLogic( - Arrays.asList(input, output) - .stream() - .map(inv -> inv.getInventory()) + Stream.of(input, output) + .map(FluidInventoryLogic::getInventory) .collect(Collectors.toList())); } }; @@ -794,12 +795,12 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce } @Override - @Nullable + @Nonnull public ItemInventoryLogic getItemLogic(@Nonnull InventoryType type, @Nullable UUID id) { return switch (type) { case Input -> controllerItemInput.getInventoryLogic(id); case Output -> controllerItemOutput.getInventoryLogic(id); - default -> null; + default -> throw new IllegalStateException("Unexpected value: " + type); }; } diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java index 2b030899ed..5a16ed4b38 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java @@ -48,6 +48,7 @@ import gregtech.api.logic.NullPowerLogic; import gregtech.api.logic.PowerLogic; import gregtech.api.logic.interfaces.PowerLogicHost; import gregtech.api.multitileentity.MultiTileEntityRegistry; +import gregtech.api.multitileentity.WeakTargetRef; import gregtech.api.multitileentity.base.NonTickableMultiTileEntity; import gregtech.api.multitileentity.enums.MultiTileCasingPurpose; import gregtech.api.multitileentity.interfaces.IMultiBlockController; @@ -70,7 +71,9 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity protected Set<MultiTileCasingPurpose> registeredPurposes = new HashSet<>(); - protected ChunkCoordinates targetPosition = null; + protected final WeakTargetRef<IMultiBlockController> controller = new WeakTargetRef<>( + IMultiBlockController.class, + false); protected int allowedModes = NOTHING; // BITMASK - Modes allowed for this part protected int mode = 0; // Mode selected for this part @@ -95,17 +98,17 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity return lockedInventory; } - public void setTarget(IMultiBlockController newTarget, int aAllowedModes) { - final IMultiBlockController currentTarget = getTarget(false); - if (currentTarget != null && currentTarget != newTarget) { + public void setTarget(IMultiBlockController newController, int aAllowedModes) { + final IMultiBlockController currentController = getTarget(false); + if (currentController != null && currentController != newController) { for (MultiTileCasingPurpose purpose : registeredPurposes) { unregisterPurpose(purpose); } } - targetPosition = (newTarget == null ? null : newTarget.getCoords()); + allowedModes = aAllowedModes; - if (newTarget != null) { - registerCovers(newTarget); + if (newController != currentController) { + registerCovers(newController); registerPurposes(); } } @@ -156,26 +159,11 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity } public IMultiBlockController getTarget(boolean aCheckValidity) { - if (targetPosition == null) { - return null; - } - - if (!worldObj.blockExists(targetPosition.posX, targetPosition.posY, targetPosition.posZ)) { - return null; - } - final TileEntity te = worldObj.getTileEntity(targetPosition.posX, targetPosition.posY, targetPosition.posZ); - IMultiBlockController target = null; - if (te instanceof IMultiBlockController targetFound) { - target = targetFound; - } else { - targetPosition = null; - return null; - } - - if (aCheckValidity) { - return target != null && target.checkStructure(false) ? target : null; + final IMultiBlockController res = controller.get(); + if (res != null && aCheckValidity) { + return res.checkStructure(false) ? res : null; } - return target; + return res; } public void registerCovers(IMultiBlockController controller) { @@ -232,10 +220,9 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity if (aNBT.hasKey(NBT.ALLOWED_MODES)) allowedModes = aNBT.getInteger(NBT.ALLOWED_MODES); if (aNBT.hasKey(NBT.MODE)) setMode(aNBT.getByte(NBT.MODE)); if (aNBT.hasKey(NBT.TARGET)) { - targetPosition = new ChunkCoordinates( - aNBT.getInteger(NBT.TARGET_X), - aNBT.getShort(NBT.TARGET_Y), - aNBT.getInteger(NBT.TARGET_Z)); + controller + .setPosition(aNBT.getInteger(NBT.TARGET_X), aNBT.getShort(NBT.TARGET_Y), aNBT.getInteger(NBT.TARGET_Z)); + controller.setWorld(worldObj); } if (aNBT.hasKey(NBT.LOCKED_INVENTORY)) { lockedInventory = UUID.fromString(aNBT.getString(NBT.LOCKED_INVENTORY)); @@ -255,27 +242,31 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity } @Override - public void writeMultiTileNBT(NBTTagCompound aNBT) { - if (allowedModes != NOTHING) aNBT.setInteger(NBT.ALLOWED_MODES, allowedModes); - if (mode != 0) aNBT.setInteger(NBT.MODE, mode); - if (targetPosition != null) { - aNBT.setBoolean(NBT.TARGET, true); - aNBT.setInteger(NBT.TARGET_X, targetPosition.posX); - aNBT.setShort(NBT.TARGET_Y, (short) targetPosition.posY); - aNBT.setInteger(NBT.TARGET_Z, targetPosition.posZ); + public void writeMultiTileNBT(NBTTagCompound nbt) { + if (allowedModes != NOTHING) nbt.setInteger(NBT.ALLOWED_MODES, allowedModes); + if (mode != 0) nbt.setInteger(NBT.MODE, mode); + + final ChunkCoordinates pos = controller.getPosition(); + if (pos.posY >= 0) { + // Valid position + nbt.setBoolean(NBT.TARGET, true); + nbt.setInteger(NBT.TARGET_X, pos.posX); + nbt.setShort(NBT.TARGET_Y, (short) pos.posY); + nbt.setInteger(NBT.TARGET_Z, pos.posZ); } + if (lockedInventory != null) { - aNBT.setString(NBT.LOCKED_INVENTORY, lockedInventory.toString()); + nbt.setString(NBT.LOCKED_INVENTORY, lockedInventory.toString()); } if (mLockedInventoryIndex != 0) { - aNBT.setInteger(NBT.LOCKED_INVENTORY_INDEX, mLockedInventoryIndex); + nbt.setInteger(NBT.LOCKED_INVENTORY_INDEX, mLockedInventoryIndex); } - configurationTank.writeToNBT(aNBT, NBT.LOCKED_FLUID); + configurationTank.writeToNBT(nbt, NBT.LOCKED_FLUID); } @Override - public void setLockedInventoryIndex(int aIndex) { - mLockedInventoryIndex = aIndex; + public void setLockedInventoryIndex(int index) { + mLockedInventoryIndex = index; } @Override @@ -284,15 +275,8 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity } @Override - public void setTargetPos(ChunkCoordinates aTargetPos) { - targetPosition = aTargetPos; - IMultiBlockController target = getTarget(false); - setTarget(target, allowedModes); - } - - @Override public ChunkCoordinates getTargetPos() { - return targetPosition; + return controller.getPosition(); } @Override diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java index 7005e3a60a..238ce1eb2d 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java @@ -8,32 +8,34 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; import net.minecraftforge.common.util.ForgeDirection; +import gregtech.api.multitileentity.WeakTargetRef; import gregtech.api.multitileentity.interfaces.IMultiBlockController; public class WallShareablePart extends MultiBlockPart { - protected List<ChunkCoordinates> targetPositions = new ArrayList<>(); + protected List<WeakTargetRef<IMultiBlockController>> targets = new ArrayList<>(); @Override - public void setTarget(IMultiBlockController aTarget, int aAllowedModes) { - if (targetPositions.size() >= 1) { - allowedModes = 0; + public void setTarget(IMultiBlockController newController, int allowedModes) { + if (targets.size() >= 1) { + this.allowedModes = 0; setMode((byte) 0); - targetPosition = null; + controller.invalidate(); } else { - allowedModes = aAllowedModes; + this.allowedModes = allowedModes; + controller.setTarget(newController); } - if (aTarget == null) { + if (newController == null) { return; } - targetPositions.add(aTarget.getCoords()); + targets.add(new WeakTargetRef<IMultiBlockController>(IMultiBlockController.class, true)); } @Override public UUID getLockedInventory() { - if (targetPositions.size() > 1) { + if (targets.size() > 1) { return null; } return super.getLockedInventory(); @@ -41,11 +43,13 @@ public class WallShareablePart extends MultiBlockPart { @Override public IMultiBlockController getTarget(boolean aCheckValidity) { - if (targetPositions.size() != 1) { + if (targets.size() != 1) { return null; } - targetPosition = targetPositions.get(0); + controller.setTarget( + targets.get(0) + .get()); return super.getTarget(aCheckValidity); } @@ -56,8 +60,8 @@ public class WallShareablePart extends MultiBlockPart { @Override public boolean onBlockBroken() { - for (final ChunkCoordinates coordinates : targetPositions) { - IMultiBlockController target = getTarget(coordinates, false); + for (final WeakTargetRef<IMultiBlockController> tar : targets) { + IMultiBlockController target = getTarget(tar.getPosition(), false); if (target == null) { continue; } @@ -73,8 +77,8 @@ public class WallShareablePart extends MultiBlockPart { if (te instanceof MultiBlockPart part) { final IMultiBlockController tController = part.getTarget(false); if (tController != null) tController.onStructureChange(); - } else if (te instanceof IMultiBlockController controller) { - controller.onStructureChange(); + } else if (te instanceof IMultiBlockController tController) { + tController.onStructureChange(); } } } diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java b/src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java index fb045557e4..566afcd770 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java @@ -16,8 +16,8 @@ public abstract class UpgradeCasing extends MultiBlockPart { } @Override - public void setTarget(IMultiBlockController newTarget, int aAllowedModes) { - super.setTarget(newTarget, aAllowedModes); + public void setTarget(IMultiBlockController newController, int aAllowedModes) { + super.setTarget(newController, aAllowedModes); if (getTarget(false) != null) { customWork(getTarget(false)); diff --git a/src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java b/src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java index 4010fae3bc..a4c4630209 100644 --- a/src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java +++ b/src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java @@ -19,11 +19,10 @@ import com.gtnewhorizon.structurelib.structure.IStructureElement; import gregtech.api.enums.GT_Values; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TextureSet; -import gregtech.api.multitileentity.MultiTileEntityContainer; +import gregtech.api.multitileentity.MultiTileEntityBlock; import gregtech.api.multitileentity.MultiTileEntityRegistry; import gregtech.api.multitileentity.enums.GT_MultiTileUpgradeCasing; import gregtech.api.multitileentity.interfaces.IMultiBlockController; -import gregtech.api.multitileentity.interfaces.IMultiTileEntity; import gregtech.api.multitileentity.multiblock.base.Controller; import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; @@ -189,25 +188,18 @@ public class GT_StructureUtilityMuTE { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - final MultiTileEntityRegistry tRegistry = MultiTileEntityRegistry - .getRegistry(validCasings[0].getRegistryId()); - if (tRegistry == null) { + final int registryID = validCasings[0].getRegistryId(); + final MultiTileEntityRegistry registry = MultiTileEntityRegistry.getRegistry(registryID); + if (registry == null) { GT_FML_LOGGER.error("NULL REGISTRY"); return false; } - final MultiTileEntityContainer tContainer = tRegistry - .getNewTileEntityContainer(world, x, y, z, validCasings[0].defaultMeta, null); - if (tContainer == null) { - GT_FML_LOGGER.error("NULL CONTAINER"); - return false; - } - final IMultiTileEntity te = ((IMultiTileEntity) tContainer.tileEntity); - if (!(te instanceof MultiBlockPart)) { - GT_FML_LOGGER.error("Not a multiblock part"); - return false; - } - if (world.setBlock(x, y, z, tContainer.block, 15 - tContainer.blockMetaData, 2)) { - tContainer.setMultiTile(world, x, y, z); + final MultiTileEntityBlock block = registry.getBlock(); + if (world.setBlock(x, y, z, block, allowedCasings[0].getDefaultMeta(), 2)) { + final TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof MultiBlockPart)) { + throw new IllegalStateException("TE is not an MultiBlockPart"); + } ((MultiBlockPart) te).setTarget((IMultiBlockController) t, modes); ((Controller<?, ?>) t).registerSpecialCasings((MultiBlockPart) te); @@ -233,7 +225,7 @@ public class GT_StructureUtilityMuTE { private final Integer[] validIds; public MuTEStructureCasing(String registryName, Integer... validIds) { - MultiTileEntityRegistry registry = MultiTileEntityRegistry.getRegistry(registryName); + final MultiTileEntityRegistry registry = MultiTileEntityRegistry.getRegistry(registryName); if (validIds == null || validIds.length == 0 || registry == null) { throw new IllegalArgumentException(); } diff --git a/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java b/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java index b34c577834..c8c1d832b0 100644 --- a/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java +++ b/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java @@ -16,7 +16,7 @@ import gregtech.GT_Mod; import gregtech.api.interfaces.ITexture; import gregtech.api.logic.ModelRenderLogic; import gregtech.api.logic.interfaces.ModelRenderLogicHost; -import gregtech.api.multitileentity.MultiTileEntityBlockRegistryInternal; +import gregtech.api.multitileentity.MultiTileEntityBlock; import gregtech.api.multitileentity.MultiTileEntityClassContainer; import gregtech.api.multitileentity.MultiTileEntityRegistry; import gregtech.api.multitileentity.interfaces.IMultiBlockController; @@ -35,7 +35,7 @@ public class GT_MultiTile_Renderer implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - if (!(block instanceof MultiTileEntityBlockRegistryInternal muteBlock)) { + if (!(block instanceof MultiTileEntityBlock muteBlock)) { return; } @@ -49,7 +49,8 @@ public class GT_MultiTile_Renderer implements ISimpleBlockRenderingHandler { renderer.setRenderBoundsFromBlock(muteBlock); for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - ITexture texture = classContainer.referenceTileEntity.getTexture(side); + final ITexture texture = classContainer.getReferenceTileEntity() + .getTexture(side); if (texture == null) continue; switch (side) { case DOWN -> renderYNegative(null, renderer, 0, 0, 0, block, texture, side); diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java index 28cfc4e5a8..d446009ac7 100644 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java +++ b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java @@ -14,6 +14,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import net.minecraftforge.common.util.Constants; @@ -34,7 +35,6 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.RecipeMapWorkable; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SpecialFilter; -import gregtech.api.multitileentity.MultiTileEntityContainer; import gregtech.api.multitileentity.MultiTileEntityItem; import gregtech.api.recipe.RecipeMap; import gregtech.api.render.TextureFactory; @@ -90,10 +90,8 @@ public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFil } private static RecipeMap<?> getMuTeRecipeMap(@NotNull ItemStack stack) { - MultiTileEntityContainer muTeEntityContainer = GT_Loader_MultiTileEntities.MACHINE_REGISTRY - .getNewTileEntityContainer(stack); - if (muTeEntityContainer != null - && muTeEntityContainer.tileEntity instanceof RecipeMapWorkable recipeMapWorkable) { + final TileEntity tileEntity = GT_Loader_MultiTileEntities.MACHINE_REGISTRY.getReferenceTileEntity(stack); + if (tileEntity instanceof RecipeMapWorkable recipeMapWorkable) { return recipeMapWorkable.getRecipeMap(); } return null; diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java index a34246e045..9e76883a8b 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java +++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java @@ -7,6 +7,8 @@ import static gregtech.api.util.GT_StructureUtilityMuTE.ofMuTECasings; import javax.annotation.Nonnull; +import net.minecraft.util.StatCollector; + import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.StructureDefinition; import com.gtnewhorizon.structurelib.util.Vec3Impl; @@ -20,7 +22,6 @@ import gregtech.api.multitileentity.multiblock.base.StackableController; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_StructureUtility; import gregtech.common.tileentities.machines.multiblock.logic.DistillationTowerProcessingLogic; -import net.minecraft.util.StatCollector; public class DistillationTower extends StackableController<DistillationTower, DistillationTowerProcessingLogic> { @@ -162,11 +163,11 @@ public class DistillationTower extends StackableController<DistillationTower, Di return StatCollector.translateToLocal(getTileEntityName()); } -// @Override -// public String getLocalName() { -// return "Distillation Tower"; -// } -// + // @Override + // public String getLocalName() { + // return "Distillation Tower"; + // } + // @Override protected String getStackableMiddle(int stackIndex) { return stackIndex % 2 == 0 ? STACKABLE_MIDDLE_1 : STACKABLE_MIDDLE_2; diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java index 81ce52d04f..c0946a7334 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java @@ -46,36 +46,42 @@ public class GT_Loader_MultiTileEntities implements Runnable { public static final String MACHINE_REGISTRY_NAME = "gt.multitileentity.controllers"; // MuTE Registries - public static final MultiTileEntityRegistry MACHINE_REGISTRY = new MultiTileEntityRegistry(MACHINE_REGISTRY_NAME); - public static final MultiTileEntityRegistry CASING_REGISTRY = new MultiTileEntityRegistry(CASING_REGISTRY_NAME); + public static final MultiTileEntityRegistry MACHINE_REGISTRY = new MultiTileEntityRegistry( + MACHINE_REGISTRY_NAME, + new MultiTileEntityBlock(Material.iron).modID("gregtech") + .materialName("machine") + .tool("wrench") + .sound(Block.soundTypeMetal) + .opaque(true) + .normalCube(true) + .register()); + public static final MultiTileEntityRegistry CASING_REGISTRY = new MultiTileEntityRegistry( + CASING_REGISTRY_NAME, + new MultiTileEntityBlock(Material.iron).modID("gregtech") + .materialName("casing") + .tool("wrench") + .sound(Block.soundTypeMetal) + .opaque(true) + .normalCube(true) + .register()); public static final MultiTileEntityRegistry COMPONENT_CASING_REGISTRY = new MultiTileEntityRegistry( - COMPONENT_CASING_REGISTRY_NAME); + COMPONENT_CASING_REGISTRY_NAME, + new MultiTileEntityBlock(Material.iron).modID("gregtech") + .materialName("componentCasing") + .tool("wrench") + .sound(Block.soundTypeMetal) + .opaque(true) + .normalCube(true) + .register()); public static final MultiTileEntityRegistry UPGRADE_CASING_REGISTRY = new MultiTileEntityRegistry( - UPGRADE_CASING_REGISTRY_NAME); - - // MuTE Blocks - public static final MultiTileEntityBlock MACHINE_BLOCK = new MultiTileEntityBlock(Material.iron).modID("gregtech") - .materialName("machine") - .tool("wrench") - .sound(Block.soundTypeMetal) - .opaque(true) - .normalCube(true) - .register(); - public static final MultiTileEntityBlock CASING_BLOCK = new MultiTileEntityBlock(Material.iron).modID("gregtech") - .materialName("casing") - .tool("wrench") - .sound(Block.soundTypeMetal) - .opaque(true) - .normalCube(true) - .register(); - public static final MultiTileEntityBlock COMPONENT_CASING_BLOCK = new MultiTileEntityBlock(Material.iron) - .modID("gregtech") - .materialName("componentCasing") - .tool("wrench") - .sound(Block.soundTypeMetal) - .opaque(true) - .normalCube(true) - .register(); + UPGRADE_CASING_REGISTRY_NAME, + new MultiTileEntityBlock(Material.iron).modID("gregtech") + .materialName("upgradeCasing") + .tool("wrench") + .sound(Block.soundTypeMetal) + .opaque(true) + .normalCube(true) + .register()); @Override public void run() { @@ -90,7 +96,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { MACHINE_REGISTRY.create(1000, Macerator.class) .name("Large Macerator") .category("Multiblock Controller") - .setBlock(MACHINE_BLOCK) .material(Materials.Iron) .textureFolder("macerator") .tankCapacity(128000L) @@ -100,7 +105,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { MACHINE_REGISTRY.create(0, CokeOven.class) .name("Coke Oven") .category("MultiblockController") - .setBlock(MACHINE_BLOCK) .textureFolder("cokeOven") .inputInventorySize(1) .outputInventorySize(1) @@ -108,7 +112,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { MACHINE_REGISTRY.create(1, AdvChemicalProcessor.class) .name("Advanced Chemical Processor") .category("MultiblockController") - .setBlock(MACHINE_BLOCK) // TODO: Texture .textureFolder("advChemicalProcessor") .inputInventorySize(16) @@ -118,7 +121,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { MACHINE_REGISTRY.create(2, DistillationTower.class) .name("Distillation Tower") .category("MultiblockController") - .setBlock(MACHINE_BLOCK) .textureFolder("distillationTower") .inputInventorySize(16) .outputInventorySize(16) @@ -127,7 +129,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { MACHINE_REGISTRY.create(3, LayeredCokeBattery.class) .name("Layered Coke Battery") .category("Multiblock Controller") - .setBlock(MACHINE_BLOCK) .material(Materials.Iron) .textureFolder("macerator") .tankCapacity(128000L) @@ -137,7 +138,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { MACHINE_REGISTRY.create(4, LaserEngraver.class) .name("Big Laser Engraver") .category("Multiblock Controller") - .setBlock(MACHINE_BLOCK) .textureFolder("BigLaserEngraver") .inputInventorySize(16) .outputInventorySize(16) @@ -150,68 +150,57 @@ public class GT_Loader_MultiTileEntities implements Runnable { CASING_REGISTRY.create(CokeOven.getId(), WallShareablePart.class) .name("Coke Oven Bricks") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("cokeOven") .register(); CASING_REGISTRY.create(Chemical.getId(), BasicCasing.class) .name("Chemical Casing") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("advChemicalProcessor") .register(); CASING_REGISTRY.create(Distillation.getId(), BasicCasing.class) .name("Distillation Casing") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("distillationTower") .register(); CASING_REGISTRY.create(18000, BasicCasing.class) .name("Test Casing") .category("Multiblock Casing") - .setBlock(CASING_BLOCK) .material(Materials.Cobalt) .textureFolder("macerator") .register(); CASING_REGISTRY.create(LaserEngraver.getId(), BasicCasing.class) .name("Laser Engraver Casing") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("BigLaserEngraver") .register(); CASING_REGISTRY.create(Mirror.getId(), BasicCasing.class) .name("Mirror") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("Laserblock") .register(); CASING_REGISTRY.create(BlackLaserEngraverCasing.getId(), BasicCasing.class) .name("Black Laser Engraver Casing") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("BlackLaserEngraver") .register(); CASING_REGISTRY.create(LaserEngraverUpgrade1.getId(), BasicCasing.class) .name("Crude Laser Engraving Casing") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("laserengraverupgrade1") .register(); CASING_REGISTRY.create(LaserEngraverUpgrade2.getId(), BasicCasing.class) .name("Advanced Laser Engraving Casing") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("laserengraverupgrade2") .register(); CASING_REGISTRY.create(LaserEngraverUpgrade3.getId(), BasicCasing.class) .name("Ultimate Laser Engraving Casing") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("laserengraverupgrade3") .register(); CASING_REGISTRY.create(LaserEngraverUpgrade4.getId(), BasicCasing.class) .name("Superb Laser Engraving Casing") .category("MultiBlock Casing") - .setBlock(CASING_BLOCK) .textureFolder("laserengraverupgrade4") .register(); @@ -231,7 +220,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(ULV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade ULV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(1) .tier(0) @@ -239,7 +227,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(LV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade LV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(4) .tier(1) @@ -247,7 +234,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(MV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade MV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(8) .tier(2) @@ -255,7 +241,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(HV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade HV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(16) .tier(3) @@ -263,7 +248,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(EV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade EV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(32) .tier(4) @@ -271,7 +255,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(IV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade IV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(64) .tier(5) @@ -279,7 +262,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(LuV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade LuV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(128) .tier(6) @@ -287,7 +269,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(ZPM_Inventory.getId(), Inventory.class) .name("Inventory Upgrade ZPM") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(256) .tier(7) @@ -295,7 +276,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade UV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(256) .tier(8) @@ -303,7 +283,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UHV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade UHV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(256) .tier(9) @@ -311,7 +290,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UEV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade UEV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(256) .tier(10) @@ -319,7 +297,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UIV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade UIV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(256) .tier(11) @@ -327,7 +304,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UMV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade UMV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(256) .tier(12) @@ -335,7 +311,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UXV_Inventory.getId(), Inventory.class) .name("Inventory Upgrade UXV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(256) .tier(13) @@ -343,7 +318,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(MAX_Inventory.getId(), Inventory.class) .name("Inventory Upgrade MAX") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("inventory") .upgradeInventorySize(256) .tier(14) @@ -352,7 +326,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(ULV_Tank.getId(), Tank.class) .name("Tank Upgrade ULV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(8_000L) .upgradeTankCount(1) @@ -361,7 +334,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(LV_Tank.getId(), Tank.class) .name("Tank Upgrade LV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(16_000L) .upgradeTankCount(2) @@ -370,7 +342,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(MV_Tank.getId(), Tank.class) .name("Tank Upgrade MV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(32_000L) .upgradeTankCount(4) @@ -379,7 +350,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(HV_Tank.getId(), Tank.class) .name("Tank Upgrade HV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(64_000L) .upgradeTankCount(6) @@ -388,7 +358,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(EV_Tank.getId(), Tank.class) .name("Tank Upgrade EV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(128_000L) .upgradeTankCount(8) @@ -397,7 +366,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(IV_Tank.getId(), Tank.class) .name("Tank Upgrade IV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(256_000L) .upgradeTankCount(10) @@ -406,7 +374,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(LuV_Tank.getId(), Tank.class) .name("Tank Upgrade LuV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(512_000L) .upgradeTankCount(12) @@ -415,7 +382,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(ZPM_Tank.getId(), Tank.class) .name("Tank Upgrade ZPM") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(1_024_000L) .upgradeTankCount(14) @@ -424,7 +390,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UV_Tank.getId(), Tank.class) .name("Tank Upgrade UV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(2_048_000L) .upgradeTankCount(16) @@ -433,7 +398,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UHV_Tank.getId(), Tank.class) .name("Tank Upgrade UHV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(4_096_000L) .upgradeTankCount(16) @@ -442,7 +406,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UEV_Tank.getId(), Tank.class) .name("Tank Upgrade UEV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(8_192_000L) .upgradeTankCount(16) @@ -451,7 +414,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UIV_Tank.getId(), Tank.class) .name("Tank Upgrade UIV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(16_384_000L) .upgradeTankCount(16) @@ -460,7 +422,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UMV_Tank.getId(), Tank.class) .name("Tank Upgrade UMV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(32_768_000L) .upgradeTankCount(16) @@ -469,7 +430,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(UXV_Tank.getId(), Tank.class) .name("Tank Upgrade UXV") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(65_536_000L) .upgradeTankCount(16) @@ -478,7 +438,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(MAX_Tank.getId(), Tank.class) .name("Tank Upgrade MAX") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("tank") .upgradeTankCapacity(131_072_000L) .upgradeTankCount(16) @@ -488,7 +447,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_4.getId(), Ampere.class) .name("Amperage Upgrade (4 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(4) .tier(1) @@ -496,7 +454,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_16.getId(), Ampere.class) .name("Amperage Upgrade (16 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(16) .tier(2) @@ -504,7 +461,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_64.getId(), Ampere.class) .name("Amperage Upgrade (64 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(64) .tier(3) @@ -512,7 +468,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_256.getId(), Ampere.class) .name("Amperage Upgrade (256 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(256) .tier(4) @@ -520,7 +475,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_1_024.getId(), Ampere.class) .name("Amperage Upgrade (1,024 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(1_024) .tier(5) @@ -528,7 +482,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_4_096.getId(), Ampere.class) .name("Amperage Upgrade (4,096 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(4_096) .tier(6) @@ -536,7 +489,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_16_384.getId(), Ampere.class) .name("Amperage Upgrade (16,384 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(16_384) .tier(7) @@ -544,7 +496,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_65_536.getId(), Ampere.class) .name("Amperage Upgrade (65,536 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(65_536) .tier(8) @@ -552,7 +503,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_262_144.getId(), Ampere.class) .name("Amperage Upgrade (262,144 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(262_144) .tier(9) @@ -560,7 +510,6 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Amp_1_048_576.getId(), Ampere.class) .name("Amperage Upgrade (1,048,576 A)") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("amperage") .upgradeAmperage(1_048_576) .tier(10) @@ -569,21 +518,18 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Cleanroom.getId(), Cleanroom.class) .name("Cleanroom Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("cleanroom") .tier(1) .register(); UPGRADE_CASING_REGISTRY.create(Laser.getId(), Laser.class) .name("Laser Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("laser") .tier(8) .register(); UPGRADE_CASING_REGISTRY.create(Wireless.getId(), Wireless.class) .name("Wireless Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("wireless") .tier(11) .register(); @@ -591,35 +537,30 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Heater_Prototype.getId(), Heater.class) .name("Prototype Heater Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("heater") .tier(1) .register(); UPGRADE_CASING_REGISTRY.create(Heater_IndustrialGrade.getId(), Heater.class) .name("Industrial-Grade Heater Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("heater") .tier(4) .register(); UPGRADE_CASING_REGISTRY.create(Heater_NextGen.getId(), Heater.class) .name("Next-Gen Heater Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("heater") .tier(7) .register(); UPGRADE_CASING_REGISTRY.create(Heater_Omnipotent.getId(), Heater.class) .name("Omnipotent Heater Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("heater") .tier(10) .register(); UPGRADE_CASING_REGISTRY.create(Heater_OmegaType.getId(), Heater.class) .name("OMEGA-Type Heater Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("heater") .tier(12) .register(); @@ -627,35 +568,30 @@ public class GT_Loader_MultiTileEntities implements Runnable { UPGRADE_CASING_REGISTRY.create(Insulator_Prototype.getId(), Insulator.class) .name("Prototype Insulator Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("insulator") .tier(1) .register(); UPGRADE_CASING_REGISTRY.create(Insulator_IndustrialGrade.getId(), Insulator.class) .name("Industrial-Grade Insulator Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("insulator") .tier(4) .register(); UPGRADE_CASING_REGISTRY.create(Insulator_NextGen.getId(), Insulator.class) .name("Next-Gen Insulator Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("insulator") .tier(7) .register(); UPGRADE_CASING_REGISTRY.create(Insulator_Omnipotent.getId(), Insulator.class) .name("Omnipotent Insulator Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("insulator") .tier(10) .register(); UPGRADE_CASING_REGISTRY.create(Insulator_OmegaType.getId(), Insulator.class) .name("OMEGA-Type Insulator Upgrade") .category("MultiBlock Upgrade Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("insulator") .tier(12) .register(); @@ -666,98 +602,84 @@ public class GT_Loader_MultiTileEntities implements Runnable { .name("Motor Casing LV") .tier(1) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(MV_Motor.getId(), Motor.class) .name("Motor Casing MV") .tier(2) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(HV_Motor.getId(), Motor.class) .name("Motor Casing HV") .tier(3) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(EV_Motor.getId(), Motor.class) .name("Motor Casing EV") .tier(4) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(IV_Motor.getId(), Motor.class) .name("Motor Casing IV") .tier(5) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(LuV_Motor.getId(), Motor.class) .name("Motor Casing LuV") .tier(6) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(ZPM_Motor.getId(), Motor.class) .name("Motor Casing ZPM") .tier(7) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(UV_Motor.getId(), Motor.class) .name("Motor Casing UV") .tier(8) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(UHV_Motor.getId(), Motor.class) .name("Motor Casing UHV") .tier(9) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(UEV_Motor.getId(), Motor.class) .name("Motor Casing UEV") .tier(10) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(UIV_Motor.getId(), Motor.class) .name("Motor Casing UIV") .tier(11) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(UMV_Motor.getId(), Motor.class) .name("Motor Casing UMV") .tier(12) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(UXV_Motor.getId(), Motor.class) .name("Motor Casing UXV") .tier(13) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); COMPONENT_CASING_REGISTRY.create(MAX_Motor.getId(), Motor.class) .name("Motor Casing MAX") .tier(14) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("motor") .register(); } @@ -767,105 +689,84 @@ public class GT_Loader_MultiTileEntities implements Runnable { .name("Pump Casing LV") .tier(1) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(MV_Pump.getId(), Pump.class) .name("Pump Casing MV") .tier(2) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(HV_Pump.getId(), Pump.class) .name("Pump Casing HV") .tier(3) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(EV_Pump.getId(), Pump.class) .name("Pump Casing EV") .tier(4) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(IV_Pump.getId(), Pump.class) .name("Pump Casing IV") .tier(5) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) - .textureFolder("pump") - .register(); - COMPONENT_CASING_REGISTRY.create(LuV_Pump.getId(), Pump.class) - .name("Pump Casing LuV") - .tier(6) - .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(LuV_Pump.getId(), Pump.class) .name("Pump Casing LuV") .tier(6) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(ZPM_Pump.getId(), Pump.class) .name("Pump Casing ZPM") .tier(7) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(UV_Pump.getId(), Pump.class) .name("Pump Casing UV") .tier(8) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(UHV_Pump.getId(), Pump.class) .name("Pump Casing UHV") .tier(9) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(UEV_Pump.getId(), Pump.class) .name("Pump Casing UEV") .tier(10) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(UIV_Pump.getId(), Pump.class) .name("Pump Casing UIV") .tier(11) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(UMV_Pump.getId(), Pump.class) .name("Pump Casing UMV") .tier(12) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(UXV_Pump.getId(), Pump.class) .name("Pump Casing UXV") .tier(13) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); COMPONENT_CASING_REGISTRY.create(MAX_Pump.getId(), Pump.class) .name("Pump Casing MAX") .tier(14) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("pump") .register(); } @@ -875,98 +776,84 @@ public class GT_Loader_MultiTileEntities implements Runnable { .name("Piston Casing LV") .tier(1) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(MV_Piston.getId(), Piston.class) .name("Piston Casing MV") .tier(2) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(HV_Piston.getId(), Piston.class) .name("Piston Casing HV") .tier(3) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(EV_Piston.getId(), Piston.class) .name("Piston Casing EV") .tier(4) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(IV_Piston.getId(), Piston.class) .name("Piston Casing IV") .tier(5) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(LuV_Piston.getId(), Piston.class) .name("Piston Casing LuV") .tier(6) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(ZPM_Piston.getId(), Piston.class) .name("Piston Casing ZPM") .tier(7) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(UV_Piston.getId(), Piston.class) .name("Piston Casing UV") .tier(8) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(UHV_Piston.getId(), Piston.class) .name("Piston Casing UHV") .tier(9) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(UEV_Piston.getId(), Piston.class) .name("Piston Casing UEV") .tier(10) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(UIV_Piston.getId(), Piston.class) .name("Piston Casing UIV") .tier(11) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(UMV_Piston.getId(), Piston.class) .name("Piston Casing UMV") .tier(12) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(UXV_Piston.getId(), Piston.class) .name("Piston Casing UXV") .tier(13) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); COMPONENT_CASING_REGISTRY.create(MAX_Piston.getId(), Piston.class) .name("Piston Casing MAX") .tier(14) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("piston") .register(); } @@ -976,77 +863,66 @@ public class GT_Loader_MultiTileEntities implements Runnable { .name("Conveyor Casing LV") .tier(1) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(MV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing MV") .tier(2) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(HV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing HV") .tier(3) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(EV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing EV") .tier(4) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(IV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing IV") .tier(5) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(LuV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing LuV") .tier(6) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(ZPM_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing ZPM") .tier(7) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(UV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing UV") .tier(8) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(UHV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing UHV") .tier(9) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(UEV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing UEV") .tier(10) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); COMPONENT_CASING_REGISTRY.create(UIV_Conveyor.getId(), Conveyor.class) .name("Conveyor Casing UIV") .tier(11) .category("MultiBlock Structural Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("conveyor") .register(); } @@ -1056,98 +932,84 @@ public class GT_Loader_MultiTileEntities implements Runnable { .name("Robot Arm Casing LV") .tier(1) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(MV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing MV") .tier(2) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(HV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing HV") .tier(3) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(EV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing EV") .tier(4) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(IV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing IV") .tier(5) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(LuV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing LuV") .tier(6) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(ZPM_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing ZPM") .tier(7) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(UV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing UV") .tier(8) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(UHV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing UHV") .tier(9) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(UEV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing UEV") .tier(10) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(UIV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing UIV") .tier(11) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(UMV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing UMV") .tier(12) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(UXV_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing UXV") .tier(13) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); COMPONENT_CASING_REGISTRY.create(MAX_RobotArm.getId(), RobotArm.class) .name("Robot Arm Casing MAX") .tier(14) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("robotArm") .register(); } @@ -1157,98 +1019,84 @@ public class GT_Loader_MultiTileEntities implements Runnable { .name("Sensor Casing LV") .tier(1) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(MV_Sensor.getId(), Sensor.class) .name("Sensor Casing MV") .tier(2) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(HV_Sensor.getId(), Sensor.class) .name("Sensor Casing HV") .tier(3) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(EV_Sensor.getId(), Sensor.class) .name("Sensor Casing EV") .tier(4) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(IV_Sensor.getId(), Sensor.class) .name("Sensor Casing IV") .tier(5) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(LuV_Sensor.getId(), Sensor.class) .name("Sensor Casing LuV") .tier(6) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(ZPM_Sensor.getId(), Sensor.class) .name("Sensor Casing ZPM") .tier(7) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(UV_Sensor.getId(), Sensor.class) .name("Sensor Casing UV") .tier(8) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(UHV_Sensor.getId(), Sensor.class) .name("Sensor Casing UHV") .tier(9) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(UEV_Sensor.getId(), Sensor.class) .name("Sensor Casing UEV") .tier(10) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(UIV_Sensor.getId(), Sensor.class) .name("Sensor Casing UIV") .tier(11) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(UMV_Sensor.getId(), Sensor.class) .name("Sensor Casing UMV") .tier(12) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(UXV_Sensor.getId(), Sensor.class) .name("Sensor Casing UXV") .tier(13) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); COMPONENT_CASING_REGISTRY.create(MAX_Sensor.getId(), Sensor.class) .name("Sensor Casing MAX") .tier(14) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("sensor") .register(); } @@ -1258,98 +1106,84 @@ public class GT_Loader_MultiTileEntities implements Runnable { .name("Emitter Casing LV") .tier(1) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(MV_Emitter.getId(), Emitter.class) .name("Emitter Casing MV") .tier(2) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(HV_Emitter.getId(), Emitter.class) .name("Emitter Casing HV") .tier(3) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(EV_Emitter.getId(), Emitter.class) .name("Emitter Casing EV") .tier(4) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(IV_Emitter.getId(), Emitter.class) .name("Emitter Casing IV") .tier(5) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(LuV_Emitter.getId(), Emitter.class) .name("Emitter Casing LuV") .tier(6) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(ZPM_Emitter.getId(), Emitter.class) .name("Emitter Casing ZPM") .tier(7) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(UV_Emitter.getId(), Emitter.class) .name("Emitter Casing UV") .tier(8) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(UHV_Emitter.getId(), Emitter.class) .name("Emitter Casing UHV") .tier(9) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(UEV_Emitter.getId(), Emitter.class) .name("Emitter Casing UEV") .tier(10) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(UIV_Emitter.getId(), Emitter.class) .name("Emitter Casing UIV") .tier(11) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(UMV_Emitter.getId(), Emitter.class) .name("Emitter Casing UMV") .tier(12) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(UXV_Emitter.getId(), Emitter.class) .name("Emitter Casing UXV") .tier(13) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); COMPONENT_CASING_REGISTRY.create(MAX_Emitter.getId(), Emitter.class) .name("Emitter Casing MAX") .tier(14) .category("MultiBlock Functional Casing") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("emitter") .register(); } @@ -1359,98 +1193,84 @@ public class GT_Loader_MultiTileEntities implements Runnable { .name("Field Generator LV") .tier(1) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(MV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator MV") .tier(2) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(HV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator HV") .tier(3) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(EV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator EV") .tier(4) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(IV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator IV") .tier(5) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(LuV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator LuV") .tier(6) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(ZPM_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator ZPM") .tier(7) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(UV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator UV") .tier(8) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(UHV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator UHV") .tier(9) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(UEV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator UEV") .tier(10) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(UIV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator UIV") .tier(11) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(UMV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator UMV") .tier(12) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(UXV_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator UXV") .tier(13) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); COMPONENT_CASING_REGISTRY.create(MAX_FieldGenerator.getId(), FieldGenerator.class) .name("Field Generator MAX") .tier(14) .category("Multiblock Energy Field") - .setBlock(COMPONENT_CASING_BLOCK) .textureFolder("fieldGenerator") .register(); } |