Skip to content

Commit

Permalink
Add recipe helpers to base pulse class
Browse files Browse the repository at this point in the history
  • Loading branch information
progwml6 committed Sep 20, 2016
1 parent 854854f commit 0f77588
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 65 deletions.
153 changes: 110 additions & 43 deletions src/main/java/com/progwml6/natura/common/NaturaPulse.java
@@ -1,18 +1,18 @@
package com.progwml6.natura.common;

import java.util.Locale;

import com.progwml6.natura.Natura;
import com.progwml6.natura.entities.NaturaEntities;
import com.progwml6.natura.library.Util;
import com.progwml6.natura.nether.NaturaNether;
import com.progwml6.natura.overworld.NaturaOverworld;
import com.progwml6.natura.world.NaturaWorld;

import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.ShapedRecipes;
import net.minecraft.item.crafting.ShapelessRecipes;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IStringSerializable;
import net.minecraftforge.fml.common.registry.GameRegistry;
Expand All @@ -23,6 +23,11 @@
import slimeknights.mantle.item.ItemBlockMeta;
import slimeknights.mantle.item.ItemBlockSlab;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

/**
* Just a small helper class that provides some function for cleaner Pulses.
*
Expand All @@ -31,35 +36,28 @@
* Models should be registered during Init
*/
// THANKS TINKERS
public abstract class NaturaPulse
{
protected static boolean isEntitiesLoaded()
{
public abstract class NaturaPulse {
protected static boolean isEntitiesLoaded () {
return Natura.pulseManager.isPulseLoaded(NaturaEntities.PulseId);
}

protected static boolean isWorldLoaded()
{
protected static boolean isWorldLoaded () {
return Natura.pulseManager.isPulseLoaded(NaturaWorld.PulseId);
}

protected static boolean isOverworldLoaded()
{
protected static boolean isOverworldLoaded () {
return Natura.pulseManager.isPulseLoaded(NaturaOverworld.PulseId);
}

protected static boolean isNetherLoaded()
{
protected static boolean isNetherLoaded () {
return Natura.pulseManager.isPulseLoaded(NaturaNether.PulseId);
}

/**
* Sets the correct unlocalized name and registers the item.
*/
protected static <T extends Item> T registerItem(T item, String name)
{
if (!name.equals(name.toLowerCase(Locale.US)))
{
protected static <T extends Item> T registerItem (T item, String name) {
if (!name.equals(name.toLowerCase(Locale.US))) {
throw new IllegalArgumentException(String.format("Unlocalized names need to be all lowercase! Item: %s", name));
}

Expand All @@ -69,51 +67,43 @@ protected static <T extends Item> T registerItem(T item, String name)
return item;
}

protected static <T extends Block> T registerBlock(T block, String name)
{
protected static <T extends Block> T registerBlock (T block, String name) {
ItemBlock itemBlock = new ItemBlockMeta(block);
registerBlock(block, itemBlock, name);
return block;
}

protected static <T extends EnumBlock<?>> T registerEnumBlock(T block, String name)
{
protected static <T extends EnumBlock<?>> T registerEnumBlock (T block, String name) {
registerBlock(block, new ItemBlockMeta(block), name);
ItemBlockMeta.setMappingProperty(block, block.prop);
return block;
}

protected static <T extends EnumBlockSlab<?>> T registerEnumBlockSlab(T block, String name)
{
protected static <T extends EnumBlockSlab<?>> T registerEnumBlockSlab (T block, String name) {
registerBlock(block, new ItemBlockSlab(block), name);
ItemBlockMeta.setMappingProperty(block, block.prop);
return block;
}

protected static <E extends Enum<E> & EnumBlock.IEnumMeta & IStringSerializable> BlockStairsBase registerBlockStairsFrom(EnumBlock<E> block, E value, String name)
{
protected static <E extends Enum<E> & EnumBlock.IEnumMeta & IStringSerializable> BlockStairsBase registerBlockStairsFrom (EnumBlock<E> block, E value, String name) {
return registerBlock(new BlockStairsBase(block.getDefaultState().withProperty(block.prop, value)), name);
}

@SuppressWarnings("unchecked")
protected static <T extends Block> T registerBlock(ItemBlock itemBlock, String name)
{
protected static <T extends Block> T registerBlock (ItemBlock itemBlock, String name) {
Block block = itemBlock.getBlock();
return (T) registerBlock(block, itemBlock, name);
}

protected static <T extends Block> T registerBlock(T block, String name, IProperty<?> property)
{
protected static <T extends Block> T registerBlock (T block, String name, IProperty<?> property) {
ItemBlockMeta itemBlock = new ItemBlockMeta(block);
registerBlock(block, itemBlock, name);
ItemBlockMeta.setMappingProperty(block, property);
return block;
}

protected static <T extends Block> T registerBlock(T block, ItemBlock itemBlock, String name)
{
if (!name.equals(name.toLowerCase(Locale.US)))
{
protected static <T extends Block> T registerBlock (T block, ItemBlock itemBlock, String name) {
if (!name.equals(name.toLowerCase(Locale.US))) {
throw new IllegalArgumentException(String.format("Unlocalized names need to be all lowercase! Block: %s", name));
}

Expand All @@ -126,10 +116,8 @@ protected static <T extends Block> T registerBlock(T block, ItemBlock itemBlock,
return block;
}

protected static <T extends Block> T registerBlockNoItem(T block, String name)
{
if (!name.equals(name.toLowerCase(Locale.US)))
{
protected static <T extends Block> T registerBlockNoItem (T block, String name) {
if (!name.equals(name.toLowerCase(Locale.US))) {
throw new IllegalArgumentException(String.format("Unlocalized names need to be all lowercase! Block: %s", name));
}

Expand All @@ -140,20 +128,99 @@ protected static <T extends Block> T registerBlockNoItem(T block, String name)
return block;
}

protected static <T extends IForgeRegistryEntry<?>> T register(T thing, String name)
{
protected static <T extends IForgeRegistryEntry<?>> T register (T thing, String name) {
thing.setRegistryName(Util.getResource(name));
GameRegistry.register(thing);
return thing;
}

protected static void registerTE(Class<? extends TileEntity> teClazz, String name)
{
if (!name.equals(name.toLowerCase(Locale.US)))
{
protected static void registerTE (Class<? extends TileEntity> teClazz, String name) {
if (!name.equals(name.toLowerCase(Locale.US))) {
throw new IllegalArgumentException(String.format("Unlocalized names need to be all lowercase! TE: %s", name));
}

GameRegistry.registerTileEntity(teClazz, Util.prefix(name));
}

public void addShapedRecipeFirst (List recipeList, ItemStack itemstack, Object... objArray) {
String var3 = "";
int var4 = 0;
int var5 = 0;
int var6 = 0;

if (objArray[var4] instanceof String[]) {
String[] var7 = ((String[]) objArray[var4++]);

for (int var8 = 0; var8 < var7.length; ++var8) {
String var9 = var7[var8];
++var6;
var5 = var9.length();
var3 = var3 + var9;
}
} else {
while (objArray[var4] instanceof String) {
String var11 = (String) objArray[var4++];
++var6;
var5 = var11.length();
var3 = var3 + var11;
}
}

HashMap var12;

for (var12 = new HashMap(); var4 < objArray.length; var4 += 2) {
Character var13 = (Character) objArray[var4];
ItemStack var14 = null;

if (objArray[var4 + 1] instanceof Item) {
var14 = new ItemStack((Item) objArray[var4 + 1]);
} else if (objArray[var4 + 1] instanceof Block) {
var14 = new ItemStack((Block) objArray[var4 + 1], 1, Short.MAX_VALUE);
} else if (objArray[var4 + 1] instanceof ItemStack) {
var14 = (ItemStack) objArray[var4 + 1];
}

var12.put(var13, var14);
}

ItemStack[] var15 = new ItemStack[var5 * var6];

for (int var16 = 0; var16 < var5 * var6; ++var16) {
char var10 = var3.charAt(var16);

if (var12.containsKey(Character.valueOf(var10))) {
var15[var16] = ((ItemStack) var12.get(Character.valueOf(var10))).copy();
} else {
var15[var16] = null;
}
}

ShapedRecipes var17 = new ShapedRecipes(var5, var6, var15, itemstack);
recipeList.add(0, var17);
}

public void addShapelessRecipeFirst (List recipeList, ItemStack par1ItemStack, Object... par2ArrayOfObj) {
ArrayList arraylist = new ArrayList();
Object[] aobject = par2ArrayOfObj;
int i = par2ArrayOfObj.length;

for (int j = 0; j < i; ++j) {
Object object1 = aobject[j];

if (object1 instanceof ItemStack) {
arraylist.add(((ItemStack) object1).copy());
} else if (object1 instanceof Item) {
arraylist.add(new ItemStack((Item) object1));
} else {
if (!(object1 instanceof Block)) {
throw new RuntimeException("Invalid shapeless recipe!");
}

arraylist.add(new ItemStack((Block) object1));
}
}

recipeList.add(0, new ShapelessRecipes(par1ItemStack, arraylist));
}

}
54 changes: 32 additions & 22 deletions src/main/java/com/progwml6/natura/overworld/NaturaOverworld.java
@@ -1,8 +1,5 @@
package com.progwml6.natura.overworld;

import net.minecraftforge.fml.common.registry.GameRegistry;
import org.apache.logging.log4j.Logger;

import com.google.common.eventbus.Subscribe;
import com.progwml6.natura.common.CommonProxy;
import com.progwml6.natura.common.NaturaPulse;
Expand All @@ -25,19 +22,22 @@
import com.progwml6.natura.overworld.block.slabs.BlockOverworldSlab;
import com.progwml6.natura.overworld.block.slabs.BlockOverworldSlab2;
import com.progwml6.natura.shared.NaturaCommons;

import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraftforge.fml.common.SidedProxy;
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.registry.GameRegistry;
import org.apache.logging.log4j.Logger;
import slimeknights.mantle.item.ItemBlockMeta;
import slimeknights.mantle.pulsar.pulse.Pulse;

import java.util.List;

@Pulse(id = NaturaOverworld.PulseId, description = "All of the overworld blocks including trees")
public class NaturaOverworld extends NaturaPulse
{
public class NaturaOverworld extends NaturaPulse {
public static final String PulseId = "NaturaOverworld";

static final Logger log = Util.getLogger(PulseId);
Expand Down Expand Up @@ -83,8 +83,7 @@ public class NaturaOverworld extends NaturaPulse
//@formatter:on

@Subscribe
public void preInit(FMLPreInitializationEvent event)
{
public void preInit (FMLPreInitializationEvent event) {
coloredGrass = registerEnumBlock(new BlockColoredGrass(), "colored_grass");
coloredGrassSlab = registerEnumBlockSlab(new BlockColoredGrassSlab(), "colored_grass_slab");

Expand Down Expand Up @@ -129,29 +128,40 @@ public void preInit(FMLPreInitializationEvent event)
}

@Subscribe
public void init(FMLInitializationEvent event)
{
public void init (FMLInitializationEvent event) {
proxy.init();
registerRecipes();
}

@Subscribe
public void postInit(FMLPostInitializationEvent event)
{
public void postInit (FMLPostInitializationEvent event) {
proxy.postInit();
}

private void registerRecipes() {
private void registerRecipes () {
List recipes = CraftingManager.getInstance().getRecipeList();
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.MAPLE.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog.LogType.MAPLE.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.SILVERBELL.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog.LogType.SILVERBELL.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.AMARANTH.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog.LogType.AMARANTH.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.SILVERBELL.getMeta()), "w", 'w',
new ItemStack(overworldLog, 1, BlockOverworldLog.LogType.SILVERBELL.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.AMARANTH.getMeta()), "w", 'w',
new ItemStack(overworldLog, 1, BlockOverworldLog.LogType.AMARANTH.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.TIGER.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog.LogType.TIGER.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.WILLOW.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog2.LogType.WILLOW.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.EUCALYPTUS.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog2.LogType.EUCALYPTUS.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.HOPSEED.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog2.LogType.HOPSEED.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.SAKURA.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog2.LogType.SAKURA.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.REDWOOD.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockRedwoodLog.RedwoodType.BARK.getMeta()));
//TODO 1.10 are we missing redwood log > planks??
GameRegistry
.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.WILLOW.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog2.LogType.WILLOW.getMeta()));
GameRegistry.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.EUCALYPTUS.getMeta()), "w", 'w',
new ItemStack(overworldLog, 1, BlockOverworldLog2.LogType.EUCALYPTUS.getMeta()));
GameRegistry
.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.HOPSEED.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog2.LogType.HOPSEED.getMeta()));
GameRegistry
.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.SAKURA.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockOverworldLog2.LogType.SAKURA.getMeta()));
GameRegistry
.addRecipe(new ItemStack(overworldPlanks, 4, BlockOverworldPlanks.PlankType.REDWOOD.getMeta()), "w", 'w', new ItemStack(overworldLog, 1, BlockRedwoodLog.RedwoodType.HEART.getMeta()));
//TODO test these
for (int i = 0; i < 8; i++)
addShapedRecipeFirst(recipes, new ItemStack(overworldSlab, 6, i), "###", '#', new ItemStack(overworldPlanks, 1, i));
for (int i = 0; i < 5; i++)
addShapedRecipeFirst(recipes, new ItemStack(overworldSlab2, 6, i), "###", '#', new ItemStack(overworldPlanks, 1, 8 + i));


}
}
}

0 comments on commit 0f77588

Please sign in to comment.