From 0f77588ebfa968147d827057373514337ae02e5c Mon Sep 17 00:00:00 2001 From: Progwml6 Date: Mon, 19 Sep 2016 22:12:47 -0400 Subject: [PATCH] Add recipe helpers to base pulse class --- .../progwml6/natura/common/NaturaPulse.java | 153 +++++++++++++----- .../natura/overworld/NaturaOverworld.java | 54 ++++--- 2 files changed, 142 insertions(+), 65 deletions(-) diff --git a/src/main/java/com/progwml6/natura/common/NaturaPulse.java b/src/main/java/com/progwml6/natura/common/NaturaPulse.java index a1170672..9a067ea8 100644 --- a/src/main/java/com/progwml6/natura/common/NaturaPulse.java +++ b/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; @@ -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. * @@ -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 registerItem(T item, String name) - { - if (!name.equals(name.toLowerCase(Locale.US))) - { + protected static 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)); } @@ -69,51 +67,43 @@ protected static T registerItem(T item, String name) return item; } - protected static T registerBlock(T block, String name) - { + protected static T registerBlock (T block, String name) { ItemBlock itemBlock = new ItemBlockMeta(block); registerBlock(block, itemBlock, name); return block; } - protected static > T registerEnumBlock(T block, String name) - { + protected static > T registerEnumBlock (T block, String name) { registerBlock(block, new ItemBlockMeta(block), name); ItemBlockMeta.setMappingProperty(block, block.prop); return block; } - protected static > T registerEnumBlockSlab(T block, String name) - { + protected static > T registerEnumBlockSlab (T block, String name) { registerBlock(block, new ItemBlockSlab(block), name); ItemBlockMeta.setMappingProperty(block, block.prop); return block; } - protected static & EnumBlock.IEnumMeta & IStringSerializable> BlockStairsBase registerBlockStairsFrom(EnumBlock block, E value, String name) - { + protected static & EnumBlock.IEnumMeta & IStringSerializable> BlockStairsBase registerBlockStairsFrom (EnumBlock block, E value, String name) { return registerBlock(new BlockStairsBase(block.getDefaultState().withProperty(block.prop, value)), name); } @SuppressWarnings("unchecked") - protected static T registerBlock(ItemBlock itemBlock, String name) - { + protected static T registerBlock (ItemBlock itemBlock, String name) { Block block = itemBlock.getBlock(); return (T) registerBlock(block, itemBlock, name); } - protected static T registerBlock(T block, String name, IProperty property) - { + protected static 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 registerBlock(T block, ItemBlock itemBlock, String name) - { - if (!name.equals(name.toLowerCase(Locale.US))) - { + protected static 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)); } @@ -126,10 +116,8 @@ protected static T registerBlock(T block, ItemBlock itemBlock, return block; } - protected static T registerBlockNoItem(T block, String name) - { - if (!name.equals(name.toLowerCase(Locale.US))) - { + protected static 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)); } @@ -140,20 +128,99 @@ protected static T registerBlockNoItem(T block, String name) return block; } - protected static > T register(T thing, String name) - { + protected static > T register (T thing, String name) { thing.setRegistryName(Util.getResource(name)); GameRegistry.register(thing); return thing; } - protected static void registerTE(Class teClazz, String name) - { - if (!name.equals(name.toLowerCase(Locale.US))) - { + protected static void registerTE (Class 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)); + } + } diff --git a/src/main/java/com/progwml6/natura/overworld/NaturaOverworld.java b/src/main/java/com/progwml6/natura/overworld/NaturaOverworld.java index ac8d2827..21c7832c 100644 --- a/src/main/java/com/progwml6/natura/overworld/NaturaOverworld.java +++ b/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; @@ -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); @@ -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"); @@ -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)); + } - } +}