weapon upgrades baby

This commit is contained in:
Mohammad-Ali Minaie
2018-10-16 21:47:13 -04:00
parent 3d8552ed1a
commit 0efd2b73fd
8 changed files with 466 additions and 86 deletions

View File

@@ -1,6 +1,7 @@
package nmd.primal.forgecraft;
import net.minecraft.init.Items;
import net.minecraft.inventory.ItemStackHelper;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -8,10 +9,15 @@ import net.minecraft.util.NonNullList;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.oredict.OreDictionary;
import nmd.primal.core.api.PrimalAPI;
import nmd.primal.core.api.events.CauldronEvent;
import nmd.primal.core.api.events.CauldronRecipeEvent;
import nmd.primal.core.common.helper.PlayerHelper;
import nmd.primal.core.common.helper.RecipeHelper;
import nmd.primal.core.common.recipes.tile.CauldronRecipe;
import nmd.primal.core.common.tiles.machines.TileCauldron;
import nmd.primal.forgecraft.init.ModItems;
import nmd.primal.forgecraft.items.parts.ToolPart;
import nmd.primal.forgecraft.items.parts.WeaponPart;
@@ -20,59 +26,92 @@ import nmd.primal.forgecraft.items.tools.CustomHoe;
import nmd.primal.forgecraft.items.tools.CustomPickaxe;
import nmd.primal.forgecraft.items.tools.CustomShovel;
import nmd.primal.forgecraft.util.ToolNBT;
import nmd.primal.forgecraft.util.WeaponNBT;
import java.util.List;
/**
* Created by mminaie on 3/15/17.
*/
public class CommonEvents implements ToolNBT {
public class CommonEvents implements WeaponNBT {
@SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
public void onItemCrafted(CauldronEvent event){
public void onItemCrafted(CauldronRecipeEvent.Pre event){
NonNullList<ItemStack> inputs = NonNullList.<ItemStack>withSize(6,ItemStack.EMPTY);
inputs.set(0, event.getTile().getInputHandler().getStackInSlot(0));
inputs.set(1, event.getTile().getInputHandler().getStackInSlot(1));
inputs.set(2, event.getTile().getInputHandler().getStackInSlot(2));
inputs.set(3, event.getTile().getInputHandler().getStackInSlot(3));
inputs.set(4, event.getTile().getInputHandler().getStackInSlot(4));
inputs.set(5, event.getTile().getInputHandler().getStackInSlot(5));
CauldronRecipe recipe = event.getRecipe();
NonNullList<ItemStack> outputs = NonNullList.<ItemStack>withSize(6,ItemStack.EMPTY);
outputs.set(0, event.getTile().getOutputHandler().getStackInSlot(0));
outputs.set(1, event.getTile().getOutputHandler().getStackInSlot(1));
outputs.set(2, event.getTile().getOutputHandler().getStackInSlot(2));
outputs.set(3, event.getTile().getOutputHandler().getStackInSlot(3));
outputs.set(4, event.getTile().getOutputHandler().getStackInSlot(4));
outputs.set(5, event.getTile().getOutputHandler().getStackInSlot(5));
if (recipe.matches("rawbronzegladiussmite", "rawbronzegladiusbane", "rawbronzegladiuslapis")){
//System.out.println(inputs. + ":" + outputs.stream());
NonNullList<ItemStack> inputList = NonNullList.<ItemStack>withSize(6, ItemStack.EMPTY);
inputList.set(0, event.getTile().getInputHandler().getStackInSlot(0));
inputList.set(1, event.getTile().getInputHandler().getStackInSlot(1));
inputList.set(2, event.getTile().getInputHandler().getStackInSlot(2));
inputList.set(3, event.getTile().getInputHandler().getStackInSlot(3));
inputList.set(4, event.getTile().getInputHandler().getStackInSlot(4));
inputList.set(5, event.getTile().getInputHandler().getStackInSlot(5));
if(getMatchingStacks(inputs, outputs).get(0) != ItemStack.EMPTY){
TileCauldron tile = event.getTile();
ItemStack inputStack = tile.getInputStack(event.getOutputs().get(0));
Item inputStackItem = null;
if(inputStack.getItem() instanceof WeaponPart){
inputStackItem = inputStack.getItem();
}
ItemStack modStack = ItemStack.EMPTY;
ItemStack outputStack = event.getOutputs().get(0);
System.out.println(getMatchingStacks(inputs, outputs).get(0) + " : " + getMatchingStacks(inputs, outputs).get(1));
modStack = getOppositeStack(inputList, inputStack);
if (inputStack.hasTagCompound()) {
if (inputStack.getSubCompound("tags") != null) {
NBTTagCompound tags = inputStack.getTagCompound().copy();
if(inputStackItem != null) {
if (getModifiers(inputStack) < WeaponNBT.materialModifiers.get(((WeaponPart) outputStack.getItem()).getMaterial()) ) {
if (RecipeHelper.isOreName(modStack, "dustSilver")) {
setSmiteLevel(outputStack, getSmiteLevel(inputStack) + 1);
setModifiers(outputStack, getModifiers(inputStack) + 1);
}
if (RecipeHelper.isOreName(modStack, "foodPoison")) {
setBaneLevel(outputStack, getBaneLevel(inputStack) + 1);
setModifiers(outputStack, getModifiers(inputStack) + 1);
}
if (RecipeHelper.isOreName(modStack, "dustBlaze")) {
setFireLevel(outputStack, getFireLevel(inputStack) + 1);
setModifiers(outputStack, getModifiers(inputStack) + 1);
}
if (RecipeHelper.isOreName(modStack, "gemLapis")) {
setFortuneLevel(outputStack, getFortuneLevel(inputStack) + 1);
setModifiers(outputStack, getModifiers(inputStack) + 1);
}
if (RecipeHelper.isOreName(modStack, "boneWithered")) {
setFortuneLevel(outputStack, getFortuneLevel(inputStack) + 1);
setModifiers(outputStack, getModifiers(inputStack) + 1);
}
if (RecipeHelper.isOreName(modStack, "dustWitheredBone")) {
setFortuneLevel(outputStack, getFortuneLevel(inputStack) + 1);
setModifiers(outputStack, getModifiers(inputStack) + 1);
}
if (RecipeHelper.isOreName(modStack, "skullWithered")) {
setFortuneLevel(outputStack, getFortuneLevel(inputStack) + 1);
setModifiers(outputStack, getModifiers(inputStack) + 1);
}
}
}
}
}
}
}
private NonNullList<ItemStack> getMatchingStacks(NonNullList<ItemStack> input, NonNullList<ItemStack> output){
ItemStack inputStack = ItemStack.EMPTY;
ItemStack outputStack = ItemStack.EMPTY;
NonNullList<ItemStack> returnList = NonNullList.<ItemStack>withSize(2, ItemStack.EMPTY);
for (int i = 0; i < input.size(); i++) {
if(input.get(i).getItem() instanceof WeaponPart){
inputStack = input.get(i);
private ItemStack getOppositeStack(NonNullList<ItemStack> inputList, ItemStack inputStack){
ItemStack modStack = ItemStack.EMPTY;
for (int i = 0; i < inputList.size(); i++) {
if(inputList.get(i) != ItemStack.EMPTY && !(inputList.get(i).getItem() instanceof WeaponPart) ){
System.out.println(inputList.get(i));
modStack = inputList.get(i);
}
}
for (int i = 0; i < output.size(); i++) {
if(output.get(i).getItem() instanceof WeaponPart){
outputStack = output.get(i);
}
}
if(inputStack != null && outputStack != null && inputStack.equals(outputStack)){
returnList.set(0, inputStack);
returnList.set(1, outputStack);
}
return returnList;
System.out.println(modStack);
return modStack;
}
/*@SubscribeEvent(priority= EventPriority.HIGHEST, receiveCanceled=true)

View File

@@ -0,0 +1,23 @@
package nmd.primal.forgecraft.init;
import net.minecraft.block.Block;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.registries.IForgeRegistry;
import nmd.primal.core.api.PrimalAPI;
import nmd.primal.core.common.helper.RegistryHelper;
public class ModFluids {
public static Fluid SILVER_WATER;
@SubscribeEvent
public static void registryFluidBlocks(final RegistryEvent.Register<Block> event){
final IForgeRegistry<Block> registry = event.getRegistry();
//RegistryHelper.registerFluidBlock(registry,
// );
}
}

View File

@@ -28,17 +28,80 @@ public class CauldronRecipes
ItemStack defaultBronzeGladius = new ItemStack(ModItems.rawbronzegladius, 1);
//WeaponNBT.setDefaultNBT(defaultBronzeGladius);
NonNullList<ItemStack> tempList1 = NonNullList.<ItemStack>create();
tempList1.add(0, new ItemStack(ModItems.rawbronzegladius, 1));
defaultBronzeGladius.getOrCreateSubCompound("tags");
defaultBronzeGladius.getSubCompound("tags").setInteger("smite", 0);
defaultBronzeGladius.getSubCompound("tags").setInteger("bane", 0);
defaultBronzeGladius.getSubCompound("tags").setInteger("fire", 0);
defaultBronzeGladius.getSubCompound("tags").setInteger("fortune", 0);
defaultBronzeGladius.getSubCompound("tags").setInteger("leech", 0);
defaultBronzeGladius.getSubCompound("tags").setInteger("sweeping", 0);
defaultBronzeGladius.getSubCompound("tags").setInteger("sharpness", 0);
defaultBronzeGladius.getSubCompound("tags").setBoolean("hot", false);
recipes.register(new CauldronRecipe(
5,
new FluidStack(FluidRegistry.WATER, 1000),
new FluidStack(PrimalAPI.Fluids.WASTE, 1000),
RecipeHelper.getOreStack("gemLapis", 1),
tempList1,
RecipeHelper.getOreStack("dustSilver", 2),
RecipeHelper.buildList(defaultBronzeGladius),
defaultBronzeGladius,
ItemStack.EMPTY).setRecipeName("rawbronzegladiuslapis"));
ItemStack.EMPTY).setRecipeName(ModInfo.MOD_ID, "rawbronzegladiussmite"));
recipes.register(new CauldronRecipe(
5,
new FluidStack(FluidRegistry.WATER, 1000),
new FluidStack(PrimalAPI.Fluids.WASTE, 1000),
RecipeHelper.getOreStack("foodPoison", 2),
RecipeHelper.buildList(defaultBronzeGladius),
defaultBronzeGladius,
ItemStack.EMPTY).setRecipeName(ModInfo.MOD_ID, "rawbronzegladiusbane"));
recipes.register(new CauldronRecipe(
5,
new FluidStack(FluidRegistry.WATER, 1000),
new FluidStack(PrimalAPI.Fluids.WASTE, 1000),
RecipeHelper.getOreStack("dustBlaze", 2),
RecipeHelper.buildList(defaultBronzeGladius),
defaultBronzeGladius,
ItemStack.EMPTY).setRecipeName(ModInfo.MOD_ID, "rawbronzegladiusfire"));
recipes.register(new CauldronRecipe(
5,
new FluidStack(FluidRegistry.WATER, 1000),
new FluidStack(PrimalAPI.Fluids.WASTE, 1000),
RecipeHelper.getOreStack("gemLapis", 2),
RecipeHelper.buildList(defaultBronzeGladius),
defaultBronzeGladius,
ItemStack.EMPTY).setRecipeName(ModInfo.MOD_ID, "rawbronzegladiuslapis"));
recipes.register(new CauldronRecipe(
5,
new FluidStack(FluidRegistry.WATER, 1000),
new FluidStack(PrimalAPI.Fluids.WASTE, 1000),
RecipeHelper.getOreStack("boneWithered", 1),
RecipeHelper.buildList(defaultBronzeGladius),
defaultBronzeGladius,
ItemStack.EMPTY).setRecipeName(ModInfo.MOD_ID, "rawbronzegladiusleech0"));
recipes.register(new CauldronRecipe(
5,
new FluidStack(FluidRegistry.WATER, 1000),
new FluidStack(PrimalAPI.Fluids.WASTE, 1000),
RecipeHelper.getOreStack("dustWitheredBone", 2),
RecipeHelper.buildList(defaultBronzeGladius),
defaultBronzeGladius,
ItemStack.EMPTY).setRecipeName(ModInfo.MOD_ID, "rawbronzegladiusleech1"));
recipes.register(new CauldronRecipe(
5,
new FluidStack(FluidRegistry.WATER, 1000),
new FluidStack(PrimalAPI.Fluids.WASTE, 1000),
RecipeHelper.getOreStack("skullWithered", 2),
RecipeHelper.buildList(defaultBronzeGladius),
defaultBronzeGladius,
ItemStack.EMPTY).setRecipeName(ModInfo.MOD_ID, "rawbronzegladiusleech2"));
}
}

View File

@@ -127,7 +127,6 @@ public class ToolPart extends Item implements ToolNBT{
}
}
}
}
@Override

View File

@@ -1,6 +1,9 @@
package nmd.primal.forgecraft.items.parts;
import com.mojang.realmsclient.gui.ChatFormatting;
import net.minecraft.block.Block;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
@@ -12,7 +15,9 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import nmd.primal.core.api.PrimalAPI;
@@ -45,8 +50,8 @@ public class WeaponPart extends Item implements WeaponNBT {
/***
smite| bane | fire | fortune | leech
X.0 | 0.X | 0.0X | 0.00X | 0.000X
HOT | SMITE | BANE | FIRE | FORTUNE | leech
X.0 | 0.X | 0.0X | 0.00X | 0.000X | 0.0000X
***/
@@ -58,28 +63,27 @@ public class WeaponPart extends Item implements WeaponNBT {
returnFloat += 0.1F;
}
if(getBaneLevel(item)>0){
returnFloat += (0.01F * getBaneLevel(item));
returnFloat += (0.01F);
}
if(getFireLevel(item)>0){
returnFloat += (0.001F * getFireLevel(item));
returnFloat += (0.001F);
}
if(getFortuneLevel(item)>0){
returnFloat += (0.0001F * getFortuneLevel(item));
returnFloat += (0.0001F);
}
if(getLeechLevel(item)>0){
returnFloat += (0.0001F * getLeechLevel(item));
returnFloat += (0.00001F);
}
if(getHot(item)){
returnFloat += 1.0F;
}
return returnFloat;
}
return 0.0F;
}
});
}
public static boolean isHidden()
{
return false;
@@ -87,51 +91,52 @@ public class WeaponPart extends Item implements WeaponNBT {
public ToolMaterial getMaterial() {return toolMaterial;}
public void createDefaultNBT(ItemStack item){
if (!item.hasTagCompound()) {
item.setTagCompound(new NBTTagCompound());
NBTTagCompound tags = new NBTTagCompound();
item.getTagCompound().setTag("tags", tags);
setSmiteLevel(item, 0);
setBaneLevel(item, 0);
setFireLevel(item, 0);
setFortuneLevel(item, 0);
setLeechLevel(item, 0);
setSweepingLevel(item, 0);
setSharpnessLevel(item, 0);
setModifiers(item, 0);
@Override
public void onUpdate(ItemStack item, World world, Entity player, int itemSlot, boolean isSelected) {
//System.out.println(item.getTagCompound());
if(!item.hasTagCompound()) {
WeaponNBT.setDefaultNBT(item);
}
}
@Override
public void onCreated(ItemStack item, World worldIn, EntityPlayer playerIn) {
createDefaultNBT(item);
if(!item.hasTagCompound()) {
WeaponNBT.setDefaultNBT(item);
}
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack item, @Nullable World world, List<String> tooltip, ITooltipFlag flagIn)
public void addInformation(ItemStack stack, @Nullable World world, List<String> tooltip, ITooltipFlag flagIn)
{
if(item.hasTagCompound())
{
tooltip.add(ChatFormatting.GRAY + "Upgrades left: " + (WeaponNBT.materialModifiers.get(this.toolMaterial) - getModifiers(item)));
/*if (getEmerald(item)) {
tooltip.add(ChatFormatting.DARK_GREEN + "Emerald");
if(stack.hasTagCompound()) {
if (stack.getSubCompound("tags") != null) {
tooltip.add(ChatFormatting.GRAY + "Upgrades left: " + (WeaponNBT.materialModifiers.get(this.toolMaterial) - getModifiers(stack)));
}
if (getDiamondLevel(item) > 0) {
tooltip.add(ChatFormatting.AQUA + "Diamond Level: " + getDiamondLevel(item));
if (getSmiteLevel(stack) > 0) {
tooltip.add(ChatFormatting.GOLD + "Holy: " + getSmiteLevel(stack));
}
if (getRedstoneLevel(item) > 0) {
tooltip.add(ChatFormatting.RED + "Redstone Level: " + getRedstoneLevel(item));
if (getBaneLevel(stack) > 0) {
tooltip.add(ChatFormatting.GREEN + "Spider Killing: " + getBaneLevel(stack));
}
if (getFireLevel(stack) > 0) {
tooltip.add(ChatFormatting.RED + "Flame: " + getFireLevel(stack));
}
if (getFortuneLevel(stack) > 0) {
tooltip.add(ChatFormatting.BLUE + "Thieving: " + getFortuneLevel(stack));
}
if (getLeechLevel(stack) > 0) {
tooltip.add(ChatFormatting.BLACK + "Life Steal: " + getLeechLevel(stack));
}
if(getSharpnessLevel(stack)>0){
tooltip.add(ChatFormatting.WHITE + "Sharpness: " + getSharpnessLevel(stack));
}
if (getLapisLevel(item) > 0) {
tooltip.add(ChatFormatting.BLUE + "Lapis Level: " + getLapisLevel(item));
}*/
}
}
}

View File

@@ -1,9 +1,14 @@
package nmd.primal.forgecraft.util;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.oredict.OreIngredient;
import nmd.primal.core.api.PrimalAPI;
import nmd.primal.forgecraft.init.ModItems;
import nmd.primal.forgecraft.items.parts.WeaponPart;
import java.util.Hashtable;
@@ -156,11 +161,26 @@ public interface WeaponNBT {
return null;
}
static void setDefaultNBT(ItemStack stack){
default boolean getHot(ItemStack stack){
NBTTagCompound tags = new NBTTagCompound();
stack.setTagCompound(tags);
stack.getTagCompound().setTag("tags", tags);
if(!stack.isEmpty()){
if(stack.hasTagCompound()){
if(stack.getSubCompound("tags") !=null){
return stack.getSubCompound("tags").getBoolean("hot");
}
}
}
return false;
}
default void setHot(ItemStack stack){
}
static void setDefaultNBT(ItemStack stack) {
stack.getOrCreateSubCompound("tags");
stack.getSubCompound("tags").setInteger("smite", 0);
stack.getSubCompound("tags").setInteger("bane", 0);
stack.getSubCompound("tags").setInteger("fire", 0);
@@ -168,7 +188,8 @@ public interface WeaponNBT {
stack.getSubCompound("tags").setInteger("leech", 0);
stack.getSubCompound("tags").setInteger("sweeping", 0);
stack.getSubCompound("tags").setInteger("sharpness", 0);
stack.getSubCompound("tags").setInteger("modifiers", 0);
stack.getSubCompound("tags").setBoolean("hot", false);
}
Hashtable<Item.ToolMaterial, Integer> materialModifiers = new Hashtable<Item.ToolMaterial, Integer>(){{
@@ -183,4 +204,10 @@ public interface WeaponNBT {
}};
Hashtable<Ingredient, String> StackToUpgrade = new Hashtable<Ingredient, String>(){{
put(new OreIngredient("dustSilver"), "bane");
}};
}

View File

@@ -0,0 +1,9 @@
{
"forge_marker":1,
"textures": {
"particle": "forgecraft:items/bronze/0",
"texture": "forgecraft:items/bronze/0",
"texture1": "blocks/planks_oak"
},
"parent": "forgecraft:item/rawgladius"
}

View File

@@ -0,0 +1,215 @@
{
"__comment": "Designed by Kitsushadow with Cubik Studio - https://cubik.studio",
"textures": {
"particle": "items/finished_bronze",
"texture": "items/finished_bronze",
"texture1": "blocks/planks_oak"
},
"elements": [
{
"__comment": "Cube23",
"from": [ 7.25, -5.5, 7.25 ],
"to": [ 9.25, 1, 8.75 ],
"faces": {
"down": { "uv": [ 7, 7.5, 9, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 7, 7.5, 9, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 7, 8, 9, 16 ], "texture": "#texture" },
"south": { "uv": [ 7, 8, 9, 16 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 8, 8.5, 16 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 8, 8.5, 16 ], "texture": "#texture" }
}
},
{
"__comment": "Cube23",
"from": [ 6.5, 1, 7.5 ],
"to": [ 10, 6, 8.5 ],
"faces": {
"down": { "uv": [ 7, 7.5, 9, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 7, 7.5, 9, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 7, 9, 9, 16 ], "texture": "#texture" },
"south": { "uv": [ 7, 9, 9, 16 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 9, 8.5, 16 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 9, 8.5, 16 ], "texture": "#texture" }
}
},
{
"__comment": "Cube28",
"from": [ 8, 1, 8.5 ],
"to": [ 8.5, 24, 8.501 ],
"faces": {
"down": { "uv": [ 7.5, 7, 8.5, 7.5 ], "texture": "#texture" },
"up": { "uv": [ 7.5, 8.5, 8.5, 9 ], "texture": "#texture" },
"north": { "uv": [ 7.5, 0, 8.5, 15 ], "texture": "#texture" },
"south": { "uv": [ 7.5, 0, 8.5, 15 ], "texture": "#texture" },
"west": { "uv": [ 8.5, 0, 9, 15 ], "texture": "#texture" },
"east": { "uv": [ 7, 0, 7.5, 15 ], "texture": "#texture" }
}
},
{
"__comment": "Cube32",
"from": [ 6.75, 21.5, 7.5 ],
"to": [ 9.75, 23, 8.5 ],
"faces": {
"down": { "uv": [ 7, 7.5, 9, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 7, 7.5, 9, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 7, 7, 9, 9.5 ], "texture": "#texture" },
"south": { "uv": [ 7, 7, 9, 9.5 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 7, 8.5, 9.5 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 7, 8.5, 9.5 ], "texture": "#texture" }
}
},
{
"__comment": "Cube32",
"from": [ 7.25, 24.5, 7.5 ],
"to": [ 9.25, 26, 8.5 ],
"faces": {
"down": { "uv": [ 7, 7.5, 9, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 7, 7.5, 9, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 7, 7, 9, 8 ], "texture": "#texture" },
"south": { "uv": [ 7, 7, 9, 8 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 7, 8.5, 8 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 7, 8.5, 8 ], "texture": "#texture" }
}
},
{
"__comment": "Cube9",
"from": [ 7.75, 27, 7.5 ],
"to": [ 8.75, 28, 8.5 ],
"faces": {
"down": { "uv": [ 8, 7.5, 8.5, 8 ], "texture": "#texture", "rotation": 180 },
"up": { "uv": [ 8, 8, 8.5, 8.5 ], "texture": "#texture", "rotation": 180 },
"north": { "uv": [ 8, 4.5, 8.5, 5.5 ], "texture": "#texture" },
"south": { "uv": [ 7.5, 4.5, 8, 5.5 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 4.5, 8, 5.5 ], "texture": "#texture" },
"east": { "uv": [ 8, 4.5, 8.5, 5.5 ], "texture": "#texture" }
}
},
{
"__comment": "Cube28",
"from": [ 8, 1, 7.499 ],
"to": [ 8.5, 24, 7.5 ],
"faces": {
"down": { "uv": [ 7.5, 7, 8.5, 7.5 ], "texture": "#texture", "rotation": 180 },
"up": { "uv": [ 7.5, 8.5, 8.5, 9 ], "texture": "#texture", "rotation": 180 },
"north": { "uv": [ 7.5, 0, 8.5, 15 ], "texture": "#texture" },
"south": { "uv": [ 7.5, 0, 8.5, 15 ], "texture": "#texture" },
"west": { "uv": [ 7, 0, 7.5, 15 ], "texture": "#texture" },
"east": { "uv": [ 8.5, 0, 9, 15 ], "texture": "#texture" }
}
},
{
"__comment": "Cube13",
"from": [ 7, 23, 7.5 ],
"to": [ 9.5, 24.5, 8.5 ],
"faces": {
"down": { "uv": [ 7, 7.5, 9.5, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 7, 7.5, 9.5, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 6.5, 7.5, 9, 9 ], "texture": "#texture" },
"south": { "uv": [ 7, 7.5, 9.5, 9 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 7.5, 8.5, 9 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 7.5, 8.5, 9 ], "texture": "#texture" }
}
},
{
"__comment": "Cube14",
"from": [ 7.5, 26, 7.5 ],
"to": [ 9, 27, 8.5 ],
"faces": {
"down": { "uv": [ 7.5, 7.5, 9, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 7.5, 7.5, 9, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 7, 5, 8.5, 6 ], "texture": "#texture" },
"south": { "uv": [ 7.5, 5, 9, 6 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 5, 8.5, 6 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 5, 8.5, 6 ], "texture": "#texture" }
}
},
{
"__comment": "Cube17",
"from": [ 8, -8.5, 7.75 ],
"to": [ 8.5, -5.5, 8.25 ],
"faces": {
"down": { "uv": [ 8, 7.75, 8.5, 8.25 ], "texture": "#texture" },
"up": { "uv": [ 8, 7.75, 8.5, 8.25 ], "texture": "#texture" },
"north": { "uv": [ 7.5, 8, 8, 11 ], "texture": "#texture" },
"south": { "uv": [ 8, 8, 8.5, 11 ], "texture": "#texture" },
"west": { "uv": [ 7.75, 8, 8.5, 11 ], "texture": "#texture" },
"east": { "uv": [ 7.75, 8, 8.5, 11 ], "texture": "#texture" }
}
},
{
"__comment": "Cube24",
"from": [ 6.75, 6, 7.5 ],
"to": [ 9.75, 15.5, 8.5 ],
"faces": {
"down": { "uv": [ 6.75, 7.5, 9.75, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 6.75, 7.5, 9.75, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 6.25, 0.5, 9.25, 10 ], "texture": "#texture" },
"south": { "uv": [ 6.75, 0.5, 9.75, 10 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 0.5, 8.5, 10 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 0.5, 8.5, 10 ], "texture": "#texture" }
}
},
{
"__comment": "Cube19",
"from": [ 6.5, 15.5, 7.5 ],
"to": [ 10, 21.5, 8.5 ],
"faces": {
"down": { "uv": [ 6.5, 7.5, 10, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 6.5, 7.5, 10, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 6, 0, 9.5, 0.5 ], "texture": "#texture" },
"south": { "uv": [ 6.5, 0, 10, 0.5 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 0, 8.5, 0.5 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 0, 8.5, 0.5 ], "texture": "#texture" }
}
},
{
"__comment": "Cube20",
"from": [ 8, 27.75, 7.5 ],
"to": [ 8.5, 28.75, 8.5 ],
"faces": {
"down": { "uv": [ 8, 7.5, 8.5, 8.5 ], "texture": "#texture" },
"up": { "uv": [ 8, 7.5, 8.5, 8.5 ], "texture": "#texture" },
"north": { "uv": [ 7.5, 3.25, 8, 4.25 ], "texture": "#texture" },
"south": { "uv": [ 8, 3.25, 8.5, 4.25 ], "texture": "#texture" },
"west": { "uv": [ 7.5, 3.25, 8.5, 4.25 ], "texture": "#texture" },
"east": { "uv": [ 7.5, 3.25, 8.5, 4.25 ], "texture": "#texture" }
}
}
],
"display": {
"thirdperson_righthand": {
"rotation": [ 0, 90, 0 ],
"translation": [ 0, 5.9, 1.33 ],
"scale": [ 0.75, 0.75, 0.75 ]
},
"thirdperson_lefthand": {
"rotation": [ 0, 90, 0 ],
"translation": [ 0, 5.9, 1.33 ],
"scale": [ 0.75, 0.75, 0.75 ]
},
"firstperson_righthand": {
"rotation": [ 0, 90, 0 ],
"translation": [ 0, 6.6, 1 ],
"scale": [ 0.75, 0.75, 0.75 ]
},
"firstperson_lefthand": {
"rotation": [ 0, 90, 0 ],
"translation": [ 0, 6.6, 1 ],
"scale": [ 0.75, 0.75, 0.75 ]
},
"gui": {
"rotation": [ 0, 0, -45 ],
"translation": [ -0.4, -0.4, 0 ],
"scale": [ 0.5, 0.5, 0.5 ]
},
"ground": {
"rotation": [ 90, 0, 0 ],
"scale": [ 0.75, 0.75, 0.75 ]
},
"fixed": {
"rotation": [ 0, 0, 45 ],
"translation": [ 0.7, -0.7, 0 ],
"scale": [ 0.66, 0.66, 0.66 ]
}
}
}