Added Crafting Patterns.

This commit is contained in:
Lizbeth Rika committed 2015-01-28 16:14:35 +00:00
1 parent 4493f3b090
commit 8bab409d74
27 files changed
+218 -17

No files matched your search

@@ -24,6 +24,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
@@ -44,6 +45,8 @@ public class BlockOpenCrate extends BlockModContainer implements ILexiconable, I
IIcon iconSideCraft;
IIcon iconBottomCraft;
IIcon[] sidePatternIcons;
Random random;
private static final int SUBTYPES = 2;
@@ -135,6 +138,10 @@ public class BlockOpenCrate extends BlockModContainer implements ILexiconable, I
iconBottom = IconHelper.forBlock(par1IconRegister, this, 1);
iconSideCraft = IconHelper.forBlock(par1IconRegister, this, 2);
iconBottomCraft = IconHelper.forBlock(par1IconRegister, this, 3);
sidePatternIcons = new IIcon[TileCraftCrate.PATTERNS.length];
for(int i = 0; i < sidePatternIcons.length; i++)
sidePatternIcons[i] = IconHelper.forName(par1IconRegister, "ocPattern" + i);
}
@Override
@@ -142,6 +149,15 @@ public class BlockOpenCrate extends BlockModContainer implements ILexiconable, I
return meta == 0 ? side == 0 ? iconBottom : iconSide : side == 0 ? iconBottomCraft : iconSideCraft;
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
TileEntity tile = world.getTileEntity(x, y, z);
if(tile != null && tile instanceof TileCraftCrate && ((TileCraftCrate) tile).pattern != -1 && side != 0)
return sidePatternIcons[((TileCraftCrate) tile).pattern];
return super.getIcon(world, x, y, z, side);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return meta == 0 ? new TileOpenCrate() : new TileCraftCrate();
@@ -18,10 +18,56 @@ import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import vazkii.botania.common.item.ModItems;
public class TileCraftCrate extends TileOpenCrate {
public static final boolean[][] PATTERNS = new boolean[][] {
{
true, false, false,
false, false, false,
false, false, false
}, {
true, true, false,
true, true, false,
false, false, false
}, {
true, false, false,
true, false, false,
false, false, false
}, {
true, true, false,
false, false, false,
false, false, false
}, {
true, false, false,
true, false, false,
true, false, false
}, {
true, true, true,
false, false, false,
false, false, false
}, {
true, true, false,
true, true, false,
true, true, false
}, {
true, true, true,
true, true, true,
false, false, false
}, {
true, true, true,
true, false, true,
true, true, true
}
};
private static final String TAG_PATTERN = "pattern";
public int pattern = -1;
int signal = 0;
@Override
@@ -36,9 +82,13 @@ public class TileCraftCrate extends TileOpenCrate {
@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack) {
return i != 9;
return i != 9 && !isLocked(i);
}
public boolean isLocked(int slot) {
return pattern != -1 && !PATTERNS[pattern][slot];
}
@Override
public void updateEntity() {
if(!worldObj.isRemote && craft(true) && canEject())
@@ -46,7 +96,7 @@ public class TileCraftCrate extends TileOpenCrate {
int newSignal = 0;
for(; newSignal < 9; newSignal++) // dis for loop be derpy
if(getStackInSlot(newSignal) == null)
if(!isLocked(newSignal) && getStackInSlot(newSignal) == null)
break;
if(newSignal != signal) {
@@ -68,7 +118,7 @@ public class TileCraftCrate extends TileOpenCrate {
for(int i = 0; i < 9; i++) {
ItemStack stack = getStackInSlot(i);
if(stack == null || stack.getItem() == ModItems.manaResource && stack.getItemDamage() == 11)
if(stack == null || isLocked(i) || stack.getItem() == ModItems.manaResource && stack.getItemDamage() == 11)
continue;
craft.setInventorySlotContents(i, stack.copy());
@@ -95,7 +145,7 @@ public class TileCraftCrate extends TileOpenCrate {
boolean isFull() {
for(int i = 0; i < 9; i++)
if(getStackInSlot(i) == null)
if(!isLocked(i) && getStackInSlot(i) == null)
return false;
return true;
@@ -109,7 +159,19 @@ public class TileCraftCrate extends TileOpenCrate {
setInventorySlotContents(i, null);
}
}
@Override
public void writeCustomNBT(NBTTagCompound par1nbtTagCompound) {
super.writeCustomNBT(par1nbtTagCompound);
par1nbtTagCompound.setInteger(TAG_PATTERN, pattern);
}
@Override
public void readCustomNBT(NBTTagCompound par1nbtTagCompound) {
super.readCustomNBT(par1nbtTagCompound);
pattern = par1nbtTagCompound.getInteger(TAG_PATTERN);
}
@Override
public boolean onWanded(EntityPlayer player, ItemStack stack) {
craft(false);
@@ -121,4 +183,12 @@ public class TileCraftCrate extends TileOpenCrate {
public int getSignal() {
return signal;
}
@Override
public void onDataPacket(NetworkManager manager, S35PacketUpdateTileEntity packet) {
int lastPattern = pattern;
super.onDataPacket(manager, packet);
if(pattern != lastPattern)
worldObj.markBlockRangeForRenderUpdate(xCoord,yCoord,zCoord,xCoord,yCoord,zCoord);
}
}
@@ -106,6 +106,7 @@ public final class BotaniaCreativeTab extends CreativeTabs {
addBlock(ModBlocks.livingrock);
addBlock(ModBlocks.livingwood);
addBlock(ModBlocks.openCrate);
addItem(ModItems.craftPattern);
addBlock(ModBlocks.platform);
addBlock(ModBlocks.alfPortal);
addBlock(ModBlocks.altar);
@@ -10,6 +10,8 @@
*/
package vazkii.botania.common.crafting;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import net.minecraft.block.Block;
@@ -25,6 +27,7 @@ import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.block.tile.TileCraftCrate;
import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.item.ItemSignalFlare;
import vazkii.botania.common.item.ItemTwigWand;
@@ -221,6 +224,7 @@ public final class ModCraftingRecipes {
public static IRecipe recipeSpellCloth;
public static IRecipe recipeThornChakram;
public static IRecipe recipeDirtPathSlab;
public static List<IRecipe> recipesPatterns;
public static void init() {
// Lexicon Recipe
@@ -1393,13 +1397,13 @@ public final class ModCraftingRecipes {
// Trodden Dirt Recipe
GameRegistry.addShapelessRecipe(new ItemStack(ModBlocks.dirtPath, 4), new ItemStack(Blocks.dirt, 1, 1), new ItemStack(Blocks.dirt, 1, 1), new ItemStack(Blocks.dirt, 1, 1), new ItemStack(Blocks.sand));
recipeDirtPath = BotaniaAPI.getLatestAddedRecipe();
// Dreamwood Twig Recipe
addOreDictRecipe(new ItemStack(ModItems.manaResource, 1, 13),
"W", "W",
'W', LibOreDict.DREAM_WOOD);
recipeDreamwoodTwig = BotaniaAPI.getLatestAddedRecipe();
// Manaseer Monocle Recipe
addOreDictRecipe(new ItemStack(ModItems.monocle),
"GN", "IN", " N",
@@ -1407,13 +1411,13 @@ public final class ModCraftingRecipes {
'I', LibOreDict.MANA_STEEL,
'N', new ItemStack(Items.gold_nugget));
recipeMonocle = BotaniaAPI.getLatestAddedRecipe();
// Lens Clip Recipe
addOreDictRecipe(new ItemStack(ModItems.clip),
" D ", "D D", "DD ",
'D', LibOreDict.DREAM_WOOD);
recipeClip = BotaniaAPI.getLatestAddedRecipe();
// Rod of the Depths Recipe
addOreDictRecipe(new ItemStack(ModItems.cobbleRod),
" FC", " TW", "T ",
@@ -1422,7 +1426,7 @@ public final class ModCraftingRecipes {
'T', LibOreDict.LIVINGWOOD_TWIG,
'C', new ItemStack(Blocks.cobblestone));
recipeCobbleRod = BotaniaAPI.getLatestAddedRecipe();
// Rod of the Molten Core Recipe
addOreDictRecipe(new ItemStack(ModItems.smeltRod),
" BF", " TB", "T ",
@@ -1430,7 +1434,7 @@ public final class ModCraftingRecipes {
'F', LibOreDict.RUNE[1],
'T', LibOreDict.LIVINGWOOD_TWIG);
recipeSmeltRod = BotaniaAPI.getLatestAddedRecipe();
// World Seed Recipe
addOreDictRecipe(new ItemStack(ModItems.worldSeed, 4),
"G", "S", "D",
@@ -1438,27 +1442,51 @@ public final class ModCraftingRecipes {
'S', new ItemStack(Items.wheat_seeds),
'D', LibOreDict.DRAGONSTONE);
recipeWorldSeed = BotaniaAPI.getLatestAddedRecipe();
// Spellbinding Cloth Recipe
addOreDictRecipe(new ItemStack(ModItems.spellCloth),
"WWW", "WPW", "WWW",
'W', new ItemStack(Blocks.wool, 1, -1),
'P', LibOreDict.MANA_PEARL);
recipeSpellCloth = BotaniaAPI.getLatestAddedRecipe();
// Thorn Chakram Recipe
addOreDictRecipe(new ItemStack(ModItems.thornChakram),
"VVV", "VTV", "VVV",
'V', new ItemStack(Blocks.vine),
'T', LibOreDict.TERRA_STEEL);
recipeThornChakram = BotaniaAPI.getLatestAddedRecipe();
// Trodden Dirt Slab
GameRegistry.addRecipe(new ItemStack(ModFluffBlocks.dirtPathSlab, 6),
"DDD",
'D', new ItemStack(ModBlocks.dirtPath));
recipeDirtPathSlab = BotaniaAPI.getLatestAddedRecipe();
// Pattern Recipes
{
int count = TileCraftCrate.PATTERNS.length;
List<Object> recipeObjects = Arrays.asList(
'R', new ItemStack(Items.redstone),
'P', LibOreDict.PLACEHOLDER
);
for(int i = 0; i < count; i++) {
List<Object> recipe = new ArrayList();
for(int j = 0; j < 3; j++) {
String s = "";
for(int k = 0; k < 3; k++)
s += TileCraftCrate.PATTERNS[i][j * 3 + k] ? "R" : "P";
recipe.add(s);
}
recipe.addAll(recipeObjects);
addOreDictRecipe(new ItemStack(ModItems.craftPattern, 1, i), recipe.toArray(new Object[recipe.size()]));
}
recipesPatterns = BotaniaAPI.getLatestAddedRecipes(count);
}
// Storage Block Recipes
addOreDictRecipe(new ItemStack(ModBlocks.storage, 1, 0),
"III", "III", "III",
@@ -1480,7 +1508,7 @@ public final class ModCraftingRecipes {
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.manaResource, 9, 7), new ItemStack(ModBlocks.storage, 1, 2));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.manaResource, 9, 2), new ItemStack(ModBlocks.storage, 1, 3));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.manaResource, 9, 9), new ItemStack(ModBlocks.storage, 1, 4));
// Revealing Helmet Recipes
if(Botania.thaumcraftLoaded) {
Item goggles = (Item) Item.itemRegistry.getObject("Thaumcraft:ItemGoggles");
@@ -0,0 +1,72 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under a
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
*
* File Created @ [Jan 28, 2015, 2:59:06 PM (GMT)]
*/
package vazkii.botania.common.item;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.block.tile.TileCraftCrate;
import vazkii.botania.common.lib.LibItemNames;
public class ItemCraftPattern extends ItemMod {
IIcon[] icons;
public ItemCraftPattern() {
setHasSubtypes(true);
setUnlocalizedName(LibItemNames.CRAFT_PATTERN);
setMaxStackSize(1);
}
@Override
public boolean onItemUse(ItemStack stack, EntityPlayer p, World world, int x, int y, int z, int s, float xs, float ys, float zs) {
TileEntity tile = world.getTileEntity(x, y, z);
if(tile != null && tile instanceof TileCraftCrate && !world.isRemote) {
TileCraftCrate crate = (TileCraftCrate) tile;
crate.pattern = stack.getItemDamage();
world.markBlockForUpdate(x, y, z);
}
return false;
}
@Override
public void getSubItems(Item item, CreativeTabs tab, List list) {
for(int i = 0; i < TileCraftCrate.PATTERNS.length; i++)
list.add(new ItemStack(item, 1, i));
}
@Override
public void registerIcons(IIconRegister par1IconRegister) {
icons = new IIcon[TileCraftCrate.PATTERNS.length];
for(int i = 0; i < icons.length; i++)
icons[i] = IconHelper.forItem(par1IconRegister, this, i);
}
@Override
public IIcon getIconFromDamage(int dmg) {
return icons[Math.min(icons.length - 1, dmg)];
}
@Override
public String getUnlocalizedName(ItemStack par1ItemStack) {
return super.getUnlocalizedName(par1ItemStack) + par1ItemStack.getItemDamage();
}
}
@@ -199,6 +199,7 @@ public final class ModItems {
public static Item spellCloth;
public static Item thornChakram;
public static Item overgrowthSeed;
public static Item craftPattern;
public static void init() {
lexicon = new ItemLexicon();
@@ -306,6 +307,7 @@ public final class ModItems {
spellCloth = new ItemSpellCloth();
thornChakram = new ItemThornChakram();
overgrowthSeed = new ItemOvergrowthSeed();
craftPattern = new ItemCraftPattern();
OreDictionary.registerOre(LibOreDict.LEXICON, lexicon);
for(int i = 0; i < 16; i++) {
@@ -483,7 +483,7 @@ public final class LexiconData {
spawnerClaw.setLexiconPages(new PageText("0"), new PageText("1"), new PageCraftingRecipe("2", ModCraftingRecipes.recipeSpawnerClaw));
craftCrate = new ALexiconEntry(LibLexicon.DEVICE_CRAFT_CRATE, categoryDevices);
craftCrate.setLexiconPages(new PageText("0"), new PageText("1"), new PageCraftingRecipe("2", ModCraftingRecipes.recipePlaceholder), new PageText("3"), new PageText("4"), new PageText("7"), new PageImage("5", LibResources.ENTRY_CRAFT_CRATE), new PageCraftingRecipe("6", ModCraftingRecipes.recipeCraftCrate));
craftCrate.setLexiconPages(new PageText("0"), new PageText("1"), new PageCraftingRecipe("2", ModCraftingRecipes.recipePlaceholder), new PageText("3"), new PageText("4"), new PageText("7"), new PageImage("5", LibResources.ENTRY_CRAFT_CRATE), new PageCraftingRecipe("6", ModCraftingRecipes.recipeCraftCrate), new PageText("7"), new PageCraftingRecipe("8", ModCraftingRecipes.recipesPatterns));
enderEyeBlock = new BLexiconEntry(LibLexicon.DEVICE_ENDER_EYE_BLOCK, categoryDevices);
enderEyeBlock.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeEnderEyeBlock));
@@ -118,6 +118,7 @@ public final class LibItemNames {
public static final String SPELL_CLOTH = "spellCloth";
public static final String THORN_CHAKRAM = "thornChakram";
public static final String OVERGROWTH_SEED = "overgrowthSeed";
public static final String CRAFT_PATTERN = "craftPattern";
public static final String[] LENS_NAMES = new String[] {
"lensNormal",