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.
This commit is contained in:
Gunther De Wachter 2017-07-04 15:40:57 +02:00
parent 20fc0e136d
commit 0e2f8a22a2
8 changed files with 87 additions and 106 deletions

View file

@ -387,14 +387,12 @@ public class BlockCableBus extends AEBaseTileBlock
noTesrTile = Api.INSTANCE.partHelper().getCombinedInstance( TileCableBus.class ); noTesrTile = Api.INSTANCE.partHelper().getCombinedInstance( TileCableBus.class );
this.setTileEntity( noTesrTile ); this.setTileEntity( noTesrTile );
GameRegistry.registerTileEntity( noTesrTile, AppEng.MOD_ID.toLowerCase() + ":" + "BlockCableBus" );
if( Platform.isClient() ) if( Platform.isClient() )
{ {
setupTesr(); setupTesr();
} }
else
{
GameRegistry.registerTileEntity( noTesrTile, AppEng.MOD_ID.toLowerCase() + ":" + "BlockCableBus" );
}
} }
@SideOnly( Side.CLIENT ) @SideOnly( Side.CLIENT )

View file

@ -225,14 +225,17 @@ class BlockDefinitionBuilder implements IBlockBuilder
initCallbacks.forEach( consumer -> factory.addInit( side -> consumer.accept( block, item ) ) ); initCallbacks.forEach( consumer -> factory.addInit( side -> consumer.accept( block, item ) ) );
postInitCallbacks.forEach( consumer -> factory.addPostInit( 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( Platform.isClient() )
{ {
if( block instanceof AEBaseTileBlock ) if( block instanceof AEBaseTileBlock )
{ {
AEBaseTileBlock tileBlock = (AEBaseTileBlock) block; AEBaseTileBlock tileBlock = (AEBaseTileBlock) block;
// Fallback?
if ( teClass != null )
tileBlock.setTileEntity( teClass );
blockRendering.apply( factory, block, tileBlock.getTileEntityClass() ); blockRendering.apply( factory, block, tileBlock.getTileEntityClass() );
} }
else else
@ -248,15 +251,8 @@ class BlockDefinitionBuilder implements IBlockBuilder
if( block instanceof AEBaseTileBlock ) if( block instanceof AEBaseTileBlock )
{ {
AEBaseTileBlock tileBlock = (AEBaseTileBlock) block;
if( teClass != null )
tileBlock.setTileEntity( teClass );
factory.addPreInit( side -> { factory.addPreInit( side -> {
AEBaseTile.registerTileItem( teClass, new BlockStackSrc( block, 0, ActivityState.Enabled ) ); 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 ); return (T) new TileDefinition( registryName, (AEBaseTileBlock) block, item );

View file

@ -19,6 +19,7 @@
package appeng.core.api.definitions; package appeng.core.api.definitions;
import appeng.core.AELog;
import appeng.debug.TileChunkLoader; import appeng.debug.TileChunkLoader;
import appeng.debug.TileCubeGenerator; import appeng.debug.TileCubeGenerator;
import appeng.debug.TileItemGen; 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.ItemBlock;
import net.minecraft.item.ItemSlab; import net.minecraft.item.ItemSlab;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.OreDictionary;
@ -153,6 +156,9 @@ import appeng.decorative.solid.BlockSkyStone.SkystoneType;
import appeng.decorative.stair.BlockStairCommon; import appeng.decorative.stair.BlockStairCommon;
import appeng.hooks.DispenserBehaviorTinyTNT; import appeng.hooks.DispenserBehaviorTinyTNT;
import java.util.ArrayList;
import java.util.List;
/** /**
* Internal implementation for the API blocks * Internal implementation for the API blocks
@ -234,6 +240,22 @@ public final class ApiBlocks implements IBlocks
private final IBlockDefinition phantomNode; private final IBlockDefinition phantomNode;
private final IBlockDefinition cubeGenerator; private final IBlockDefinition cubeGenerator;
// private List<Class<? extends TileEntity>> registeredClasses = new ArrayList<Class<? extends TileEntity>>();
private void registerTileEntity( Class<? extends TileEntity> 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 ) public ApiBlocks( FeatureFactory registry, PartModels partModels )
{ {
// this.quartzOre = new BlockDefinition( "ore.quartz", new OreQuartz() ); // 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 ) ) this.skyStoneChest = registry.block( "sky_stone_chest", () -> new BlockSkyChest( SkyChestType.STONE ) )
.features( AEFeature.SKY_STONE_CHESTS ) .features( AEFeature.SKY_STONE_CHESTS )
.tileEntity( TileSkyChest.TileSkyChestStone.class ) .tileEntity( TileSkyChest.class )
.rendering( new SkyChestRenderingCustomizer( SkyChestType.STONE ) ) .rendering( new SkyChestRenderingCustomizer( SkyChestType.STONE ) )
.build(); .build();
this.smoothSkyStoneChest = registry.block( "smooth_sky_stone_chest", () -> new BlockSkyChest( SkyChestType.BLOCK ) ) this.smoothSkyStoneChest = registry.block( "smooth_sky_stone_chest", () -> new BlockSkyChest( SkyChestType.BLOCK ) )
.features( AEFeature.SKY_STONE_CHESTS ) .features( AEFeature.SKY_STONE_CHESTS )
.tileEntity( TileSkyChest.TileSkyChestSmooth.class ) .tileEntity( TileSkyChest.class )
.rendering( new SkyChestRenderingCustomizer( SkyChestType.BLOCK ) ) .rendering( new SkyChestRenderingCustomizer( SkyChestType.BLOCK ) )
.build(); .build();
@ -343,12 +365,12 @@ public final class ApiBlocks implements IBlocks
.build(); .build();
this.quantumRing = registry.block( "quantum_ring", BlockQuantumRing::new ) this.quantumRing = registry.block( "quantum_ring", BlockQuantumRing::new )
.features( AEFeature.QUANTUM_NETWORK_BRIDGE ) .features( AEFeature.QUANTUM_NETWORK_BRIDGE )
.tileEntity( TileQuantumBridge.TileQuantumBridgeRing.class ) .tileEntity( TileQuantumBridge.class )
.rendering( new QuantumBridgeRendering() ) .rendering( new QuantumBridgeRendering() )
.build(); .build();
this.quantumLink = registry.block( "quantum_link", BlockQuantumLinkChamber::new ) this.quantumLink = registry.block( "quantum_link", BlockQuantumLinkChamber::new )
.features( AEFeature.QUANTUM_NETWORK_BRIDGE ) .features( AEFeature.QUANTUM_NETWORK_BRIDGE )
.tileEntity( TileQuantumBridge.TileQuantumBridgeGlass.class ) .tileEntity( TileQuantumBridge.class )
.rendering( new QuantumBridgeRendering() ) .rendering( new QuantumBridgeRendering() )
.build(); .build();
this.spatialPylon = registry.block( "spatial_pylon", BlockSpatialPylon::new ) this.spatialPylon = registry.block( "spatial_pylon", BlockSpatialPylon::new )
@ -412,30 +434,30 @@ public final class ApiBlocks implements IBlocks
.build(); .build();
this.craftingAccelerator = crafting.block( "crafting_accelerator", () -> new BlockCraftingUnit( CraftingUnitType.ACCELERATOR ) ) this.craftingAccelerator = crafting.block( "crafting_accelerator", () -> new BlockCraftingUnit( CraftingUnitType.ACCELERATOR ) )
.rendering( new CraftingCubeRendering( "crafting_accelerator", CraftingUnitType.ACCELERATOR ) ) .rendering( new CraftingCubeRendering( "crafting_accelerator", CraftingUnitType.ACCELERATOR ) )
.tileEntity( TileCraftingTile.TileCraftingTileAccelerator.class ) .tileEntity( TileCraftingTile.class )
.useCustomItemModel() .useCustomItemModel()
.build(); .build();
this.craftingStorage1k = crafting.block( "crafting_storage_1k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_1K ) ) this.craftingStorage1k = crafting.block( "crafting_storage_1k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_1K ) )
.item( ItemCraftingStorage::new ) .item( ItemCraftingStorage::new )
.tileEntity( TileCraftingStorageTile.TileCraftingStorageTile1k.class ) .tileEntity( TileCraftingStorageTile.class )
.rendering( new CraftingCubeRendering( "crafting_storage_1k", CraftingUnitType.STORAGE_1K ) ) .rendering( new CraftingCubeRendering( "crafting_storage_1k", CraftingUnitType.STORAGE_1K ) )
.useCustomItemModel() .useCustomItemModel()
.build(); .build();
this.craftingStorage4k = crafting.block( "crafting_storage_4k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_4K ) ) this.craftingStorage4k = crafting.block( "crafting_storage_4k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_4K ) )
.item( ItemCraftingStorage::new ) .item( ItemCraftingStorage::new )
.tileEntity( TileCraftingStorageTile.TileCraftingStorageTile4k.class ) .tileEntity( TileCraftingStorageTile.class )
.rendering( new CraftingCubeRendering( "crafting_storage_4k", CraftingUnitType.STORAGE_4K ) ) .rendering( new CraftingCubeRendering( "crafting_storage_4k", CraftingUnitType.STORAGE_4K ) )
.useCustomItemModel() .useCustomItemModel()
.build(); .build();
this.craftingStorage16k = crafting.block( "crafting_storage_16k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_16K ) ) this.craftingStorage16k = crafting.block( "crafting_storage_16k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_16K ) )
.item( ItemCraftingStorage::new ) .item( ItemCraftingStorage::new )
.tileEntity( TileCraftingStorageTile.TileCraftingStorageTile16k.class ) .tileEntity( TileCraftingStorageTile.class )
.rendering( new CraftingCubeRendering( "crafting_storage_16k", CraftingUnitType.STORAGE_16K ) ) .rendering( new CraftingCubeRendering( "crafting_storage_16k", CraftingUnitType.STORAGE_16K ) )
.useCustomItemModel() .useCustomItemModel()
.build(); .build();
this.craftingStorage64k = crafting.block( "crafting_storage_64k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_64K ) ) this.craftingStorage64k = crafting.block( "crafting_storage_64k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_64K ) )
.item( ItemCraftingStorage::new ) .item( ItemCraftingStorage::new )
.tileEntity( TileCraftingStorageTile.TileCraftingStorageTile64k.class ) .tileEntity( TileCraftingStorageTile.class )
.rendering( new CraftingCubeRendering( "crafting_storage_64k", CraftingUnitType.STORAGE_64K ) ) .rendering( new CraftingCubeRendering( "crafting_storage_64k", CraftingUnitType.STORAGE_64K ) )
.useCustomItemModel() .useCustomItemModel()
.build(); .build();
@ -468,7 +490,8 @@ public final class ApiBlocks implements IBlocks
this.multiPart = registry.block( "cable_bus", BlockCableBus::new ) this.multiPart = registry.block( "cable_bus", BlockCableBus::new )
.rendering( new CableBusRendering( partModels ) ) .rendering( new CableBusRendering( partModels ) )
.tileEntity( TileCableBus.class ) // (handled in BlockCableBus.java and its setupTile())
// .tileEntity( TileCableBus.class )
.postInit( ( block, item ) -> .postInit( ( block, item ) ->
{ {
( (BlockCableBus) block ).setupTile(); ( (BlockCableBus) block ).setupTile();
@ -504,6 +527,44 @@ public final class ApiBlocks implements IBlocks
.tileEntity( TileCubeGenerator.class ) .tileEntity( TileCubeGenerator.class )
.useCustomItemModel() .useCustomItemModel()
.build(); .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 ) private static IBlockDefinition makeSlab( String slabId, String doubleSlabId, FeatureFactory registry, IBlockDefinition blockDef )

View file

@ -305,27 +305,17 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
{ {
this.craftingCPUClusters.clear(); this.craftingCPUClusters.clear();
IMachineSet machineSets[] = new IMachineSet[4]; // 4 because we have 4 types of Storage Tiles ATM. for( final IGridNode cst : this.grid.getMachines( TileCraftingStorageTile.class ) )
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 : ms ) final TileCraftingStorageTile tile = (TileCraftingStorageTile) cst.getMachine();
final CraftingCPUCluster cluster = (CraftingCPUCluster) tile.getCluster();
if( cluster != null )
{ {
final TileCraftingStorageTile tile = (TileCraftingStorageTile) cst.getMachine(); this.craftingCPUClusters.add( cluster );
final CraftingCPUCluster cluster = (CraftingCPUCluster) tile.getCluster();
if( cluster != null )
{
this.craftingCPUClusters.add( cluster );
if( cluster.getLastCraftingLink() != null ) if( cluster.getLastCraftingLink() != null )
{ {
this.addLink( (CraftingLink) cluster.getLastCraftingLink() ); this.addLink( (CraftingLink) cluster.getLastCraftingLink() );
}
} }
} }
} }

View file

@ -32,34 +32,6 @@ public class TileCraftingStorageTile extends TileCraftingTile
{ {
private static final int KILO_SCALAR = 1024; 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 @Override
protected ItemStack getItemFromTile( final Object obj ) protected ItemStack getItemFromTile( final Object obj )
{ {

View file

@ -60,13 +60,6 @@ import appeng.util.Platform;
public class TileCraftingTile extends AENetworkTile implements IAEMultiBlock, IPowerChannelState 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 final CraftingCPUCalculator calc = new CraftingCPUCalculator( this );
private NBTTagCompound previousState = null; private NBTTagCompound previousState = null;
private boolean isCoreBlock = false; private boolean isCoreBlock = false;

View file

@ -55,21 +55,6 @@ import appeng.util.Platform;
public class TileQuantumBridge extends AENetworkInvTile implements IAEMultiBlock, ITickable 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 byte corner = 16;
private final int[] sidesRing = {}; private final int[] sidesRing = {};
private final int[] sidesLink = { 0 }; private final int[] sidesLink = { 0 };

View file

@ -39,20 +39,6 @@ import appeng.tile.inventory.InvOperation;
public class TileSkyChest extends AEBaseInvTile implements ITickable 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 = { private final int[] sides = {
0, 0,
1, 1,