Readded planks
|
@ -8,18 +8,59 @@
|
|||
|
||||
package biomesoplenty.api.block;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import biomesoplenty.api.IConfigurable;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public abstract class BOPBlock extends Block implements IConfigurable
|
||||
{
|
||||
protected BOPBlock(Material material)
|
||||
private final PropertyEnum variantProperty;
|
||||
|
||||
protected BOPBlock(Material material, PropertyEnum variantProperty)
|
||||
{
|
||||
super(material);
|
||||
|
||||
this.variantProperty = variantProperty;
|
||||
}
|
||||
|
||||
protected BOPBlock(Material material)
|
||||
{
|
||||
this(material, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubBlocks(Item item, CreativeTabs tab, List list)
|
||||
{
|
||||
if (hasVariants())
|
||||
{
|
||||
for (Enum value : getVariants())
|
||||
{
|
||||
list.add(new ItemStack(item, 1, value.ordinal()));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
list.add(new ItemStack(item, 1, 0));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(IBlockState state)
|
||||
{
|
||||
return this.getMetaFromState(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
//TODO: Account for configurations (which are provided by Forge and thus, cannot be done at this time)
|
||||
public boolean isEnabled(Object... args)
|
||||
|
@ -33,4 +74,24 @@ public abstract class BOPBlock extends Block implements IConfigurable
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
public final boolean hasVariants()
|
||||
{
|
||||
return variantProperty != null;
|
||||
}
|
||||
|
||||
public final PropertyEnum getVariantProperty()
|
||||
{
|
||||
return variantProperty;
|
||||
}
|
||||
|
||||
public final Collection<Enum> getVariants()
|
||||
{
|
||||
return (Collection<Enum>)variantProperty.getAllowedValues();
|
||||
}
|
||||
|
||||
public final Enum getVariantFromMeta(int metadata)
|
||||
{
|
||||
return (Enum)this.getStateFromMeta(metadata).getValue(variantProperty);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,4 +13,5 @@ import net.minecraft.block.Block;
|
|||
public class BOPBlocks
|
||||
{
|
||||
public static Block ash_block;
|
||||
public static Block planks;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.asm;
|
||||
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
|
||||
public class ASMUtil
|
||||
{
|
||||
public static ClassNode getClassNode(byte[] classBytes)
|
||||
{
|
||||
ClassReader reader = new ClassReader(classBytes);
|
||||
ClassNode node = new ClassNode();
|
||||
reader.accept(node, 0);
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
public static byte[] getBytes(ClassNode classNode)
|
||||
{
|
||||
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
|
||||
classNode.accept(writer);
|
||||
|
||||
return writer.toByteArray();
|
||||
}
|
||||
|
||||
public static MethodNode getMethodNode(ClassNode classNode, String methodName, String desc)
|
||||
{
|
||||
for (MethodNode method : classNode.methods)
|
||||
{
|
||||
if (method.name.equals(methodName) && method.desc.equals(desc)) return method;
|
||||
}
|
||||
|
||||
throw new RuntimeException(methodName + " doesn't exist in " + classNode.name + "!");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.asm;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
|
||||
|
||||
//TODO: Remove this or the ModelBakeryTransformer. It shouldn't be needed.
|
||||
public class BOPLoadingPlugin implements IFMLLoadingPlugin
|
||||
{
|
||||
@Override
|
||||
public String[] getASMTransformerClass()
|
||||
{
|
||||
return new String[] { ModelBakeryTransformer.class.getName() };
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModContainerClass()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSetupClass()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectData(Map<String, Object> data)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTransformerClass()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.asm;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.objectweb.asm.tree.AbstractInsnNode;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import org.objectweb.asm.tree.FieldInsnNode;
|
||||
import org.objectweb.asm.tree.InsnList;
|
||||
import org.objectweb.asm.tree.MethodInsnNode;
|
||||
import org.objectweb.asm.tree.MethodNode;
|
||||
import org.objectweb.asm.tree.VarInsnNode;
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
|
||||
public class ModelBakeryTransformer implements IClassTransformer
|
||||
{
|
||||
@Override
|
||||
public byte[] transform(String name, String transformedName, byte[] basicClass)
|
||||
{
|
||||
if (name.equals("net.minecraft.client.resources.model.ModelBakery"))
|
||||
{
|
||||
ClassNode classNode = ASMUtil.getClassNode(basicClass);
|
||||
MethodNode variantsMethodNode = ASMUtil.getMethodNode(classNode, "registerVariantNames", "()V");
|
||||
|
||||
InsnList instructions = new InsnList();
|
||||
|
||||
instructions.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
instructions.add(new FieldInsnNode(Opcodes.GETFIELD, "net/minecraft/client/resources/model/ModelBakery", "variantNames", "Ljava/util/Map;"));
|
||||
instructions.add(new FieldInsnNode(Opcodes.GETSTATIC, "biomesoplenty/client/util/ModelHelper", "customVariantNames", "Ljava/util/HashMap;"));
|
||||
instructions.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "java/util/Map", "putAll", "(Ljava/util/Map;)V", true));
|
||||
|
||||
variantsMethodNode.instructions.insertBefore(getRegisterVariantsInsertionPoint(variantsMethodNode), instructions);
|
||||
|
||||
return ASMUtil.getBytes(classNode);
|
||||
}
|
||||
|
||||
return basicClass;
|
||||
}
|
||||
|
||||
private AbstractInsnNode getRegisterVariantsInsertionPoint(MethodNode methodNode)
|
||||
{
|
||||
Iterator<AbstractInsnNode> iterator = methodNode.instructions.iterator();
|
||||
AbstractInsnNode returnNode = null;
|
||||
|
||||
while (iterator.hasNext())
|
||||
{
|
||||
AbstractInsnNode currentNode = iterator.next();
|
||||
|
||||
if (currentNode.getOpcode() == Opcodes.RETURN) returnNode = currentNode;
|
||||
}
|
||||
|
||||
if (returnNode != null) return returnNode;
|
||||
|
||||
throw new RuntimeException("The insertion point for registerVariantsNames() in ModelBakery was not found");
|
||||
}
|
||||
}
|
|
@ -8,9 +8,19 @@
|
|||
|
||||
package biomesoplenty.client.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import biomesoplenty.api.block.BOPBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.BlockModelShapes;
|
||||
import net.minecraft.client.renderer.ItemModelMesher;
|
||||
import net.minecraft.client.renderer.block.statemap.StateMap;
|
||||
import net.minecraft.client.resources.model.ModelBakery;
|
||||
import net.minecraft.client.resources.model.ModelResourceLocation;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
|
@ -19,6 +29,14 @@ import net.minecraftforge.fml.relauncher.SideOnly;
|
|||
@SideOnly(Side.CLIENT)
|
||||
public class ModelHelper
|
||||
{
|
||||
public static HashMap<Item, ArrayList<String>> customVariantNames = new HashMap();
|
||||
|
||||
public static void addVariantName(Item item, String... names)
|
||||
{
|
||||
if (customVariantNames.containsKey(item)) customVariantNames.get(item).addAll(Arrays.asList(names));
|
||||
else customVariantNames.put(item, Lists.newArrayList(names));
|
||||
}
|
||||
|
||||
public static void registerItem(Item item, int metadata, String itemName)
|
||||
{
|
||||
getItemModelMesher().register(item, metadata, new ModelResourceLocation(itemName, "inventory"));
|
||||
|
@ -43,4 +61,14 @@ public class ModelHelper
|
|||
{
|
||||
return Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
|
||||
}
|
||||
|
||||
public static void regsiterBlockVariants(BOPBlock block, String name)
|
||||
{
|
||||
getBlockModelShapes().func_178121_a(block, (new StateMap.Builder()).func_178440_a(block.getVariantProperty()).func_178439_a("_" + name).build());
|
||||
}
|
||||
|
||||
public static BlockModelShapes getBlockModelShapes()
|
||||
{
|
||||
return getItemModelMesher().getModelManager().getBlockModelShapes();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.block;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.IProperty;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockState;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
import biomesoplenty.api.block.BOPBlock;
|
||||
import biomesoplenty.common.util.inventory.CreativeTabBOP;
|
||||
|
||||
//TODO: Commented methods and calls
|
||||
public class BOPBlockPlanks extends BOPBlock
|
||||
{
|
||||
public static PropertyEnum VARIANT_PROP = PropertyEnum.create("variant", PlankType.class);
|
||||
|
||||
public BOPBlockPlanks()
|
||||
{
|
||||
super(Material.wood, VARIANT_PROP);
|
||||
|
||||
this.setDefaultBlockState(this.blockState.getBaseState().withProperty(VARIANT_PROP, PlankType.SACRED_OAK));
|
||||
|
||||
this.setHardness(2.0F);
|
||||
//this.setHarvestLevel("axe", 0);
|
||||
this.setStepSound(Block.soundTypeWood);
|
||||
this.setCreativeTab(CreativeTabBOP.instance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBlockState getStateFromMeta(int meta)
|
||||
{
|
||||
return this.getDefaultState().withProperty(VARIANT_PROP, PlankType.values()[meta]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetaFromState(IBlockState state)
|
||||
{
|
||||
return ((PlankType)state.getValue(VARIANT_PROP)).ordinal();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockState createBlockState()
|
||||
{
|
||||
return new BlockState(this, new IProperty[] { VARIANT_PROP });
|
||||
}
|
||||
|
||||
public static enum PlankType implements IStringSerializable
|
||||
{
|
||||
SACRED_OAK,
|
||||
CHERRY,
|
||||
DARK,
|
||||
FIR,
|
||||
ETHEREAL,
|
||||
MAGIC,
|
||||
MANGROVE,
|
||||
PALM,
|
||||
REDWOOD,
|
||||
WILLOW,
|
||||
BAMBOO_THATCHING,
|
||||
PINE,
|
||||
HELL_BARK,
|
||||
JACARANDA,
|
||||
MAHOGANY;
|
||||
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
return this.name().toLowerCase();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.block;
|
||||
|
||||
import net.minecraft.block.BlockLog;
|
||||
|
||||
public class BlockBOPLog extends BlockLog
|
||||
{
|
||||
public BlockBOPLog()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -9,9 +9,16 @@
|
|||
package biomesoplenty.common.init;
|
||||
|
||||
import static biomesoplenty.api.block.BOPBlocks.ash_block;
|
||||
import static biomesoplenty.api.block.BOPBlocks.planks;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
import biomesoplenty.api.block.BOPBlock;
|
||||
import biomesoplenty.client.util.ModelHelper;
|
||||
import biomesoplenty.common.block.BOPBlockPlanks;
|
||||
import biomesoplenty.common.block.BlockAsh;
|
||||
import biomesoplenty.common.item.ItemBlockWithVariants;
|
||||
import biomesoplenty.common.util.RegistryUtil;
|
||||
import biomesoplenty.core.BiomesOPlenty;
|
||||
|
||||
|
@ -22,16 +29,31 @@ public class ModBlocks
|
|||
public static void init()
|
||||
{
|
||||
ash_block = registerBlock(new BlockAsh(), "ash_block");
|
||||
planks = registerBlock(new BOPBlockPlanks(), "planks");
|
||||
}
|
||||
|
||||
private static Block registerBlock(Block block, String name)
|
||||
private static Block registerBlock(BOPBlock block, String name)
|
||||
{
|
||||
block.setUnlocalizedName(name);
|
||||
block = RegistryUtil.registerBlock(block, name);
|
||||
|
||||
for (IBlockState state : (ImmutableList<IBlockState>)block.getBlockState().getValidStates())
|
||||
|
||||
if (block.hasVariants())
|
||||
{
|
||||
BiomesOPlenty.proxy.registerBlockForMeshing(block, block.getMetaFromState(state), name);
|
||||
RegistryUtil.registerBlock(block, ItemBlockWithVariants.class, name);
|
||||
|
||||
for (Enum variant : block.getVariants())
|
||||
{
|
||||
String variantName = ((IStringSerializable)variant).getName() + "_" + name;
|
||||
|
||||
ModelHelper.addVariantName(Item.getItemFromBlock(block), BiomesOPlenty.MOD_ID + ":" + variantName);
|
||||
BiomesOPlenty.proxy.registerBlockForMeshing(block, variant.ordinal(), variantName);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RegistryUtil.registerBlock(block, name);
|
||||
|
||||
ModelHelper.addVariantName(Item.getItemFromBlock(block), BiomesOPlenty.MOD_ID + ":" + name);
|
||||
BiomesOPlenty.proxy.registerBlockForMeshing(block, 0, name);
|
||||
}
|
||||
|
||||
return block;
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.item;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
import biomesoplenty.api.block.BOPBlock;
|
||||
|
||||
public class ItemBlockWithVariants extends ItemBlock
|
||||
{
|
||||
public ItemBlockWithVariants(Block block)
|
||||
{
|
||||
super(block);
|
||||
|
||||
this.setMaxDurability(0);
|
||||
this.setHasSubtypes(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetadata(int metadata)
|
||||
{
|
||||
return metadata;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack)
|
||||
{
|
||||
BOPBlock bopBlock = (BOPBlock)this.blockInstance;
|
||||
|
||||
if (bopBlock.hasVariants())
|
||||
{
|
||||
Enum variant = bopBlock.getVariantFromMeta(stack.getMetadata());
|
||||
|
||||
return super.getUnlocalizedName() + "." + ((IStringSerializable)variant).getName();
|
||||
}
|
||||
else return super.getUnlocalizedName();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
/*******************************************************************************
|
||||
* Copyright 2014, the Biomes O' Plenty Team
|
||||
*
|
||||
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
||||
*
|
||||
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
||||
******************************************************************************/
|
||||
|
||||
package biomesoplenty.common.util;
|
||||
|
||||
public class ReflectionHelper
|
||||
{
|
||||
//Various fields used in Reflection. These should be checked with every update.
|
||||
}
|
|
@ -9,9 +9,10 @@
|
|||
package biomesoplenty.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import biomesoplenty.api.block.BOPBlock;
|
||||
import biomesoplenty.client.util.ModelHelper;
|
||||
|
||||
public class ClientProxy extends CommonProxy
|
||||
|
@ -23,25 +24,25 @@ public class ClientProxy extends CommonProxy
|
|||
{
|
||||
for (ModelEntry modelEntry : blocksToRegister)
|
||||
{
|
||||
ModelHelper.registerItem(modelEntry.item, modelEntry.metadata, BiomesOPlenty.MOD_ID + ":" + modelEntry.name);
|
||||
ModelHelper.registerBlock(modelEntry.block, modelEntry.metadata, BiomesOPlenty.MOD_ID + ":" + modelEntry.name);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockForMeshing(Block block, int metadata, String name)
|
||||
public void registerBlockForMeshing(BOPBlock block, int metadata, String name)
|
||||
{
|
||||
blocksToRegister.add(new ModelEntry(Item.getItemFromBlock(block), metadata, name));
|
||||
blocksToRegister.add(new ModelEntry(block, metadata, name));
|
||||
}
|
||||
|
||||
private static class ModelEntry
|
||||
{
|
||||
public Item item;
|
||||
public BOPBlock block;
|
||||
public int metadata;
|
||||
public String name;
|
||||
|
||||
public ModelEntry(Item item, int metadata, String name)
|
||||
public ModelEntry(BOPBlock block, int metadata, String name)
|
||||
{
|
||||
this.item = item;
|
||||
this.block = block;
|
||||
this.metadata = metadata;
|
||||
this.name = name;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
package biomesoplenty.core;
|
||||
|
||||
import biomesoplenty.api.block.BOPBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
|
||||
|
@ -15,5 +16,5 @@ public class CommonProxy
|
|||
{
|
||||
public void registerRenderers() {}
|
||||
|
||||
public void registerBlockForMeshing(Block block, int metadata, String name) {}
|
||||
public void registerBlockForMeshing(BOPBlock block, int metadata, String name) {}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"variants": {
|
||||
"variant=sacred_oak": { "model": "biomesoplenty:sacred_oak_planks" },
|
||||
"variant=cherry": { "model": "biomesoplenty:cherry_planks" },
|
||||
"variant=dark": { "model": "biomesoplenty:dark_planks" },
|
||||
"variant=fir": { "model": "biomesoplenty:fir_planks" },
|
||||
"variant=ethereal": { "model": "biomesoplenty:ethereal_planks" },
|
||||
"variant=magic": { "model": "biomesoplenty:magic_planks" },
|
||||
"variant=mangrove": { "model": "biomesoplenty:mangrove_planks" },
|
||||
"variant=palm": { "model": "biomesoplenty:palm_planks" },
|
||||
"variant=redwood": { "model": "biomesoplenty:redwood_planks" },
|
||||
"variant=willow": { "model": "biomesoplenty:willow_planks" },
|
||||
"variant=bamboo_thatching": { "model": "biomesoplenty:bamboo_thatching" },
|
||||
"variant=pine": { "model": "biomesoplenty:pine_planks" },
|
||||
"variant=hell_bark": { "model": "biomesoplenty:hell_bark_planks" },
|
||||
"variant=jacaranda": { "model": "biomesoplenty:jacaranda_planks" },
|
||||
"variant=mahogany": { "model": "biomesoplenty:mahogany_planks" }
|
||||
}
|
||||
}
|
|
@ -1 +1,17 @@
|
|||
tile.ash_block.name=Ash Block
|
||||
|
||||
tile.planks.sacred_oak.name=Sacred Oak Wood Planks
|
||||
tile.planks.cherry.name=Cherry Wood Planks
|
||||
tile.planks.dark.name=Dark Wood Planks
|
||||
tile.planks.fir.name=Fir Wood Planks
|
||||
tile.planks.ethereal.name=Ethereal Wood Planks
|
||||
tile.planks.magic.name=Magic Wood Planks
|
||||
tile.planks.mangrove.name=Mangrove Wood Planks
|
||||
tile.planks.palm.name=Palm Wood Planks
|
||||
tile.planks.redwood.name=Redwood Wood Planks
|
||||
tile.planks.willow.name=Willow Wood Planks
|
||||
tile.planks.bamboo_thatching.name=Bamboo Thatching
|
||||
tile.planks.pine.name=Pine Wood Planks
|
||||
tile.planks.hell_bark.name=Hell Bark Wood Planks
|
||||
tile.planks.jacaranda.name=Jacaranda Wood Planks
|
||||
tile.planks.mahogany.name=Mahogany Wood Planks
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/bamboo_thatching"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/cherry_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/dark_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/ethereal_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/fir_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/hell_bark_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/jacaranda_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/magic_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/mahogany_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/mangrove_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/palm_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/pine_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/redwood_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/sacred_oak_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "biomesoplenty:blocks/willow_planks"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/bamboo_thatching",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/cherry_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/dark_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/ethereal_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/fir_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/hell_bark_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/jacaranda_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/magic_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/mahogany_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/mangrove_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/palm_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/pine_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/redwood_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/sacred_oak_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"parent": "biomesoplenty:block/willow_planks",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [ 10, -45, 170 ],
|
||||
"translation": [ 0, 1.5, -2.75 ],
|
||||
"scale": [ 0.375, 0.375, 0.375 ]
|
||||
}
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 650 B |
After Width: | Height: | Size: 579 B |
After Width: | Height: | Size: 743 B |
After Width: | Height: | Size: 332 B |
After Width: | Height: | Size: 361 B |
After Width: | Height: | Size: 508 B |
After Width: | Height: | Size: 351 B |
After Width: | Height: | Size: 356 B |
After Width: | Height: | Size: 344 B |
After Width: | Height: | Size: 678 B |
After Width: | Height: | Size: 346 B |
After Width: | Height: | Size: 331 B |
After Width: | Height: | Size: 562 B |
After Width: | Height: | Size: 452 B |
After Width: | Height: | Size: 855 B |