discarded ItemBlock path and opted for abstract item class with custom code in init

This commit is contained in:
Mohammad-Ali Minaie
2017-02-20 00:44:46 -05:00
parent 331d509df0
commit dc8590ae86
13 changed files with 369 additions and 42 deletions

3
1.11/eula.txt Normal file
View File

@@ -0,0 +1,3 @@
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Feb 19 22:59:02 EST 2017
eula=false

2
1.11/server.properties Normal file
View File

@@ -0,0 +1,2 @@
#Minecraft server properties
#Mon Feb 13 22:08:20 EST 2017

View File

@@ -37,7 +37,9 @@ public class IngotBall extends BlockCustomBase {
@Override
public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
{
//System.out.println(stack.getItemDamage());
worldIn.setBlockState(pos, state.withProperty(ACTIVE, Boolean.valueOf(false)), 2);
//System.out.println(state.getValue(ACTIVE));
}
@Override

View File

@@ -1,6 +1,7 @@
package nmd.primal.forgecraft.enumhandler;
import net.minecraft.util.IStringSerializable;
import nmd.primal.forgecraft.util.IMetaLookup;
/**
* Created by mminaie on 2/1/17.
@@ -35,4 +36,43 @@ public class EnumHandler {
}
public enum IngotTypes implements IMetaLookup<IngotTypes> {
IRONCOOL, /*0*/
IRONHOT; /*1*/
public final int meta;
public final String name;
public boolean set = false;
private IngotTypes() {
meta = ordinal();
name = toString().toLowerCase();
}
@Override
public String getVariantName() {
return name;
}
@Override
public int getOrdinal() {
return meta;
}
@Override
public IngotTypes getByOrdinal(int i) {
return this.values()[i];
}
@Override
public String getID() {
return "ore_type";
}
}
}

View File

@@ -8,6 +8,8 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import nmd.primal.forgecraft.blocks.*;
import nmd.primal.forgecraft.items.blocks.ItemBlockIngotBall;
@@ -37,7 +39,8 @@ public class ModBlocks {
public static Block failedironcruciblehot;
public static Block ironball;
public static ItemBlock ironballitem;
//public static ItemBlock ironballitemcool;
//public static ItemBlock ironballitemhot;
public static void init() {
@@ -66,10 +69,12 @@ public class ModBlocks {
failedironcruciblehot = new CrucibleHot(Material.ROCK, "failedironcruciblehot");
ironball = new IngotBall(Material.IRON, "ironball", 5.0F);
ironballitem = new ItemBlockIngotBall(ironball);
//ironballitemcool = new ItemBlockIngotBall(ironball);
//ironballitemhot = new ItemBlockIngotBall(ironball);
}
public static void register() {
registerBlock(firebox);
registerBlock(bloomery);
@@ -93,9 +98,12 @@ public class ModBlocks {
registerBlock(failedironcrucible);
registerBlock(failedironcruciblehot);
registerBlockSubType(ironball, ironballitem);
registerBlock(ironball);
//registerBlockSubType(ironball, ironballitemcool, "ironcool");
//registerBlockSubType(ironball, ironballitemhot, "ironhot");
}
@SideOnly(Side.CLIENT)
public static void registerRenders() {
registerRender(firebox);
registerRender(pistonbellowsoak);
@@ -118,8 +126,8 @@ public class ModBlocks {
registerRender(failedironcruciblehot);
registerRender(ironball);
registerRenderCustom(ironballitem, 0, new ModelResourceLocation(ironballitem.getUnlocalizedName() + "_0"));
registerRenderCustom(ironballitem, 1, new ModelResourceLocation(ironballitem.getUnlocalizedName() + "_1"));
//registerRenderCustom(ironballitemcool, 0, new ModelResourceLocation(ironballitemcool.getUnlocalizedName()));
//registerRenderCustom(ironballitemhot, 1, new ModelResourceLocation(ironballitemhot.getUnlocalizedName()));
}
@@ -130,10 +138,10 @@ public class ModBlocks {
GameRegistry.register(item);
}
private static void registerBlockSubType(Block block, ItemBlock itemBlock){
private static void registerBlockSubType(Block block, ItemBlock itemBlock, String registryName){
GameRegistry.register(block);
ItemBlock item = itemBlock;
item.setRegistryName(block.getRegistryName());
item.setRegistryName(registryName);
GameRegistry.register(item);
}

View File

@@ -4,18 +4,25 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.client.model.obj.OBJLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import nmd.primal.forgecraft.ModInfo;
import nmd.primal.forgecraft.items.ItemBellowsHandle;
import nmd.primal.forgecraft.items.ItemForgingManual;
import nmd.primal.forgecraft.items.ItemSoftCrucible;
import nmd.primal.forgecraft.items.ItemStoneTongs;
import nmd.primal.forgecraft.blocks.IngotBall;
import nmd.primal.forgecraft.items.*;
import nmd.primal.forgecraft.items.blocks.ItemBlockIngotBall;
/**
@@ -26,15 +33,32 @@ public class ModItems {
public static Item pistonbellows;
public static Item softcrucible;
public static Item stonetongs;
//public static ItemBlock ironingotball;
//public static Item ironingotballcool;
public static Item ironingotballhot;
//public static Item forgingmanual;
public static void init() {
OBJLoader.INSTANCE.addDomain(ModInfo.MOD_ID);
//OBJLoader.INSTANCE.addDomain(ModInfo.MOD_ID);
pistonbellows = new ItemBellowsHandle();
softcrucible = new ItemSoftCrucible();
stonetongs = new ItemStoneTongs("stonetongs");
//ironingotball = new ItemBlockIngotBall(ModBlocks.ironball.setRegistryName(ModBlocks.ironball.getRegistryName()));
//ironingotballcool = new BaseMultiItem("ironingotcool") {};
ironingotballhot = new BaseMultiItem("ironingothot") {
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
if(!world.isRemote) {
ItemStack itemstack = player.getHeldItem(hand);
if (world.getBlockState(pos).getBlock() != ModBlocks.firebox) {
BlockPos tempPos = new BlockPos(pos.getX(), pos.getY() + 1, pos.getZ());
if(world.getBlockState(tempPos).getBlock() == Blocks.AIR){
world.setBlockState(tempPos, ModBlocks.ironball.getDefaultState().withProperty(IngotBall.ACTIVE, true), 3);
itemstack.shrink(1);
return EnumActionResult.SUCCESS;
}
}
}
return EnumActionResult.FAIL;
}
};
//forgingmanual = new ItemForgingManual();
}
@@ -42,17 +66,21 @@ public class ModItems {
GameRegistry.register(pistonbellows);
GameRegistry.register(softcrucible);
GameRegistry.register(stonetongs);
//GameRegistry.register(ironingotball);
//GameRegistry.register(ironingotballcool);
GameRegistry.register(ironingotballhot);
//GameRegistry.register(forgingmanual);
}
@SideOnly(Side.CLIENT)
public static void registerRenders() {
registerRender(pistonbellows);
registerRender(softcrucible);
//registerRenderItemBlock(ironingotball);
//registerRender(ironingotballcool);
registerRender(ironingotballhot);
//registerRender(forgingmanual);
}
@SideOnly(Side.CLIENT)
public static void registerCustomRenders(){
ModelBakery.registerItemVariants(ModItems.stonetongs, ModItems.stonetongs.getRegistryName(),
new ResourceLocation(ModInfo.MOD_ID, "stonetongs"),
@@ -61,7 +89,8 @@ public class ModItems {
new ResourceLocation(ModInfo.MOD_ID, "stonetongs_emptyhotcracked"),
new ResourceLocation(ModInfo.MOD_ID, "stonetongs_hotiron"),
new ResourceLocation(ModInfo.MOD_ID, "stonetongs_hotironcooked"),
new ResourceLocation(ModInfo.MOD_ID, "stonetongs_hotironfailed")
new ResourceLocation(ModInfo.MOD_ID, "stonetongs_hotironfailed"),
new ResourceLocation(ModInfo.MOD_ID, "stonetongs_ingot")
);
ModelLoader.setCustomMeshDefinition(ModItems.stonetongs, new ItemMeshDefinition() {
@@ -86,6 +115,9 @@ public class ModItems {
else if (stack.getTagCompound().getInteger("type") == 5 ) {
return new ModelResourceLocation(stack.getItem().getRegistryName() + "_hotironfailed", "inventory");
}
else if (stack.getTagCompound().getInteger("type") == 6 ) {
return new ModelResourceLocation(stack.getItem().getRegistryName() + "_ingot", "inventory");
}
else return new ModelResourceLocation(stack.getItem().getRegistryName(), "inventory");
}
return new ModelResourceLocation(stack.getItem().getRegistryName(), "inventory");

View File

@@ -0,0 +1,15 @@
package nmd.primal.forgecraft.items;
import nmd.primal.forgecraft.items.BaseItem;
/**
* Created by mminaie on 2/19/17.
*/
public abstract class BaseMultiItem extends BaseItem {
public BaseMultiItem( String registryName) {
setUnlocalizedName(registryName);
setRegistryName(registryName);
}
}

View File

@@ -13,6 +13,7 @@ import net.minecraft.world.World;
import nmd.primal.forgecraft.ModInfo;
import nmd.primal.forgecraft.blocks.Crucible;
import nmd.primal.forgecraft.blocks.CrucibleHot;
import nmd.primal.forgecraft.blocks.IngotBall;
import nmd.primal.forgecraft.init.ModBlocks;
import nmd.primal.forgecraft.tiles.TileBaseCrucible;
import nmd.primal.forgecraft.tiles.TileBloomery;
@@ -44,8 +45,40 @@ public class ItemStoneTongs extends Item {
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
{
/*
0 | Default StoneTongs
1 | Empty Crucible Hot
2 | Empty Crucible Cracked Hot
3 | Hot Iron Crucible
4 | Hot Cooked Iron Crucible
5 | Hot Failed Iron Crucible
6 | Hot Iron Ingot
7 |
*/
if(!world.isRemote) {
ItemStack itemstack = player.getHeldItem(hand);
/*****
Picks Up Hot Ingots from the Ground
*****/
if (world.getBlockState(pos).getBlock() != ModBlocks.bloomery) {
if (world.getBlockState(pos).getBlock() instanceof IngotBall) {
//TileBaseCrucible tileCrucible = (TileBaseCrucible) world.getTileEntity(pos);
if (world.getBlockState(pos).getBlock() == ModBlocks.ironball) {
if(world.getBlockState(pos).getValue(IngotBall.ACTIVE) == true) {
itemstack.getTagCompound().setInteger("type", 6);
//itemstack.getTagCompound().setInteger("cooldown", tileCrucible.countdown);
world.setBlockToAir(pos);
System.out.println(itemstack.getTagCompound().getInteger("type"));
return EnumActionResult.SUCCESS;
}
}
}
}
/*****
Picks Up Hot Crucibles from the Ground
*****/
@@ -84,7 +117,7 @@ public class ItemStoneTongs extends Item {
}
}
/*****
Places the crucible from the Tongs to the World
Places the content from the Tongs to the World
*****/
if ((world.getBlockState(pos).getBlock() instanceof Crucible) || (world.getBlockState(pos).getBlock() instanceof CrucibleHot)) {
return EnumActionResult.FAIL;
@@ -131,7 +164,9 @@ public class ItemStoneTongs extends Item {
itemstack.getTagCompound().setInteger("type", 0);
return EnumActionResult.SUCCESS;
case 6:
return EnumActionResult.FAIL;
world.setBlockState(tempPos, ModBlocks.ironball.getDefaultState().withProperty(IngotBall.ACTIVE, true), 3);
itemstack.getTagCompound().setInteger("type", 0);
return EnumActionResult.SUCCESS;
case 7:
return EnumActionResult.FAIL;
}
@@ -141,31 +176,35 @@ public class ItemStoneTongs extends Item {
/*****
Pulls the crucible from the Bloomery
*****/
if (world.getBlockState(pos).getBlock() == ModBlocks.bloomery) {
TileBloomery tile = (TileBloomery) world.getTileEntity(pos);
if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.emptycruciblehot))) {
itemstack.getTagCompound().setInteger("type", 1);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
} else if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.emptycruciblecrackedhot))) {
itemstack.getTagCompound().setInteger("type", 2);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
} else if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.hotironcrucible))) {
itemstack.getTagCompound().setInteger("type", 3);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
} else if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.hotcookedironcrucible))) {
itemstack.getTagCompound().setInteger("type", 4);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
} else if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.failedironcruciblehot))) {
itemstack.getTagCompound().setInteger("type", 5);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
if(itemstack.getTagCompound().getInteger("type") == 0){
if (world.getBlockState(pos).getBlock() == ModBlocks.bloomery) {
TileBloomery tile = (TileBloomery) world.getTileEntity(pos);
if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.emptycruciblehot))) {
itemstack.getTagCompound().setInteger("type", 1);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
} else if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.emptycruciblecrackedhot))) {
itemstack.getTagCompound().setInteger("type", 2);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
} else if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.hotironcrucible))) {
itemstack.getTagCompound().setInteger("type", 3);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
} else if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.hotcookedironcrucible))) {
itemstack.getTagCompound().setInteger("type", 4);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
} else if (tile.getSlotStack(1).getItem().equals(Item.getItemFromBlock(ModBlocks.failedironcruciblehot))) {
itemstack.getTagCompound().setInteger("type", 5);
tile.setSlotStack(1, ItemStack.EMPTY);
return EnumActionResult.SUCCESS;
}
}
else return EnumActionResult.FAIL;
}
else return EnumActionResult.FAIL;
System.out.println(itemstack.getTagCompound().getInteger("type"));
}
return EnumActionResult.FAIL;
}

View File

@@ -1,9 +1,20 @@
package nmd.primal.forgecraft.items.blocks;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import nmd.primal.forgecraft.ModInfo;
import nmd.primal.forgecraft.enumhandler.EnumHandler;
import java.util.List;
import static nmd.primal.forgecraft.enumhandler.EnumHandler.IngotTypes.*;
/**
* Created by mminaie on 2/12/17.
@@ -24,5 +35,24 @@ public class ItemBlockIngotBall extends ItemBlock {
}
public String getUnlocalizedNameInefficiently(ItemStack stack) {
EnumHandler.IngotTypes v = EnumHandler.IngotTypes.values()[stack.getItemDamage()];
//EnumOreType z = EnumOreType.values()[stack.getItemDamage()];
switch(v) {
case IRONCOOL:
case IRONHOT:
return "item.forgecraft:"+v.name;
default:
return "item.forgecraft:unknown";
}
}
@SideOnly(Side.CLIENT)
public void getSubItems(Item itemIn, CreativeTabs tab, List<ItemStack> subItems) {
subItems.add(new ItemStack(itemIn, 1, EnumHandler.IngotTypes.IRONCOOL.meta));
subItems.add(new ItemStack(itemIn, 1, EnumHandler.IngotTypes.IRONHOT.meta));
}
}

View File

@@ -0,0 +1,14 @@
package nmd.primal.forgecraft.util;
/**
* Created by mminaie on 2/19/17.
*/
public interface IMetaLookup<T extends Enum> {
public String getID();
public T getByOrdinal(int i);
public String getVariantName();
public int getOrdinal();
}

View File

@@ -0,0 +1,8 @@
{
"forge_marker":1,
"textures": {
"particle": "forgecraft:blocks/iron_ingot_hot",
"texture": "forgecraft:blocks/iron_ingot_hot"
},
"parent": "forgecraft:item/ironball"
}

View File

@@ -0,0 +1,10 @@
{
"forge_marker":1,
"textures": {
"particle": "blocks/planks_oak",
"texture": "blocks/planks_oak",
"texture1": "forgecraft:blocks/stone_slab",
"texture2": "forgecraft:blocks/iron_ingot_hot"
},
"parent": "forgecraft:item/stonetongs_ingot_default"
}

View File

@@ -0,0 +1,124 @@
{
"__comment": "Designed by Kitsushadow with Cubik Studio - https://cubik.studio",
"textures": {
"particle": "blocks/planks_oak",
"texture": "blocks/planks_oak",
"texture1": "forgecraft:blocks/stone_slab",
"texture2": "forgecraft:blocks/iron_ingot_hot"
},
"elements": [
{
"__comment": "Cube1",
"from": [ 6, 0, 0 ],
"to": [ 7, 1, 3 ],
"faces": {
"down": { "uv": [ 4, 12, 5, 15 ], "texture": "#texture1" },
"up": { "uv": [ 4, 1, 5, 4 ], "texture": "#texture1" },
"north": { "uv": [ 11, 13, 12, 14 ], "texture": "#texture1" },
"south": { "uv": [ 4, 13, 5, 14 ], "texture": "#texture1" },
"west": { "uv": [ 1, 14, 4, 15 ], "texture": "#texture1" },
"east": { "uv": [ 12, 14, 15, 15 ], "texture": "#texture1" }
}
},
{
"__comment": "Cube2",
"from": [ 9, 0, 0 ],
"to": [ 10, 1, 3 ],
"faces": {
"down": { "uv": [ 4, 12, 5, 15 ], "texture": "#texture1" },
"up": { "uv": [ 4, 1, 5, 4 ], "texture": "#texture1" },
"north": { "uv": [ 11, 13, 12, 14 ], "texture": "#texture1" },
"south": { "uv": [ 4, 13, 5, 14 ], "texture": "#texture1" },
"west": { "uv": [ 1, 14, 4, 15 ], "texture": "#texture1" },
"east": { "uv": [ 12, 14, 15, 15 ], "texture": "#texture1" }
}
},
{
"__comment": "Cube3",
"from": [ 6, 0, 3 ],
"to": [ 7, 1, 8 ],
"rotation": { "origin": [ 6, 0, 3 ], "axis": "y", "angle": 45 },
"faces": {
"down": { "uv": [ 4, 2, 5, 9 ], "texture": "#texture" },
"up": { "uv": [ 4, 3, 5, 10 ], "texture": "#texture" },
"north": { "uv": [ 11, 15, 12, 16 ], "texture": "#texture" },
"south": { "uv": [ 4, 15, 5, 16 ], "texture": "#texture" },
"west": { "uv": [ 3, 15, 10, 16 ], "texture": "#texture" },
"east": { "uv": [ 7, 15, 14, 16 ], "texture": "#texture" }
}
},
{
"__comment": "Cube5",
"from": [ 6, 0, 5.5 ],
"to": [ 7, 1, 16 ],
"faces": {
"down": { "uv": [ 6, 0.5, 7, 11 ], "texture": "#texture" },
"up": { "uv": [ 6, 4.5, 7, 15 ], "texture": "#texture" },
"north": { "uv": [ 9, 15, 10, 16 ], "texture": "#texture" },
"south": { "uv": [ 7, 15, 8, 16 ], "texture": "#texture" },
"west": { "uv": [ 5.5, 15, 16, 16 ], "texture": "#texture" },
"east": { "uv": [ 0.5, 15, 11, 16 ], "texture": "#texture" }
}
},
{
"__comment": "Cube6",
"from": [ 9, 0, 5.5 ],
"to": [ 10, 1, 16 ],
"faces": {
"down": { "uv": [ 6, 0.5, 7, 11 ], "texture": "#texture" },
"up": { "uv": [ 6, 4.5, 7, 15 ], "texture": "#texture" },
"north": { "uv": [ 9, 15, 10, 16 ], "texture": "#texture" },
"south": { "uv": [ 7, 15, 8, 16 ], "texture": "#texture" },
"west": { "uv": [ 5.5, 15, 16, 16 ], "texture": "#texture" },
"east": { "uv": [ 0.5, 15, 11, 16 ], "texture": "#texture" }
}
},
{
"__comment": "Cube7",
"from": [ 7, -0.5, 0 ],
"to": [ 9, 1.5, 2 ],
"faces": {
"down": { "uv": [ 7, 12, 9, 14 ], "texture": "#texture2" },
"up": { "uv": [ 7, 0, 9, 2 ], "texture": "#texture2" },
"north": { "uv": [ 7, 14, 9, 16 ], "texture": "#texture2" },
"south": { "uv": [ 7, 14, 9, 16 ], "texture": "#texture2" },
"west": { "uv": [ 0, 14, 2, 16 ], "texture": "#texture2" },
"east": { "uv": [ 14, 14, 16, 16 ], "texture": "#texture2" }
}
},
{
"__comment": "Cube3",
"from": [ 9, 0, 3 ],
"to": [ 10, 1, 8 ],
"rotation": { "origin": [ 10, 1, 3 ], "axis": "y", "angle": -45 },
"faces": {
"down": { "uv": [ 4, 3, 5, 10 ], "texture": "#texture", "rotation": 180 },
"up": { "uv": [ 4, 2, 5, 9 ], "texture": "#texture", "rotation": 180 },
"north": { "uv": [ 12, 16, 11, 15 ], "texture": "#texture" },
"south": { "uv": [ 5, 16, 4, 15 ], "texture": "#texture" },
"west": { "uv": [ 7, 15, 14, 16 ], "texture": "#texture", "rotation": 180 },
"east": { "uv": [ 3, 15, 10, 16 ], "texture": "#texture", "rotation": 180 }
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [60, 0, 0],
"translation": [ 0, 8.9, 3.7 ]
},
"firstperson_righthand": {
"translation": [ 0, 5.5, -7 ]
},
"gui": {
"rotation": [ 90, 0, 0 ],
"scale": [ 0.95, 0.95, 0.95 ]
},
"ground": {
"translation": [ 0, 4, 0 ]
},
"fixed": {
"rotation": [ 90, 0, 0 ],
"translation": [ 0, 0, 8 ]
}
}
}