Skip to content

Commit

Permalink
Fixed crash caused by delayed block registration.
Browse files Browse the repository at this point in the history
Added Callback section for the Model Registry event to the builder setup.
Moved the State Mapper section to the Model Registry Callback section.
  • Loading branch information
GuntherDW committed Jul 6, 2017
1 parent d8c5e6a commit 198ea9f
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 45 deletions.
16 changes: 10 additions & 6 deletions src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@
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;

Expand Down Expand Up @@ -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 );
Expand Down Expand Up @@ -116,6 +115,13 @@ public BlockDefinitionBuilder init( BiConsumer<Block, Item> callback )
return this;
}

@Override
public BlockDefinitionBuilder modelRegInit( BiConsumer<Block, Item> callback )
{
modelRegCallbacks.add( callback );
return this;
}

@Override
public BlockDefinitionBuilder postInit( BiConsumer<Block, Item> callback )
{
Expand Down Expand Up @@ -215,13 +221,10 @@ public <T extends IBlockDefinition> T build()

// 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);
}
} );

Expand All @@ -231,6 +234,7 @@ public <T extends IBlockDefinition> T build()
// 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 ) ) );


Expand Down
2 changes: 1 addition & 1 deletion src/main/java/appeng/bootstrap/BlockRendering.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ else if( block instanceof AEBaseTileBlock )
}

// TODO : 1.12
builtInModels.forEach( factory::addBuiltInModel );
builtInModels.forEach( factory::addBuiltInModel );

if( blockColor != null )
{
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/appeng/bootstrap/FeatureFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
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;
Expand Down Expand Up @@ -129,6 +130,11 @@ void addInit( InitComponent component )
this.bootstrapComponents.add( component );
}

void addModelReg( ModelRegComponent component )
{
this.bootstrapComponents.add( component );
}

void addPostInit( PostInitComponent component )
{
this.bootstrapComponents.add( component );
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/appeng/bootstrap/IBlockBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/appeng/bootstrap/IBootstrapComponent.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ default void preInitialize( Side side )
{
}

default void modelLoader( Side side )
{
}

default void initialize( Side side )
{
}
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/appeng/bootstrap/components/ModelRegComponent.java
Original file line number Diff line number Diff line change
@@ -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);

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
/**
* Registers a custom state mapper for a given block.
*/
public class StateMapperComponent implements PreInitComponent
public class StateMapperComponent implements ModelRegComponent
{

private final Block block;
Expand All @@ -45,7 +45,7 @@ public StateMapperComponent( Block block, IStateMapper stateMapper )
}

@Override
public void preInitialize( Side side )
public void modelReg( Side side )
{
ModelLoader.setCustomStateMapper( block, stateMapper );
if( stateMapper instanceof IResourceManagerReloadListener )
Expand Down
53 changes: 17 additions & 36 deletions src/main/java/appeng/core/Registration.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,36 +20,29 @@


import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.annotation.Nonnull;

import appeng.api.definitions.IBlockDefinition;
import appeng.api.definitions.IItemDefinition;
import appeng.api.definitions.ITileDefinition;
import appeng.api.util.AEColoredItemDefinition;
import appeng.core.api.definitions.ApiBlocks;
import appeng.util.Platform;
import com.google.common.base.Preconditions;

import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.DimensionType;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeManager;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.API;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.oredict.RecipeSorter;
import net.minecraftforge.oredict.RecipeSorter.Category;
Expand Down Expand Up @@ -83,7 +76,6 @@
import appeng.hooks.TickHandler;
import appeng.integration.Integrations;
import appeng.items.materials.ItemMaterial;
import appeng.items.parts.ItemFacade;
import appeng.loot.ChestLoot;
import appeng.me.cache.CraftingGridCache;
import appeng.me.cache.EnergyGridCache;
Expand All @@ -97,7 +89,6 @@
import appeng.recipes.AEItemResolver;
import appeng.recipes.CustomRecipeConfig;
import appeng.recipes.RecipeHandler;
import appeng.recipes.game.DisassembleRecipe;
import appeng.recipes.game.FacadeRecipe;
import appeng.recipes.game.ShapedRecipe;
import appeng.recipes.game.ShapelessRecipe;
Expand All @@ -117,13 +108,10 @@
import appeng.spatial.BiomeGenStorage;
import appeng.spatial.StorageWorldProvider;
import appeng.tile.AEBaseTile;
import appeng.util.Platform;
import appeng.worldgen.MeteoriteWorldGen;
import appeng.worldgen.QuartzWorldGen;
import net.minecraftforge.registries.ForgeRegistry;
import net.minecraftforge.registries.IForgeRegistry;

@Mod.EventBusSubscriber(modid = AppEng.MOD_ID)
public final class Registration
{
private final RecipeHandler recipeHandler;
Expand Down Expand Up @@ -368,56 +356,49 @@ public void initialize( @Nonnull final FMLInitializationEvent event, @Nonnull fi
}

@SubscribeEvent
void registerBiomes ( RegistryEvent.Register<Biome> event )
public void registerBiomes ( RegistryEvent.Register<Biome> event )
{
IForgeRegistry<Biome> registry = event.getRegistry();
this.registerSpatial( false, registry );
}

@SubscribeEvent
void registerBlocks(RegistryEvent.Register<Block> event)
public void modelRegistryEvent ( ModelRegistryEvent event )
{
IForgeRegistry<Block> registry = event.getRegistry();
final Api api = Api.INSTANCE;
final IPartHelper partHelper = api.partHelper();
final IRegistryContainer registries = api.registries();

// try {
// for ( Field f : Api.INSTANCE.definitions().blocks().getClass().getDeclaredFields() )
// {
// f.setAccessible(true);
// if( f.getType() == IBlockDefinition.class || f.getType() == ITileDefinition.class ) {
// IBlockDefinition block = (IBlockDefinition) f.get(Api.INSTANCE.definitions().blocks());
// Block b = block.maybeBlock().get();
// System.out.println(b +" -> " + b.getRegistryName());
// registry.register(b);
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
ApiDefinitions definitions = api.definitions();
definitions.getRegistry().getBootstrapComponents().forEach( b -> b.modelLoader( FMLCommonHandler.instance().getEffectiveSide() ) );
}

@SubscribeEvent
public void registerBlocks(RegistryEvent.Register<Block> event)
{
IForgeRegistry<Block> registry = event.getRegistry();
// TODO : 1.12 Improve
for (Block b : blocksToRegister)
{
System.out.println("Registering block : " + b + " -> " + b.getRegistryName());
registry.register( b );
}
blocksToRegister = null;
}

@SubscribeEvent
void registerItems(RegistryEvent.Register<Item> event) {
public void registerItems(RegistryEvent.Register<Item> event) {

IForgeRegistry<Item> registry = event.getRegistry();
// TODO : 1.12 Improve
for( Item i : itemsToRegister )
{
System.out.println("Registering item : " + i + " -> " + i.getRegistryName());
registry.register( i );
}
itemsToRegister = null;
}

@SubscribeEvent
void registerRecipes(RegistryEvent.Register<IRecipe> event)
public void registerRecipes(RegistryEvent.Register<IRecipe> event)
{
IForgeRegistry<IRecipe> registry = event.getRegistry();
// TODO : 1.12 Improve
Expand Down

0 comments on commit 198ea9f

Please sign in to comment.