From 458356a2be1c44dd838fc7a473813615648f9dad Mon Sep 17 00:00:00 2001 From: Gunther De Wachter Date: Fri, 14 Jul 2017 04:47:40 +0200 Subject: [PATCH] First attempt at combining the Block registration and TE registration whilst still keeping support for addons. It might need some refinement in the future. --- gradle.properties | 2 +- .../block/networking/BlockCableBus.java | 1 + .../bootstrap/BlockDefinitionBuilder.java | 25 ++- .../java/appeng/bootstrap/FeatureFactory.java | 13 +- .../java/appeng/bootstrap/IBlockBuilder.java | 4 +- .../components/TileEntityComponent.java | 42 +++++ .../definitions/TileEntityDefinition.java | 70 ++++++++ src/main/java/appeng/core/Registration.java | 6 +- .../core/api/definitions/ApiBlocks.java | 168 +++++++----------- .../recipes/helpers/PartRecipeFactory.java | 2 +- 10 files changed, 214 insertions(+), 119 deletions(-) create mode 100644 src/main/java/appeng/bootstrap/components/TileEntityComponent.java create mode 100644 src/main/java/appeng/bootstrap/definitions/TileEntityDefinition.java diff --git a/gradle.properties b/gradle.properties index cacde6e3..31d254c0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ aebasename=appliedenergistics2 ######################################################### minecraft_version=1.12 mcp_mappings=snapshot_20170704 -forge_version=14.21.1.2395 +forge_version=14.21.1.2412 ######################################################### # Installable # diff --git a/src/main/java/appeng/block/networking/BlockCableBus.java b/src/main/java/appeng/block/networking/BlockCableBus.java index 678dc22a..9063e929 100644 --- a/src/main/java/appeng/block/networking/BlockCableBus.java +++ b/src/main/java/appeng/block/networking/BlockCableBus.java @@ -100,6 +100,7 @@ public class BlockCableBus extends AEBaseTileBlock // this will actually be overwritten later through setupTile and the // combined layers + this.setTileEntity( TileCableBus.class ); } @Override diff --git a/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java b/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java index 2476a705..30317471 100644 --- a/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java +++ b/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java @@ -29,6 +29,7 @@ import java.util.function.Supplier; import javax.annotation.Nullable; +import appeng.bootstrap.definitions.TileEntityDefinition; import appeng.core.Registration; import net.minecraft.block.Block; import net.minecraft.client.renderer.block.model.ModelResourceLocation; @@ -76,7 +77,7 @@ class BlockDefinitionBuilder implements IBlockBuilder private CreativeTabs creativeTab = CreativeTab.instance; - private Class teClass; + private TileEntityDefinition tileEntityDefinition; private boolean disableItem = false; @@ -156,9 +157,9 @@ class BlockDefinitionBuilder implements IBlockBuilder } @Override - public IBlockBuilder tileEntity( Class tileEntityClass ) + public IBlockBuilder tileEntity( TileEntityDefinition tileEntityDefinition ) { - teClass = tileEntityClass; + this.tileEntityDefinition = tileEntityDefinition; return this; } @@ -203,6 +204,7 @@ class BlockDefinitionBuilder implements IBlockBuilder @Override public T build() { + System.out.println("regName = " + registryName); if( !AEConfig.instance().areFeaturesEnabled( features ) ) { return (T) new TileDefinition( registryName, null, null ); @@ -238,9 +240,15 @@ class BlockDefinitionBuilder implements IBlockBuilder postInitCallbacks.forEach( consumer -> factory.addPostInit( side -> consumer.accept( block, item ) ) ); - if ( teClass != null && block instanceof AEBaseTileBlock ) + + if ( tileEntityDefinition != null && block instanceof AEBaseTileBlock ) { - ((AEBaseTileBlock) block).setTileEntity( teClass ); + ( (AEBaseTileBlock) block ).setTileEntity( tileEntityDefinition.getTileEntityClass() ); + if( tileEntityDefinition.getName() == null ) + { + tileEntityDefinition.setName( registryName ); + } + } if( Platform.isClient() ) @@ -264,9 +272,14 @@ class BlockDefinitionBuilder implements IBlockBuilder if( block instanceof AEBaseTileBlock ) { factory.addPreInit( side -> { - AEBaseTile.registerTileItem( teClass, new BlockStackSrc( block, 0, ActivityState.Enabled ) ); + AEBaseTile.registerTileItem( tileEntityDefinition == null ? ( (AEBaseTileBlock) block ).getTileEntityClass() : tileEntityDefinition.getTileEntityClass(), new BlockStackSrc( block, 0, ActivityState.Enabled ) ); } ); + if( tileEntityDefinition != null ) + { + factory.tileEntityComponent.addTileEntity( tileEntityDefinition ); + } + return (T) new TileDefinition( registryName, (AEBaseTileBlock) block, item ); } else diff --git a/src/main/java/appeng/bootstrap/FeatureFactory.java b/src/main/java/appeng/bootstrap/FeatureFactory.java index b02bc8cf..bd710afd 100644 --- a/src/main/java/appeng/bootstrap/FeatureFactory.java +++ b/src/main/java/appeng/bootstrap/FeatureFactory.java @@ -23,7 +23,7 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; -import appeng.bootstrap.components.ModelRegComponent; +import appeng.bootstrap.components.*; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraftforge.client.model.IModel; @@ -33,11 +33,6 @@ import net.minecraftforge.fml.relauncher.SideOnly; import appeng.api.definitions.IItemDefinition; import appeng.api.util.AEColor; import appeng.api.util.AEColoredItemDefinition; -import appeng.bootstrap.components.BuiltInModelComponent; -import appeng.bootstrap.components.InitComponent; -import appeng.bootstrap.components.ModelOverrideComponent; -import appeng.bootstrap.components.PostInitComponent; -import appeng.bootstrap.components.PreInitComponent; import appeng.core.features.AEFeature; import appeng.core.features.ActivityState; import appeng.core.features.ColoredItemDefinition; @@ -58,11 +53,16 @@ public class FeatureFactory @SideOnly( Side.CLIENT ) private BuiltInModelComponent builtInModelComponent; + public final TileEntityComponent tileEntityComponent; + public FeatureFactory() { this.defaultFeatures = new AEFeature[] { AEFeature.CORE }; this.bootstrapComponents = new ArrayList<>(); + this.tileEntityComponent = new TileEntityComponent(); + this.bootstrapComponents.add( tileEntityComponent ); + if( Platform.isClient() ) { modelOverrideComponent = new ModelOverrideComponent(); @@ -77,6 +77,7 @@ public class FeatureFactory { this.defaultFeatures = defaultFeatures.clone(); this.bootstrapComponents = parent.bootstrapComponents; + this.tileEntityComponent = parent.tileEntityComponent; if( Platform.isClient() ) { this.modelOverrideComponent = parent.modelOverrideComponent; diff --git a/src/main/java/appeng/bootstrap/IBlockBuilder.java b/src/main/java/appeng/bootstrap/IBlockBuilder.java index 41199db1..16f8e587 100644 --- a/src/main/java/appeng/bootstrap/IBlockBuilder.java +++ b/src/main/java/appeng/bootstrap/IBlockBuilder.java @@ -22,7 +22,7 @@ package appeng.bootstrap; import java.util.function.BiConsumer; import java.util.function.Function; -import appeng.tile.AEBaseTile; +import appeng.bootstrap.definitions.TileEntityDefinition; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; @@ -48,7 +48,7 @@ public interface IBlockBuilder IBlockBuilder rendering( BlockRenderingCustomizer callback ); - IBlockBuilder tileEntity( Class teClass ); + IBlockBuilder tileEntity( TileEntityDefinition tileEntityDefinition ); /** * Don't register an item for this block. diff --git a/src/main/java/appeng/bootstrap/components/TileEntityComponent.java b/src/main/java/appeng/bootstrap/components/TileEntityComponent.java new file mode 100644 index 00000000..263c0353 --- /dev/null +++ b/src/main/java/appeng/bootstrap/components/TileEntityComponent.java @@ -0,0 +1,42 @@ +package appeng.bootstrap.components; + +import appeng.bootstrap.definitions.TileEntityDefinition; +import appeng.core.AppEng; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.fml.relauncher.Side; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author GuntherDW + */ +public class TileEntityComponent implements PreInitComponent +{ + private List tileEntityDefinitions = new ArrayList<>(); + + public TileEntityComponent() + { + } + + public void addTileEntity( TileEntityDefinition tileEntityDefinition ) + { + if( !tileEntityDefinitions.contains( tileEntityDefinition ) ) + { + tileEntityDefinitions.add( tileEntityDefinition ); + } + } + + @Override + public void preInitialize( Side side ) + { + for( TileEntityDefinition tileEntityDefinition : tileEntityDefinitions ) + { + if ( !tileEntityDefinition.isRegistered() ) + { + GameRegistry.registerTileEntity( tileEntityDefinition.getTileEntityClass(), AppEng.MOD_ID + ":" + tileEntityDefinition.getName() ); + tileEntityDefinition.setRegistered( true ); + } + } + } +} diff --git a/src/main/java/appeng/bootstrap/definitions/TileEntityDefinition.java b/src/main/java/appeng/bootstrap/definitions/TileEntityDefinition.java new file mode 100644 index 00000000..b349c72c --- /dev/null +++ b/src/main/java/appeng/bootstrap/definitions/TileEntityDefinition.java @@ -0,0 +1,70 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2017, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.bootstrap.definitions; + +import appeng.tile.AEBaseTile; + +/** + * @author GuntherDW + */ +public class TileEntityDefinition +{ + + private final Class tileEntityClass; + private String name; + private boolean isRegistered = false; + + // This signals the BlockDefinitionBuilder to set the name of the TE to the blockname. + public TileEntityDefinition( Class tileEntityClass ) + { + this.tileEntityClass = tileEntityClass; + this.name = null; + } + + public TileEntityDefinition( Class tileEntityClass, String optionalName ) + { + this.tileEntityClass = tileEntityClass; + this.name = optionalName; + } + + public Class getTileEntityClass() + { + return tileEntityClass; + } + + public void setName( String name ) + { + this.name = name; + } + + public String getName() + { + return name; + } + + public boolean isRegistered() + { + return isRegistered; + } + + public void setRegistered( boolean registered ) + { + isRegistered = registered; + } +} diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index d79c8d51..5d562f3c 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -393,10 +393,10 @@ public final class Registration @SubscribeEvent public void registerRecipes(RegistryEvent.Register event) { - IForgeRegistry registry = event.getRegistry(); + final IForgeRegistry registry = event.getRegistry(); - Api api = Api.INSTANCE; - ApiDefinitions definitions = api.definitions(); + final Api api = Api.INSTANCE; + final ApiDefinitions definitions = api.definitions(); // Perform ore camouflage! ItemMaterial.instance.makeUnique(); diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index dcb2650b..3ca246df 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -19,7 +19,7 @@ package appeng.core.api.definitions; -import appeng.core.AELog; +import appeng.bootstrap.definitions.TileEntityDefinition; import appeng.debug.TileChunkLoader; import appeng.debug.TileCubeGenerator; import appeng.debug.TileItemGen; @@ -41,7 +41,6 @@ import appeng.tile.misc.TileQuartzGrowthAccelerator; import appeng.tile.misc.TileSecurityStation; import appeng.tile.misc.TileSkyCompass; import appeng.tile.misc.TileVibrationChamber; -import appeng.tile.networking.TileCableBus; import appeng.tile.networking.TileController; import appeng.tile.networking.TileCreativeEnergyCell; import appeng.tile.networking.TileDenseEnergyCell; @@ -156,10 +155,6 @@ 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 */ @@ -240,22 +235,6 @@ 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() ); @@ -308,39 +287,42 @@ public final class ApiBlocks implements IBlocks this.skyStoneChest = registry.block( "sky_stone_chest", () -> new BlockSkyChest( SkyChestType.STONE ) ) .features( AEFeature.SKY_STONE_CHESTS ) - .tileEntity( TileSkyChest.class ) + .tileEntity( new TileEntityDefinition( TileSkyChest.class, "sky_stone_chest" ) ) .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.class ) + .tileEntity( new TileEntityDefinition( TileSkyChest.class, "sky_stone_chest" ) ) .rendering( new SkyChestRenderingCustomizer( SkyChestType.BLOCK ) ) .build(); this.skyCompass = registry.block( "sky_compass", BlockSkyCompass::new ) .features( AEFeature.METEORITE_COMPASS ) - .tileEntity( TileSkyCompass.class ) + .tileEntity( new TileEntityDefinition( TileSkyCompass.class ) ) .rendering( new SkyCompassRendering() ) .build(); - this.grindstone = registry.block( "grindstone", BlockGrinder::new ).features( AEFeature.GRIND_STONE ).tileEntity( TileGrinder.class ).build(); + this.grindstone = registry.block( "grindstone", BlockGrinder::new ) + .features( AEFeature.GRIND_STONE ) + .tileEntity( new TileEntityDefinition( TileGrinder.class ) ) + .build(); this.crank = registry.block( "crank", BlockCrank::new ) .features( AEFeature.GRIND_STONE ) - .tileEntity( TileCrank.class ) + .tileEntity( new TileEntityDefinition( TileCrank.class ) ) .rendering( new CrankRendering() ) .build(); this.inscriber = registry.block( "inscriber", BlockInscriber::new ) .features( AEFeature.INSCRIBER ) - .tileEntity( TileInscriber.class ) + .tileEntity( new TileEntityDefinition( TileInscriber.class ) ) .rendering( new InscriberRendering() ) .build(); this.wirelessAccessPoint = registry.block( "wireless_access_point", BlockWireless::new ) .features( AEFeature.WIRELESS_ACCESS_TERMINAL ) - .tileEntity( TileWireless.class ) + .tileEntity( new TileEntityDefinition( TileWireless.class ) ) .rendering( new WirelessRendering() ) .build(); this.charger = registry.block( "charger", BlockCharger::new ) .features( AEFeature.CHARGER ) - .tileEntity( TileCharger.class ) + .tileEntity( new TileEntityDefinition( TileCharger.class ) ) .rendering( new BlockRenderingCustomizer() { @Override @@ -360,122 +342,146 @@ public final class ApiBlocks implements IBlocks .build(); this.securityStation = registry.block( "security_station", BlockSecurityStation::new ) .features( AEFeature.SECURITY ) - .tileEntity( TileSecurityStation.class ) + .tileEntity( new TileEntityDefinition( TileSecurityStation.class ) ) .rendering( new SecurityStationRendering() ) .build(); this.quantumRing = registry.block( "quantum_ring", BlockQuantumRing::new ) .features( AEFeature.QUANTUM_NETWORK_BRIDGE ) - .tileEntity( TileQuantumBridge.class ) + .tileEntity( new TileEntityDefinition( TileQuantumBridge.class, "quantum_ring" ) ) .rendering( new QuantumBridgeRendering() ) .build(); this.quantumLink = registry.block( "quantum_link", BlockQuantumLinkChamber::new ) .features( AEFeature.QUANTUM_NETWORK_BRIDGE ) - .tileEntity( TileQuantumBridge.class ) + .tileEntity( new TileEntityDefinition( TileQuantumBridge.class, "quantum_ring" ) ) .rendering( new QuantumBridgeRendering() ) .build(); this.spatialPylon = registry.block( "spatial_pylon", BlockSpatialPylon::new ) .features( AEFeature.SPATIAL_IO ) - .tileEntity( TileSpatialPylon.class ) + .tileEntity( new TileEntityDefinition( TileSpatialPylon.class ) ) .useCustomItemModel() .rendering( new SpatialPylonRendering() ) .build(); - this.spatialIOPort = registry.block( "spatial_io_port", BlockSpatialIOPort::new ).features( AEFeature.SPATIAL_IO ).tileEntity( TileSpatialIOPort.class ).build(); + this.spatialIOPort = registry.block( "spatial_io_port", BlockSpatialIOPort::new ) + .features( AEFeature.SPATIAL_IO ) + .tileEntity( new TileEntityDefinition( TileSpatialIOPort.class ) ) + .build(); this.controller = registry.block( "controller", BlockController::new ) .features( AEFeature.CHANNELS ) - .tileEntity( TileController.class ) + .tileEntity( new TileEntityDefinition( TileController.class ) ) .useCustomItemModel() .rendering( new ControllerRendering() ) .build(); this.drive = registry.block( "drive", BlockDrive::new ) .features( AEFeature.STORAGE_CELLS, AEFeature.ME_DRIVE ) - .tileEntity( TileDrive.class ) + .tileEntity( new TileEntityDefinition( TileDrive.class ) ) .useCustomItemModel() .rendering( new DriveRendering() ) .build(); this.chest = registry.block( "chest", BlockChest::new ) .features( AEFeature.STORAGE_CELLS, AEFeature.ME_CHEST ) - .tileEntity( TileChest.class ) + .tileEntity( new TileEntityDefinition( TileChest.class ) ) .useCustomItemModel() .rendering( new ChestRendering() ) .build(); - this.iface = registry.block( "interface", BlockInterface::new ).features( AEFeature.INTERFACE ).tileEntity( TileInterface.class ).build(); - this.cellWorkbench = registry.block( "cell_workbench", BlockCellWorkbench::new ).features( AEFeature.STORAGE_CELLS ).tileEntity( TileCellWorkbench.class ).build(); - this.iOPort = registry.block( "io_port", BlockIOPort::new ).features( AEFeature.STORAGE_CELLS, AEFeature.IO_PORT ).tileEntity( TileIOPort.class ).build(); - this.condenser = registry.block( "condenser", BlockCondenser::new ).features( AEFeature.CONDENSER ).tileEntity( TileCondenser.class ).build(); - this.energyAcceptor = registry.block( "energy_acceptor", BlockEnergyAcceptor::new ).features( AEFeature.ENERGY_ACCEPTOR ).tileEntity( TileEnergyAcceptor.class ).build(); - this.vibrationChamber = registry.block( "vibration_chamber", BlockVibrationChamber::new ).features( AEFeature.POWER_GEN ).tileEntity( TileVibrationChamber.class ).build(); + this.iface = registry.block( "interface", BlockInterface::new ) + .features( AEFeature.INTERFACE ) + .tileEntity( new TileEntityDefinition( TileInterface.class ) ) + .build(); + this.cellWorkbench = registry.block( "cell_workbench", BlockCellWorkbench::new ) + .features( AEFeature.STORAGE_CELLS ) + .tileEntity( new TileEntityDefinition( TileCellWorkbench.class ) ) + .build(); + this.iOPort = registry.block( "io_port", BlockIOPort::new ) + .features( AEFeature.STORAGE_CELLS, AEFeature.IO_PORT ) + .tileEntity( new TileEntityDefinition( TileIOPort.class ) ) + .build(); + this.condenser = registry.block( "condenser", BlockCondenser::new ) + .features( AEFeature.CONDENSER ) + .tileEntity( new TileEntityDefinition( TileCondenser.class ) ) + .build(); + this.energyAcceptor = registry.block( "energy_acceptor", BlockEnergyAcceptor::new ) + .features( AEFeature.ENERGY_ACCEPTOR ) + .tileEntity( new TileEntityDefinition( TileEnergyAcceptor.class ) ) + .build(); + this.vibrationChamber = registry.block( "vibration_chamber", BlockVibrationChamber::new ) + .features( AEFeature.POWER_GEN ) + .tileEntity( new TileEntityDefinition( TileVibrationChamber.class ) ) + .build(); this.quartzGrowthAccelerator = registry.block( "quartz_growth_accelerator", BlockQuartzGrowthAccelerator::new ) - .tileEntity( TileQuartzGrowthAccelerator.class ) + .tileEntity( new TileEntityDefinition( TileQuartzGrowthAccelerator.class ) ) .features( AEFeature.CRYSTAL_GROWTH_ACCELERATOR ) .build(); this.energyCell = registry.block( "energy_cell", BlockEnergyCell::new ) .features( AEFeature.ENERGY_CELLS ) .item( AEBaseItemBlockChargeable::new ) - .tileEntity( TileEnergyCell.class ) + .tileEntity( new TileEntityDefinition( TileEnergyCell.class ) ) .rendering( new BlockEnergyCellRendering( new ResourceLocation( AppEng.MOD_ID, "energy_cell" ) ) ) .build(); this.energyCellDense = registry.block( "dense_energy_cell", BlockDenseEnergyCell::new ) .features( AEFeature.ENERGY_CELLS, AEFeature.DENSE_ENERGY_CELLS ) .item( AEBaseItemBlockChargeable::new ) - .tileEntity( TileDenseEnergyCell.class ) + .tileEntity( new TileEntityDefinition( TileDenseEnergyCell.class ) ) .rendering( new BlockEnergyCellRendering( new ResourceLocation( AppEng.MOD_ID, "dense_energy_cell" ) ) ) .build(); this.energyCellCreative = registry.block( "creative_energy_cell", BlockCreativeEnergyCell::new ) .features( AEFeature.CREATIVE ) .item( AEBaseItemBlockChargeable::new ) - .tileEntity( TileCreativeEnergyCell.class ) + .tileEntity( new TileEntityDefinition( TileCreativeEnergyCell.class ) ) .build(); FeatureFactory crafting = registry.features( AEFeature.CRAFTING_CPU ); this.craftingUnit = crafting.block( "crafting_unit", () -> new BlockCraftingUnit( CraftingUnitType.UNIT ) ) .rendering( new CraftingCubeRendering( "crafting_unit", CraftingUnitType.UNIT ) ) - .tileEntity( TileCraftingTile.class ) + .tileEntity( new TileEntityDefinition( TileCraftingTile.class, "crafting_unit" ) ) .useCustomItemModel() .build(); this.craftingAccelerator = crafting.block( "crafting_accelerator", () -> new BlockCraftingUnit( CraftingUnitType.ACCELERATOR ) ) .rendering( new CraftingCubeRendering( "crafting_accelerator", CraftingUnitType.ACCELERATOR ) ) - .tileEntity( TileCraftingTile.class ) + .tileEntity( new TileEntityDefinition( TileCraftingTile.class, "crafting_unit" ) ) .useCustomItemModel() .build(); this.craftingStorage1k = crafting.block( "crafting_storage_1k", () -> new BlockCraftingStorage( CraftingUnitType.STORAGE_1K ) ) .item( ItemCraftingStorage::new ) - .tileEntity( TileCraftingStorageTile.class ) + .tileEntity( new TileEntityDefinition( TileCraftingStorageTile.class, "crafting_storage" ) ) .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.class ) + .tileEntity( new TileEntityDefinition( TileCraftingStorageTile.class, "crafting_storage" ) ) .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.class ) + .tileEntity( new TileEntityDefinition( TileCraftingStorageTile.class, "crafting_storage" ) ) .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.class ) + .tileEntity( new TileEntityDefinition( TileCraftingStorageTile.class, "crafting_storage" ) ) .rendering( new CraftingCubeRendering( "crafting_storage_64k", CraftingUnitType.STORAGE_64K ) ) .useCustomItemModel() .build(); this.craftingMonitor = crafting.block( "crafting_monitor", BlockCraftingMonitor::new ) - .tileEntity( TileCraftingMonitorTile.class ) + .tileEntity( new TileEntityDefinition( TileCraftingMonitorTile.class ) ) .rendering( new CraftingCubeRendering( "crafting_monitor", CraftingUnitType.MONITOR ) ) .useCustomItemModel() .build(); - this.molecularAssembler = registry.block( "molecular_assembler", BlockMolecularAssembler::new ).features( AEFeature.MOLECULAR_ASSEMBLER ).tileEntity( TileMolecularAssembler.class ).build(); + this.molecularAssembler = registry.block( "molecular_assembler", BlockMolecularAssembler::new ) + .features( AEFeature.MOLECULAR_ASSEMBLER ) + .tileEntity( new TileEntityDefinition( TileMolecularAssembler.class ) ) + .build(); this.lightDetector = registry.block( "light_detector", BlockLightDetector::new ) .features( AEFeature.LIGHT_DETECTOR ) - .tileEntity( TileLightDetector.class ) + .tileEntity( new TileEntityDefinition( TileLightDetector.class ) ) .useCustomItemModel() .build(); this.paint = registry.block( "paint", BlockPaint::new ) .features( AEFeature.PAINT_BALLS ) - .tileEntity( TilePaint.class ) + .tileEntity( new TileEntityDefinition( TilePaint.class ) ) .rendering( new PaintRendering() ) .build(); @@ -509,62 +515,24 @@ public final class ApiBlocks implements IBlocks this.itemGen = registry.block( "debug_item_gen", BlockItemGen::new ) .features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE ) - .tileEntity( TileItemGen.class ) + .tileEntity( new TileEntityDefinition ( TileItemGen.class ) ) .useCustomItemModel() .build(); this.chunkLoader = registry.block( "debug_chunk_loader", BlockChunkloader::new ) .features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE ) - .tileEntity( TileChunkLoader.class ) + .tileEntity( new TileEntityDefinition ( TileChunkLoader.class ) ) .useCustomItemModel() .build(); this.phantomNode = registry.block( "debug_phantom_node", BlockPhantomNode::new ) .features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE ) - .tileEntity( TilePhantomNode.class ) + .tileEntity( new TileEntityDefinition ( TilePhantomNode.class ) ) .useCustomItemModel() .build(); this.cubeGenerator = registry.block( "debug_cube_gen", BlockCubeGenerator::new ) .features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE ) - .tileEntity( TileCubeGenerator.class ) + .tileEntity( new TileEntityDefinition( 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/recipes/helpers/PartRecipeFactory.java b/src/main/java/appeng/recipes/helpers/PartRecipeFactory.java index d57d187c..1a755cc0 100644 --- a/src/main/java/appeng/recipes/helpers/PartRecipeFactory.java +++ b/src/main/java/appeng/recipes/helpers/PartRecipeFactory.java @@ -57,7 +57,7 @@ public class PartRecipeFactory implements IRecipeFactory else { throw new JsonSyntaxException( "Applied Energistics 2 was given a custom recipe that it does not know how to handle!\n" - + "Type should either be '" + AppEng.MOD_ID + ":shapeless' or '" + AppEng.MOD_ID + ":shaped', got '"+type+"'!" ); + + "Type should either be '" + AppEng.MOD_ID + ":shapeless' or '" + AppEng.MOD_ID + ":shaped', got '" + type + "'!" ); } } }