Fixed crash caused by delayed block registration.

Added Callback section for the Model Registry event to the builder setup.
Moved the State Mapper section to the Model Registry Callback section.
This commit is contained in:
Gunther De Wachter
2017-07-06 14:05:54 +02:00
parent d8c5e6a5fa
commit 198ea9f16e
8 changed files with 58 additions and 46 deletions
@@ -36,9 +36,6 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.gui.ForgeGuiFactory;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -71,6 +68,8 @@ class BlockDefinitionBuilder implements IBlockBuilder
private final List<BiConsumer<Block, Item>> initCallbacks = new ArrayList<>();
private final List<BiConsumer<Block, Item>> modelRegCallbacks = new ArrayList<>();
private final List<BiConsumer<Block, Item>> postInitCallbacks = new ArrayList<>();
private final EnumSet<AEFeature> features = EnumSet.noneOf( AEFeature.class );
@@ -116,6 +115,13 @@ class BlockDefinitionBuilder implements IBlockBuilder
return this;
}
@Override
public BlockDefinitionBuilder modelRegInit( BiConsumer<Block, Item> callback )
{
modelRegCallbacks.add( callback );
return this;
}
@Override
public BlockDefinitionBuilder postInit( BiConsumer<Block, Item> callback )
{
@@ -215,13 +221,10 @@ class BlockDefinitionBuilder implements IBlockBuilder
// Register the item and block with the game
factory.addPreInit( side -> {
// GameRegistry.register( block );
Registration.addBlockToRegister( block );
// ForgeRegistries.BLOCKS.register(block);
if( item != null )
{
Registration.addItemToRegister( item );
// ForgeRegistries.ITEMS.register(item);
}
} );
@@ -231,6 +234,7 @@ class BlockDefinitionBuilder implements IBlockBuilder
// Register all extra handlers
preInitCallbacks.forEach( consumer -> factory.addPreInit( side -> consumer.accept( block, item ) ) );
initCallbacks.forEach( consumer -> factory.addInit( side -> consumer.accept( block, item ) ) );
modelRegCallbacks.forEach(consumer -> factory.addModelReg(side -> consumer.accept( block, item ) ) );
postInitCallbacks.forEach( consumer -> factory.addPostInit( side -> consumer.accept( block, item ) ) );
@@ -120,7 +120,7 @@ class BlockRendering implements IBlockRendering
}
// TODO : 1.12
builtInModels.forEach( factory::addBuiltInModel );
builtInModels.forEach( factory::addBuiltInModel );
if( blockColor != null )
{
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
import appeng.bootstrap.components.ModelRegComponent;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.IModel;
@@ -129,6 +130,11 @@ public class FeatureFactory
this.bootstrapComponents.add( component );
}
void addModelReg( ModelRegComponent component )
{
this.bootstrapComponents.add( component );
}
void addPostInit( PostInitComponent component )
{
this.bootstrapComponents.add( component );
@@ -38,6 +38,8 @@ public interface IBlockBuilder
IBlockBuilder init( BiConsumer<Block, Item> callback );
IBlockBuilder modelRegInit( BiConsumer<Block, Item> callback );
IBlockBuilder postInit( BiConsumer<Block, Item> callback );
IBlockBuilder features( AEFeature... features );
@@ -32,6 +32,10 @@ public interface IBootstrapComponent
{
}
default void modelLoader( Side side )
{
}
default void initialize( Side side )
{
}
@@ -0,0 +1,15 @@
package appeng.bootstrap.components;
import appeng.bootstrap.IBootstrapComponent;
import net.minecraftforge.fml.relauncher.Side;
/**
* @author GuntherDW
*/
@FunctionalInterface
public interface ModelRegComponent extends IBootstrapComponent {
void modelReg(Side side);
}
@@ -31,7 +31,7 @@ import net.minecraftforge.fml.relauncher.Side;
/**
* Registers a custom state mapper for a given block.
*/
public class StateMapperComponent implements PreInitComponent
public class StateMapperComponent implements ModelRegComponent
{
private final Block block;
@@ -45,7 +45,7 @@ public class StateMapperComponent implements PreInitComponent
}
@Override
public void preInitialize( Side side )
public void modelReg( Side side )
{
ModelLoader.setCustomStateMapper( block, stateMapper );
if( stateMapper instanceof IResourceManagerReloadListener )