From 0e2f8a22a22909c0af22a43a5767c7b71821ba23 Mon Sep 17 00:00:00 2001 From: Gunther De Wachter Date: Tue, 4 Jul 2017 15:40:57 +0200 Subject: [PATCH] Decided to go for a more "separated" TE registration. This will still make it so addons still get to add custom blocks without having to change too much of the internals. It still needs thorough testing though. I don't want to change this too much because it ruins older worlds. --- .../block/networking/BlockCableBus.java | 6 +- .../bootstrap/BlockDefinitionBuilder.java | 16 ++-- .../core/api/definitions/ApiBlocks.java | 81 ++++++++++++++++--- .../appeng/me/cache/CraftingGridCache.java | 26 ++---- .../crafting/TileCraftingStorageTile.java | 28 ------- .../tile/crafting/TileCraftingTile.java | 7 -- .../appeng/tile/qnb/TileQuantumBridge.java | 15 ---- .../appeng/tile/storage/TileSkyChest.java | 14 ---- 8 files changed, 87 insertions(+), 106 deletions(-) diff --git a/src/main/java/appeng/block/networking/BlockCableBus.java b/src/main/java/appeng/block/networking/BlockCableBus.java index 3ac8e7bd..31308992 100644 --- a/src/main/java/appeng/block/networking/BlockCableBus.java +++ b/src/main/java/appeng/block/networking/BlockCableBus.java @@ -387,14 +387,12 @@ public class BlockCableBus extends AEBaseTileBlock noTesrTile = Api.INSTANCE.partHelper().getCombinedInstance( TileCableBus.class ); this.setTileEntity( noTesrTile ); + GameRegistry.registerTileEntity( noTesrTile, AppEng.MOD_ID.toLowerCase() + ":" + "BlockCableBus" ); + if( Platform.isClient() ) { setupTesr(); } - else - { - GameRegistry.registerTileEntity( noTesrTile, AppEng.MOD_ID.toLowerCase() + ":" + "BlockCableBus" ); - } } @SideOnly( Side.CLIENT ) diff --git a/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java b/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java index 71e8e43e..8f024fbd 100644 --- a/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java +++ b/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java @@ -225,14 +225,17 @@ class BlockDefinitionBuilder implements IBlockBuilder initCallbacks.forEach( consumer -> factory.addInit( side -> consumer.accept( block, item ) ) ); postInitCallbacks.forEach( consumer -> factory.addPostInit( side -> consumer.accept( block, item ) ) ); + + if ( teClass != null && block instanceof AEBaseTileBlock ) + { + ((AEBaseTileBlock) block).setTileEntity( teClass ); + } + if( Platform.isClient() ) { if( block instanceof AEBaseTileBlock ) { AEBaseTileBlock tileBlock = (AEBaseTileBlock) block; - // Fallback? - if ( teClass != null ) - tileBlock.setTileEntity( teClass ); blockRendering.apply( factory, block, tileBlock.getTileEntityClass() ); } else @@ -248,15 +251,8 @@ class BlockDefinitionBuilder implements IBlockBuilder if( block instanceof AEBaseTileBlock ) { - AEBaseTileBlock tileBlock = (AEBaseTileBlock) block; - if( teClass != null ) - tileBlock.setTileEntity( teClass ); - factory.addPreInit( side -> { AEBaseTile.registerTileItem( teClass, new BlockStackSrc( block, 0, ActivityState.Enabled ) ); - - // TODO: Change after transition phase - GameRegistry.registerTileEntity( teClass, AppEng.MOD_ID.toLowerCase() + ":" + registryName); } ); return (T) new TileDefinition( registryName, (AEBaseTileBlock) block, item ); diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index dd449938..4c2da71a 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -19,6 +19,7 @@ package appeng.core.api.definitions; +import appeng.core.AELog; import appeng.debug.TileChunkLoader; import appeng.debug.TileCubeGenerator; import appeng.debug.TileItemGen; @@ -63,7 +64,9 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemSlab; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; @@ -153,6 +156,9 @@ import appeng.decorative.solid.BlockSkyStone.SkystoneType; import appeng.decorative.stair.BlockStairCommon; import appeng.hooks.DispenserBehaviorTinyTNT; +import java.util.ArrayList; +import java.util.List; + /** * Internal implementation for the API blocks @@ -234,6 +240,22 @@ public final class ApiBlocks implements IBlocks private final IBlockDefinition phantomNode; private final IBlockDefinition cubeGenerator; +// private List> registeredClasses = new ArrayList>(); + + private void registerTileEntity( Class teClass, String name ) + { +// if(this.registeredClasses.contains( teClass ) ) +// { +// AELog.debug( "Already registered " + teClass.getName() +" to Forge!" ); +// return; +// } +// +// registeredClasses.add(teClass); + + GameRegistry.registerTileEntity( teClass, AppEng.MOD_ID.toLowerCase() + ":" + name); + + } + public ApiBlocks( FeatureFactory registry, PartModels partModels ) { // this.quartzOre = new BlockDefinition( "ore.quartz", new OreQuartz() ); @@ -286,12 +308,12 @@ public final class ApiBlocks implements IBlocks this.skyStoneChest = registry.block( "sky_stone_chest", () -> new BlockSkyChest( SkyChestType.STONE ) ) .features( AEFeature.SKY_STONE_CHESTS ) - .tileEntity( TileSkyChest.TileSkyChestStone.class ) + .tileEntity( TileSkyChest.class ) .rendering( new SkyChestRenderingCustomizer( SkyChestType.STONE ) ) .build(); this.smoothSkyStoneChest = registry.block( "smooth_sky_stone_chest", () -> new BlockSkyChest( SkyChestType.BLOCK ) ) .features( AEFeature.SKY_STONE_CHESTS ) - .tileEntity( TileSkyChest.TileSkyChestSmooth.class ) + .tileEntity( TileSkyChest.class ) .rendering( new SkyChestRenderingCustomizer( SkyChestType.BLOCK ) ) .build(); @@ -343,12 +365,12 @@ public final class ApiBlocks implements IBlocks .build(); this.quantumRing = registry.block( "quantum_ring", BlockQuantumRing::new ) .features( AEFeature.QUANTUM_NETWORK_BRIDGE ) - .tileEntity( TileQuantumBridge.TileQuantumBridgeRing.class ) + .tileEntity( TileQuantumBridge.class ) .rendering( new QuantumBridgeRendering() ) .build(); this.quantumLink = registry.block( "quantum_link", BlockQuantumLinkChamber::new ) .features( AEFeature.QUANTUM_NETWORK_BRIDGE ) - .tileEntity( TileQuantumBridge.TileQuantumBridgeGlass.class ) + .tileEntity( TileQuantumBridge.class ) .rendering( new QuantumBridgeRendering() ) .build(); this.spatialPylon = registry.block( "spatial_pylon", BlockSpatialPylon::new ) @@ -412,30 +434,30 @@ public final class ApiBlocks implements IBlocks .build(); this.craftingAccelerator = crafting.block( "crafting_accelerator", () -> new BlockCraftingUnit( CraftingUnitType.ACCELERATOR ) ) .rendering( new CraftingCubeRendering( "crafting_accelerator", CraftingUnitType.ACCELERATOR ) ) - .tileEntity( TileCraftingTile.TileCraftingTileAccelerator.class ) + .tileEntity( TileCraftingTile.class ) .useCustomItemModel() .build(); this.craftingStorage1k = crafting.block( "crafting_storage_1k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_1K ) ) .item( ItemCraftingStorage::new ) - .tileEntity( TileCraftingStorageTile.TileCraftingStorageTile1k.class ) + .tileEntity( TileCraftingStorageTile.class ) .rendering( new CraftingCubeRendering( "crafting_storage_1k", CraftingUnitType.STORAGE_1K ) ) .useCustomItemModel() .build(); this.craftingStorage4k = crafting.block( "crafting_storage_4k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_4K ) ) .item( ItemCraftingStorage::new ) - .tileEntity( TileCraftingStorageTile.TileCraftingStorageTile4k.class ) + .tileEntity( TileCraftingStorageTile.class ) .rendering( new CraftingCubeRendering( "crafting_storage_4k", CraftingUnitType.STORAGE_4K ) ) .useCustomItemModel() .build(); this.craftingStorage16k = crafting.block( "crafting_storage_16k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_16K ) ) .item( ItemCraftingStorage::new ) - .tileEntity( TileCraftingStorageTile.TileCraftingStorageTile16k.class ) + .tileEntity( TileCraftingStorageTile.class ) .rendering( new CraftingCubeRendering( "crafting_storage_16k", CraftingUnitType.STORAGE_16K ) ) .useCustomItemModel() .build(); this.craftingStorage64k = crafting.block( "crafting_storage_64k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_64K ) ) .item( ItemCraftingStorage::new ) - .tileEntity( TileCraftingStorageTile.TileCraftingStorageTile64k.class ) + .tileEntity( TileCraftingStorageTile.class ) .rendering( new CraftingCubeRendering( "crafting_storage_64k", CraftingUnitType.STORAGE_64K ) ) .useCustomItemModel() .build(); @@ -468,7 +490,8 @@ public final class ApiBlocks implements IBlocks this.multiPart = registry.block( "cable_bus", BlockCableBus::new ) .rendering( new CableBusRendering( partModels ) ) - .tileEntity( TileCableBus.class ) + // (handled in BlockCableBus.java and its setupTile()) + // .tileEntity( TileCableBus.class ) .postInit( ( block, item ) -> { ( (BlockCableBus) block ).setupTile(); @@ -504,6 +527,44 @@ public final class ApiBlocks implements IBlocks .tileEntity( TileCubeGenerator.class ) .useCustomItemModel() .build(); + + + this.registerTileEntity( TileSkyChest.class, "sky_stone_chest" ); + this.registerTileEntity( TileSkyCompass.class, "sky_compass" ); + this.registerTileEntity( TileGrinder.class, "grindstone" ); + this.registerTileEntity( TileCrank.class, "crank" ); + this.registerTileEntity( TileInscriber.class, "inscriber" ); + this.registerTileEntity( TileWireless.class, "wireless_access_point" ); + this.registerTileEntity( TileCharger.class, "charger" ); + this.registerTileEntity( TileSecurityStation.class, "security_station" ); + this.registerTileEntity( TileQuantumBridge.class, "quantum_ring" ); + this.registerTileEntity( TileSpatialPylon.class, "spatial_pylon" ); + this.registerTileEntity( TileSpatialIOPort.class, "spatial_io_port" ); + this.registerTileEntity( TileController.class, "controller" ); + this.registerTileEntity( TileDrive.class, "drive" ); + this.registerTileEntity( TileChest.class, "chest" ); + this.registerTileEntity( TileInterface.class, "interface" ); + this.registerTileEntity( TileCellWorkbench.class, "cell_workbench" ); + this.registerTileEntity( TileIOPort.class, "io_port" ); + this.registerTileEntity( TileCondenser.class, "condenser" ); + this.registerTileEntity( TileEnergyAcceptor.class, "energy_acceptor" ); + this.registerTileEntity( TileVibrationChamber.class, "vibration_chamber" ); + this.registerTileEntity( TileQuartzGrowthAccelerator.class, "quartz_growth_accelerator" ); + this.registerTileEntity( TileEnergyCell.class, "energy_cell" ); + this.registerTileEntity( TileDenseEnergyCell.class, "dense_energy_cell" ); + this.registerTileEntity( TileCreativeEnergyCell.class, "creative_energy_cell" ); + this.registerTileEntity( TileCraftingTile.class, "crafting_unit" ); + this.registerTileEntity( TileCraftingStorageTile.class, "crafting_storage" ); + this.registerTileEntity( TileCraftingMonitorTile.class, "crafting_monitor" ); + this.registerTileEntity( TileMolecularAssembler.class, "molecular_assembler" ); + this.registerTileEntity( TileLightDetector.class, "light_detector" ); + this.registerTileEntity( TilePaint.class, "paint" ); + // This is handled by TileCableBus.java + // this.registerTileEntity( TileCableBus.class, "cable_bus" ); + this.registerTileEntity( TileItemGen.class, "debug_item_gen" ); + this.registerTileEntity( TileChunkLoader.class, "debug_chunk_loader" ); + this.registerTileEntity( TilePhantomNode.class, "debug_phantom_node" ); + this.registerTileEntity( TileCubeGenerator.class, "debug_cube_gen" ); } private static IBlockDefinition makeSlab( String slabId, String doubleSlabId, FeatureFactory registry, IBlockDefinition blockDef ) diff --git a/src/main/java/appeng/me/cache/CraftingGridCache.java b/src/main/java/appeng/me/cache/CraftingGridCache.java index 5168e297..445d3ffe 100644 --- a/src/main/java/appeng/me/cache/CraftingGridCache.java +++ b/src/main/java/appeng/me/cache/CraftingGridCache.java @@ -305,27 +305,17 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper { this.craftingCPUClusters.clear(); - IMachineSet machineSets[] = new IMachineSet[4]; // 4 because we have 4 types of Storage Tiles ATM. - - machineSets[0] = this.grid.getMachines( TileCraftingStorageTile.TileCraftingStorageTile1k.class ); - machineSets[1] = this.grid.getMachines( TileCraftingStorageTile.TileCraftingStorageTile4k.class ); - machineSets[2] = this.grid.getMachines( TileCraftingStorageTile.TileCraftingStorageTile16k.class ); - machineSets[3] = this.grid.getMachines( TileCraftingStorageTile.TileCraftingStorageTile64k.class ); - - for ( IMachineSet ms : machineSets ) + for( final IGridNode cst : this.grid.getMachines( TileCraftingStorageTile.class ) ) { - for( final IGridNode cst : ms ) + final TileCraftingStorageTile tile = (TileCraftingStorageTile) cst.getMachine(); + final CraftingCPUCluster cluster = (CraftingCPUCluster) tile.getCluster(); + if( cluster != null ) { - final TileCraftingStorageTile tile = (TileCraftingStorageTile) cst.getMachine(); - final CraftingCPUCluster cluster = (CraftingCPUCluster) tile.getCluster(); - if( cluster != null ) - { - this.craftingCPUClusters.add( cluster ); + this.craftingCPUClusters.add( cluster ); - if( cluster.getLastCraftingLink() != null ) - { - this.addLink( (CraftingLink) cluster.getLastCraftingLink() ); - } + if( cluster.getLastCraftingLink() != null ) + { + this.addLink( (CraftingLink) cluster.getLastCraftingLink() ); } } } diff --git a/src/main/java/appeng/tile/crafting/TileCraftingStorageTile.java b/src/main/java/appeng/tile/crafting/TileCraftingStorageTile.java index 14f56cc0..c48a885c 100644 --- a/src/main/java/appeng/tile/crafting/TileCraftingStorageTile.java +++ b/src/main/java/appeng/tile/crafting/TileCraftingStorageTile.java @@ -32,34 +32,6 @@ public class TileCraftingStorageTile extends TileCraftingTile { private static final int KILO_SCALAR = 1024; - public static class TileCraftingStorageTile1k extends TileCraftingStorageTile - { - public TileCraftingStorageTile1k() { - super(); - } - } - - public static class TileCraftingStorageTile4k extends TileCraftingStorageTile - { - public TileCraftingStorageTile4k() { - super(); - } - } - - public static class TileCraftingStorageTile16k extends TileCraftingStorageTile - { - public TileCraftingStorageTile16k() { - super(); - } - } - - public static class TileCraftingStorageTile64k extends TileCraftingStorageTile - { - public TileCraftingStorageTile64k() { - super(); - } - } - @Override protected ItemStack getItemFromTile( final Object obj ) { diff --git a/src/main/java/appeng/tile/crafting/TileCraftingTile.java b/src/main/java/appeng/tile/crafting/TileCraftingTile.java index 0984e319..38d867c4 100644 --- a/src/main/java/appeng/tile/crafting/TileCraftingTile.java +++ b/src/main/java/appeng/tile/crafting/TileCraftingTile.java @@ -60,13 +60,6 @@ import appeng.util.Platform; public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IPowerChannelState { - public static class TileCraftingTileAccelerator extends TileCraftingTile - { - public TileCraftingTileAccelerator() { - super(); - } - } - private final CraftingCPUCalculator calc = new CraftingCPUCalculator( this ); private NBTTagCompound previousState = null; private boolean isCoreBlock = false; diff --git a/src/main/java/appeng/tile/qnb/TileQuantumBridge.java b/src/main/java/appeng/tile/qnb/TileQuantumBridge.java index 9073891f..b830459c 100644 --- a/src/main/java/appeng/tile/qnb/TileQuantumBridge.java +++ b/src/main/java/appeng/tile/qnb/TileQuantumBridge.java @@ -55,21 +55,6 @@ import appeng.util.Platform; public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock, ITickable { - - public static class TileQuantumBridgeGlass extends TileQuantumBridge - { - public TileQuantumBridgeGlass() { - super(); - } - } - - public static class TileQuantumBridgeRing extends TileQuantumBridge - { - public TileQuantumBridgeRing() { - super(); - } - } - private final byte corner = 16; private final int[] sidesRing = {}; private final int[] sidesLink = { 0 }; diff --git a/src/main/java/appeng/tile/storage/TileSkyChest.java b/src/main/java/appeng/tile/storage/TileSkyChest.java index 58a3a54f..fc2b9327 100644 --- a/src/main/java/appeng/tile/storage/TileSkyChest.java +++ b/src/main/java/appeng/tile/storage/TileSkyChest.java @@ -39,20 +39,6 @@ import appeng.tile.inventory.InvOperation; public class TileSkyChest extends AEBaseInvTile implements ITickable { - public static class TileSkyChestSmooth extends TileSkyChest - { - public TileSkyChestSmooth() { - super(); - } - } - - public static class TileSkyChestStone extends TileSkyChest - { - public TileSkyChestStone() { - super(); - } - } - private final int[] sides = { 0, 1,