From b7e2730bcccb536468ee9a124f9ece571b3376c9 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 11 Dec 2016 23:54:03 -0800 Subject: [PATCH] Implement the new model for the Blood Tank - Texture needs some tinkering. Will bother @InsomniaKitten about it - Minor cleanup and improvements --- .../bloodmagic/block/BlockBloodTank.java | 99 +++-- .../client/render/block/RenderBloodTank.java | 76 ++-- .../render/model/BakedCustomItemModel.java | 2 +- .../item/block/ItemBlockBloodTank.java | 4 +- .../bloodmagic/tile/TileBloodTank.java | 6 +- .../blockstates/BlockBloodTank.json | 2 +- .../models/block/BlockBloodTank.json | 357 ++++++++++++++++++ .../bloodmagic/textures/blocks/BloodTank.png | Bin 308 -> 911 bytes 8 files changed, 438 insertions(+), 108 deletions(-) create mode 100644 src/main/resources/assets/bloodmagic/models/block/BlockBloodTank.json diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java b/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java index 661e801a..4b6ab6f4 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockBloodTank.java @@ -2,14 +2,11 @@ package WayofTime.bloodmagic.block; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.block.base.BlockInteger; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.tile.TileBloodTank; -import net.minecraft.block.BlockContainer; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; -import net.minecraft.block.properties.IProperty; -import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -20,6 +17,7 @@ import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockAccess; @@ -31,16 +29,17 @@ import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; -public class BlockBloodTank extends BlockContainer implements IVariantProvider +public class BlockBloodTank extends BlockInteger implements IVariantProvider { - public static final PropertyInteger TIER = PropertyInteger.create("tier", 0, TileBloodTank.capacities.length - 1); + public static final AxisAlignedBB BOX = new AxisAlignedBB(0.25, 0, 0.25, 0.75, 0.8, 0.75); public BlockBloodTank() { - super(Material.IRON); + super(Material.IRON, TileBloodTank.CAPACITIES.length - 1, "tier"); setUnlocalizedName(Constants.Mod.MODID + ".bloodTank"); setHardness(2.0F); @@ -49,21 +48,19 @@ public class BlockBloodTank extends BlockContainer implements IVariantProvider setHarvestLevel("pickaxe", 1); setCreativeTab(BloodMagic.tabBloodMagic); setLightOpacity(0); - - setDefaultState(blockState.getBaseState().withProperty(TIER, 0)); } - // This is important!!! - DON'T DELETE - idk why + @Nullable @Override - public TileEntity createTileEntity(World worldIn, IBlockState blockState) + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos) { - return new TileBloodTank(getMetaFromState(blockState)); + return BOX; } @Override - public TileEntity createNewTileEntity(World worldIn, int meta) + public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) { - return new TileBloodTank(meta); + return BOX; } @Override @@ -76,7 +73,7 @@ public class BlockBloodTank extends BlockContainer implements IVariantProvider @SideOnly(Side.CLIENT) public BlockRenderLayer getBlockLayer() { - return BlockRenderLayer.TRANSLUCENT; + return BlockRenderLayer.CUTOUT_MIPPED; } @Override @@ -91,32 +88,6 @@ public class BlockBloodTank extends BlockContainer implements IVariantProvider return false; } - @Override - public IBlockState getStateFromMeta(int meta) - { - return this.getDefaultState().withProperty(TIER, meta); - } - - @Override - public int getMetaFromState(IBlockState state) - { - return state.getValue(TIER); - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) - { - if (world.getTileEntity(pos) == null) - return state; - return state.withProperty(TIER, world.getTileEntity(pos).getBlockMetadata()); - } - - @Override - protected BlockStateContainer createBlockState() - { - return new BlockStateContainer(this, new IProperty[] { TIER }); - } - @Override public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { @@ -129,7 +100,7 @@ public class BlockBloodTank extends BlockContainer implements IVariantProvider return true; } - return false; + return true; } @Override @@ -141,13 +112,14 @@ public class BlockBloodTank extends BlockContainer implements IVariantProvider } @Override - public List getDrops(IBlockAccess world, BlockPos blockPos, IBlockState blockState, int fortune) + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState blockState, int fortune) { ArrayList list = new ArrayList(); - if (world.getTileEntity(blockPos) instanceof TileBloodTank) + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileBloodTank) { - TileBloodTank bloodTank = (TileBloodTank) world.getTileEntity(blockPos); + TileBloodTank bloodTank = (TileBloodTank) tile; ItemStack drop = new ItemStack(this); NBTTagCompound tag = new NBTTagCompound(); bloodTank.serialize(tag); @@ -160,21 +132,22 @@ public class BlockBloodTank extends BlockContainer implements IVariantProvider } @Override - public void onBlockPlacedBy(World world, BlockPos blockPos, IBlockState blockState, EntityLivingBase placer, ItemStack stack) + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState blockState, EntityLivingBase placer, ItemStack stack) { - if (world.getTileEntity(blockPos) != null && world.getTileEntity(blockPos) instanceof TileBloodTank) + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileBloodTank) { NBTTagCompound tag = stack.getTagCompound(); if (tag != null) { - ((TileBloodTank) world.getTileEntity(blockPos)).deserialize(tag); - blockState.withProperty(TIER, stack.getMetadata()); + ((TileBloodTank) tile).deserialize(tag); + blockState.withProperty(getProperty(), stack.getMetadata()); } } - world.checkLight(blockPos); - world.updateComparatorOutputLevel(blockPos, this); - world.markAndNotifyBlock(blockPos, world.getChunkFromBlockCoords(blockPos), blockState, blockState, 3); + world.checkLight(pos); + world.updateComparatorOutputLevel(pos, this); + world.markAndNotifyBlock(pos, world.getChunkFromBlockCoords(pos), blockState, blockState, 3); } @Override @@ -193,7 +166,7 @@ public class BlockBloodTank extends BlockContainer implements IVariantProvider @Override public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { - return getDrops(world, pos, world.getBlockState(pos), 0).get(0); + return new ItemStack(this, 1, getMetaFromState(state)); } @Override @@ -203,19 +176,33 @@ public class BlockBloodTank extends BlockContainer implements IVariantProvider } @Override - public int getComparatorInputOverride(IBlockState state, World w, BlockPos pos) + public int getComparatorInputOverride(IBlockState state, World world, BlockPos pos) { - TileEntity tile = w.getTileEntity(pos); + TileEntity tile = world.getTileEntity(pos); if (tile instanceof TileBloodTank) return ((TileBloodTank) tile).getComparatorOutput(); return 0; } + @Override + public TileEntity createTileEntity(World worldIn, IBlockState blockState) + { + return new TileBloodTank(getMetaFromState(blockState)); + } + + @Override + public boolean hasTileEntity(IBlockState state) + { + return true; + } + + // IVariantProvider + @Override public List> getVariants() { List> ret = new ArrayList>(); - for (int i = 0; i < TileBloodTank.capacities.length; i++) + for (int i = 0; i < TileBloodTank.CAPACITIES.length; i++) ret.add(new ImmutablePair(i, "inventory")); return ret; diff --git a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderBloodTank.java b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderBloodTank.java index 2405f62d..73da5b03 100644 --- a/src/main/java/WayofTime/bloodmagic/client/render/block/RenderBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/client/render/block/RenderBloodTank.java @@ -39,8 +39,10 @@ public class RenderBloodTank extends TileEntitySpecialRenderer GlStateManager.popMatrix(); } - public void renderFluid(float scale, Fluid renderFluid, double x, double y, double z) + public void renderFluid(float maxHeight, Fluid renderFluid, double x, double y, double z) { + maxHeight = maxHeight * 0.575F; + GlStateManager.translate(x, y, z); RenderHelper.disableStandardItemLighting(); @@ -69,56 +71,40 @@ public class RenderBloodTank extends TileEntitySpecialRenderer float u2 = fluid.getMaxU(); float v2 = fluid.getMaxV(); - if (scale > 0) - { - float edge = 0.9375F; - float otherEdge = 0.0625F; - float offset = 0.002F; + if (maxHeight > 0) { + float texWidth = u2 - u1; - // Top - buffer.pos(0, scale - offset, 0).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0, scale - offset, 1).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(1, scale - offset, 1).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(1, scale - offset, 0).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex(); + // TOP + buffer.pos(0.25, maxHeight + 0.05, 0.25).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.25, maxHeight + 0.05, 0.75).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.75, maxHeight + 0.05, 0.75).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.75, maxHeight + 0.05, 0.25).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - // Bottom - buffer.pos(1, offset, 0).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(1, offset, 1).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0, offset, 1).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0, offset, 0).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex(); + // NORTH + buffer.pos(0.75, maxHeight + 0.05, 0.25).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.75, 0, 0.25).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.25, 0, 0.25).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.25, maxHeight + 0.05, 0.25).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - if (scale > otherEdge) - { - if (scale > edge) - scale = edge; + // EAST + buffer.pos(0.25, 0, 0.75).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.25, maxHeight + 0.05, 0.75).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.25, maxHeight + 0.05, 0.25).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.25, 0, 0.25).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - v2 -= (fluid.getMaxV() - fluid.getMinV()) * (1 - scale); + // SOUTH + buffer.pos(0.75, 0, 0.75).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.75, maxHeight + 0.05, 0.75).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.25, maxHeight + 0.05, 0.75).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.25, 0, 0.75).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); - //NORTH - buffer.pos(1, scale, offset).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(1, 0, offset).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0, 0, offset).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0, scale, offset).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex(); - - //EAST - buffer.pos(offset, 0, 1).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(offset, scale, 1).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(offset, scale, 0).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(offset, 0, 0).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex(); - - //SOUTH - buffer.pos(1, 0, 1 - offset).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(1, scale, 1 - offset).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0, scale, 1 - offset).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(0, 0, 1 - offset).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex(); - - //WEST - buffer.pos(1 - offset, scale, 1).tex(u1, v1).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(1 - offset, 0, 1).tex(u1, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(1 - offset, 0, 0).tex(u2, v2).color(rColor, gColor, bColor, aColor).endVertex(); - buffer.pos(1 - offset, scale, 0).tex(u2, v1).color(rColor, gColor, bColor, aColor).endVertex(); - } + // WEST + buffer.pos(0.75, maxHeight + 0.05, 0.75).tex(u1 + 0.75 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.75, 0, 0.75).tex(u1 + 0.75 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.75, 0, 0.25).tex(u1 + 0.25 * texWidth, v1).color(rColor, gColor, bColor, aColor).endVertex(); + buffer.pos(0.75, maxHeight + 0.05, 0.25).tex(u1 + 0.25 * texWidth, v1 + (maxHeight + 0.05) * texWidth).color(rColor, gColor, bColor, aColor).endVertex(); } + tessellator.draw(); RenderHelper.enableStandardItemLighting(); diff --git a/src/main/java/WayofTime/bloodmagic/client/render/model/BakedCustomItemModel.java b/src/main/java/WayofTime/bloodmagic/client/render/model/BakedCustomItemModel.java index 7d073708..4529d6f7 100644 --- a/src/main/java/WayofTime/bloodmagic/client/render/model/BakedCustomItemModel.java +++ b/src/main/java/WayofTime/bloodmagic/client/render/model/BakedCustomItemModel.java @@ -71,7 +71,7 @@ public class BakedCustomItemModel implements IPerspectiveAwareModel GlStateManager.pushMatrix(); FluidStack fluid = null; - float capacity = TileBloodTank.capacities[stack.getItemDamage()] * Fluid.BUCKET_VOLUME; + float capacity = TileBloodTank.CAPACITIES[stack.getItemDamage()] * Fluid.BUCKET_VOLUME; int amount = 0; if (stack.hasTagCompound() && stack.getTagCompound().hasKey(Constants.NBT.TANK)) { diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java index f069d8d5..d9baff09 100644 --- a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockBloodTank.java @@ -70,7 +70,7 @@ public class ItemBlockBloodTank extends ItemBlock implements IFluidContainerItem @SideOnly(Side.CLIENT) public void getSubItems(Item id, CreativeTabs creativeTab, List list) { - for (int i = 0; i < TileBloodTank.capacities.length; i++) + for (int i = 0; i < TileBloodTank.CAPACITIES.length; i++) list.add(new ItemStack(id, 1, i)); } @@ -89,7 +89,7 @@ public class ItemBlockBloodTank extends ItemBlock implements IFluidContainerItem @Override public int getCapacity(ItemStack container) { - return container != null && Block.getBlockFromItem(container.getItem()) instanceof BlockBloodTank ? TileBloodTank.capacities[container.getMetadata()] * Fluid.BUCKET_VOLUME : 0; + return container != null && Block.getBlockFromItem(container.getItem()) instanceof BlockBloodTank ? TileBloodTank.CAPACITIES[container.getMetadata()] * Fluid.BUCKET_VOLUME : 0; } @Override diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java b/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java index ab5f7963..3f0001c3 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileBloodTank.java @@ -14,17 +14,17 @@ public class TileBloodTank extends TileBase public int capacity; protected FluidTank tank; - public static int[] capacities = { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65336, 131072, 262144, 524288 }; + public static final int[] CAPACITIES = { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65336, 131072, 262144, 524288 }; public TileBloodTank(int meta) { - capacity = capacities[meta] * Fluid.BUCKET_VOLUME; + capacity = CAPACITIES[meta] * Fluid.BUCKET_VOLUME; tank = new FluidTank(capacity); } public TileBloodTank() { - capacity = capacities[0] * Fluid.BUCKET_VOLUME; + capacity = CAPACITIES[0] * Fluid.BUCKET_VOLUME; tank = new FluidTank(capacity); } diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockBloodTank.json b/src/main/resources/assets/bloodmagic/blockstates/BlockBloodTank.json index dec6ffb2..d71d03f6 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/BlockBloodTank.json +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockBloodTank.json @@ -2,7 +2,7 @@ "forge_marker": 1, "defaults": { "textures": { "all": "bloodmagic:blocks/BloodTank" }, - "model": "cube_all", + "model": "bloodmagic:BlockBloodTank", "uvlock": true }, "variants": { diff --git a/src/main/resources/assets/bloodmagic/models/block/BlockBloodTank.json b/src/main/resources/assets/bloodmagic/models/block/BlockBloodTank.json new file mode 100644 index 00000000..679b2ac7 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/BlockBloodTank.json @@ -0,0 +1,357 @@ +{ + "__comment": "Copyright © InsomniaKitten 2016", + "textures": { + "texture": "bloodmagic:blocks/BloodTank" + }, + "elements": [ + { + "from": [ 3, 0, 3 ], + "to": [ 13, 1, 13 ], + "faces": { + "down": { "uv": [ 5, 0, 10, 5 ], "texture": "#texture", "cullface": "down" }, + "up": { "uv": [ 5, 0, 10, 5 ], "texture": "#texture" }, + "north": { "uv": [ 0, 6.5, 5, 7 ], "texture": "#texture" }, + "south": { "uv": [ 0, 6.5, 5, 7 ], "texture": "#texture" }, + "west": { "uv": [ 0, 6.5, 5, 7 ], "texture": "#texture" }, + "east": { "uv": [ 0, 6.5, 5, 7 ], "texture": "#texture" } + } + }, + { + "from": [ 3, 1, 3 ], + "to": [ 4, 14, 4 ], + "faces": { + "up": { "uv": [ 4.5, 11.5, 5, 12 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 3, 1, 4 ], + "to": [ 4, 14, 5 ], + "faces": { + "up": { "uv": [ 4.5, 11, 5, 11.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 3, 1, 5 ], + "to": [ 4, 2, 11 ], + "faces": { + "up": { "uv": [ 0.5, 1.5, 1, 4.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 3, 1, 11 ], + "to": [ 4, 14, 12 ], + "faces": { + "up": { "uv": [ 4.5, 7.5, 5, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 3, 1, 12 ], + "to": [ 4, 14, 13 ], + "faces": { + "up": { "uv": [ 4.5, 7, 5, 7.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 7 ], "texture": "#texture" }, + "west": { "uv": [ 0, 0, 0.5, 7 ], "texture": "#texture" } + } + }, + { + "from": [ 3, 10, 5 ], + "to": [ 4, 12, 11 ], + "faces": { + "down": { "uv": [ 4.5, 8, 5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 4.5, 8, 5, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, + "east": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } + } + }, + { + "from": [ 3, 13, 5 ], + "to": [ 4, 14, 11 ], + "faces": { + "down": { "uv": [ 1, 11.5, 4, 12 ], "texture": "#texture" }, + "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" } + } + }, + { + "from": [ 4, 1, 3 ], + "to": [ 5, 14, 4 ], + "faces": { + "up": { "uv": [ 4, 11.5, 4.5, 12 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 4, 1, 12 ], + "to": [ 5, 14, 13 ], + "faces": { + "up": { "uv": [ 4, 7, 4.5, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 4, 11, 4 ], + "to": [ 12, 12, 12 ], + "faces": { + "down": { "uv": [ 5.5, 0.5, 9.5, 4.5 ], "texture": "#texture" }, + "up": { "uv": [ 5.5, 0.5, 9.5, 4.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 7.5, 4.5, 8 ], "texture": "#texture" }, + "south": { "uv": [ 0.5, 11, 4.5, 11.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 7.5, 1, 11.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 7.5, 4.5, 11.5 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 1, 3 ], + "to": [ 11, 2, 4 ], + "faces": { + "up": { "uv": [ 1, 1.5, 4, 2 ], "texture": "#texture" }, + "north": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 1, 12 ], + "to": [ 11, 2, 13 ], + "faces": { + "up": { "uv": [ 1, 1.5, 4, 2 ], "texture": "#texture" }, + "north": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 10, 3 ], + "to": [ 11, 12, 4 ], + "faces": { + "down": { "uv": [ 1, 1.5, 4, 2 ], "texture": "#texture" }, + "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, + "south": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 10, 12 ], + "to": [ 11, 12, 13 ], + "faces": { + "down": { "uv": [ 1, 1.5, 4, 2 ], "texture": "#texture" }, + "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, + "south": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 12, 5 ], + "to": [ 11, 13, 11 ], + "faces": { + "up": { "uv": [ 1, 8, 4, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5.5, 8, 6 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5.5, 8, 6 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5.5, 8, 6 ], "texture": "#texture" }, + "east": { "uv": [ 5, 5.5, 8, 6 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 13, 3 ], + "to": [ 11, 14, 4 ], + "faces": { + "down": { "uv": [ 1, 11.5, 4, 12 ], "texture": "#texture" }, + "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 13, 6 ], + "to": [ 6, 14, 10 ], + "faces": { + "up": { "uv": [ 3.5, 8.5, 4, 10.5 ], "texture": "#texture" }, + "north": { "uv": [ 7.5, 5, 8, 5.5 ], "texture": "#texture" }, + "south": { "uv": [ 5, 5, 5.5, 5.5 ], "texture": "#texture" }, + "west": { "uv": [ 5.5, 5, 7.5, 5.5 ], "texture": "#texture" } + } + }, + { + "from": [ 5, 13, 12 ], + "to": [ 11, 14, 13 ], + "faces": { + "down": { "uv": [ 1, 11.5, 4, 12 ], "texture": "#texture" }, + "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" }, + "south": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6, 13, 5 ], + "to": [ 10, 14, 6 ], + "faces": { + "up": { "uv": [ 1.5, 10.5, 3.5, 11 ], "texture": "#texture" }, + "north": { "uv": [ 5.5, 5, 7.5, 5.5 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5, 5.5, 5.5 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 5, 8, 5.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6, 13, 6 ], + "to": [ 10, 14, 10 ], + "faces": { + "up": { "uv": [ 1.5, 8.499999, 3.5, 10.5 ], "texture": "#texture" } + } + }, + { + "from": [ 6, 13, 10 ], + "to": [ 10, 14, 11 ], + "faces": { + "up": { "uv": [ 1.5, 8, 3.5, 8.5 ], "texture": "#texture" }, + "south": { "uv": [ 5.5, 5, 7.5, 5.5 ], "texture": "#texture" }, + "west": { "uv": [ 5, 5, 5.5, 5.5 ], "texture": "#texture" }, + "east": { "uv": [ 7.5, 5, 8, 5.5 ], "texture": "#texture" } + } + }, + { + "from": [ 10, 13, 6 ], + "to": [ 11, 14, 10 ], + "faces": { + "up": { "uv": [ 1, 8.5, 1.5, 10.5 ], "texture": "#texture" }, + "north": { "uv": [ 5, 5, 5.5, 5.5 ], "texture": "#texture" }, + "south": { "uv": [ 7.5, 5, 8, 5.5 ], "texture": "#texture" }, + "east": { "uv": [ 5.5, 5, 7.5, 5.5 ], "texture": "#texture" } + } + }, + { + "from": [ 11, 1, 3 ], + "to": [ 12, 14, 4 ], + "faces": { + "up": { "uv": [ 0.5, 11.5, 1, 12 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 11, 1, 12 ], + "to": [ 12, 14, 13 ], + "faces": { + "up": { "uv": [ 0.5, 7, 1, 7.5 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 12, 1, 3 ], + "to": [ 13, 14, 4 ], + "faces": { + "up": { "uv": [ 0, 11.5, 0.5, 12 ], "texture": "#texture" }, + "north": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 12, 1, 4 ], + "to": [ 13, 14, 5 ], + "faces": { + "up": { "uv": [ 0, 11, 0.5, 11.5 ], "texture": "#texture" }, + "south": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 12, 1, 5 ], + "to": [ 13, 2, 11 ], + "faces": { + "up": { "uv": [ 0.5, 1.5, 1, 4.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 1, 6, 4, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 12, 1, 11 ], + "to": [ 13, 14, 12 ], + "faces": { + "up": { "uv": [ 0, 7.5, 0.5, 8 ], "texture": "#texture" }, + "north": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "west": { "uv": [ 0.5, 0, 1, 6.5 ], "texture": "#texture" }, + "east": { "uv": [ 4, 0, 4.5, 6.5 ], "texture": "#texture" } + } + }, + { + "from": [ 12, 1, 12 ], + "to": [ 13, 14, 13 ], + "faces": { + "up": { "uv": [ 0, 7, 0.5, 7.5 ], "texture": "#texture" }, + "south": { "uv": [ 0, 0, 0.5, 7 ], "texture": "#texture" }, + "east": { "uv": [ 0, 0, 0.5, 7 ], "texture": "#texture" } + } + }, + { + "from": [ 12, 10, 5 ], + "to": [ 13, 12, 11 ], + "faces": { + "down": { "uv": [ 0, 8, 0.5, 11 ], "texture": "#texture" }, + "up": { "uv": [ 0, 8, 0.5, 11 ], "texture": "#texture" }, + "west": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" }, + "east": { "uv": [ 1, 1, 4, 2 ], "texture": "#texture" } + } + }, + { + "from": [ 12, 13, 5 ], + "to": [ 13, 14, 11 ], + "faces": { + "down": { "uv": [ 1, 11.5, 4, 12 ], "texture": "#texture" }, + "up": { "uv": [ 1, 7, 4, 7.5 ], "texture": "#texture" }, + "west": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" }, + "east": { "uv": [ 1, 0, 4, 0.5 ], "texture": "#texture" } + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "thirdperson_lefthand": { + "rotation": [ 75, 45, 0 ], + "translation": [ 0, 2.5, 0 ], + "scale": [ 0.375, 0.375, 0.375 ] + }, + "firstperson_righthand": { + "rotation": [ 0, 45, 0 ], + "scale": [ 0.4, 0.4, 0.4 ] + }, + "firstperson_lefthand": { + "rotation": [ 0, 45, 0 ], + "scale": [ 0.4, 0.4, 0.4 ] + }, + "gui": { + "rotation": [ 30, 225, 0 ], + "scale": [ 0.625, 0.625, 0.625 ] + }, + "head": { + "translation": [ 0, 12, 0 ], + "scale": [ 0.5, 0.5, 0.5 ] + }, + "ground": { + "translation": [ 0, 3, 0 ], + "scale": [ 0.25, 0.25, 0.25 ] + }, + "fixed": { + "scale": [ 0.5, 0.5, 0.5 ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/textures/blocks/BloodTank.png b/src/main/resources/assets/bloodmagic/textures/blocks/BloodTank.png index 7aafa5f340d94ce5b4efc04b6b45b6784b2e1d36..7c0348df62e99a88804c7510cee39157e10b3901 100644 GIT binary patch literal 911 zcmV;A191F_P)|75QV>p%aN5kd%*Qn(sdoGimFz^ z8}_gIp?a3s}@3-Iruc$$ap+vGMS*N^&k&oW?Wre zp{ke}rIadrO6duiN6s@6D5cPK9k;i)a(sMjr4(6PTLWM)7_hjwXh6+2##l+@oKe;4 zA1~c3P?z@PJe9>_qP{AbIwdA6V}()0Vt*PPqBW@ zz3sdVu0YLZ4iCf-0wDx)&XiJ2Rb?8`%uI65bx@5)Bf735rBq3I2~tXQT{k-ce>goo zHP2pE?J=fQm;Zc!&r(Xf34yz>Us+J)qG|Z!^0F${FUL#q#Dty^AZ{oh$4e;@M7YnH zfe5V`KRlCs9uLUM%8HFfBUH6IyX(68tg77J-tx=m&wOcHK79Pha5(gmAtG#UZn|}~TgKB010DF6THFMwz2@zpuXNM%h-Lz%5x3}v7{fRh_2coKyQsVdb?-_-_f-2dJ z#*E9h<+uI)$3Vb>DqCAy|LXdAMsf6gzMK--j6bK+FAoO9sS-f_?s=B~S%I$W2qB;% zoKGekTwPJj_;qQCp9TYBjKmn(zqt6v>Cz)OHv!)TZ7C!XiWw?`iqM$RG|iJG<5#u* zePJHyD*?aD0W7D)ySH!Y%=j)w!Z$MVEc>qa3&~u|$lLHs*HM5UQ{wv=5#VMzke1nO5 z;9`~q?mj{dViRv%SLEY75dW=3@sTp4Mu#g?folop0afXw_7}np=ijKG6YyoakZ>i* tIr5SCZ}(jm*B9)|>MggpT4jE