mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-11-13 16:54:06 +00:00
Added Crafting Patterns.
This commit is contained in:
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",
|
||||
|
||||
Reference in new issue
Block a user