Browse Source

added crate and cauldron for each wood type, cauldrons water is rendered with desired color, bugfixes

Kajetan Johannes Hammerle 7 years ago
parent
commit
959d3c40dd
93 changed files with 1308 additions and 39 deletions
  1. 23 0
      src/main/java/me/km/ClientProxy.java
  2. 10 25
      src/main/java/me/km/KajetansMod.java
  3. 1 1
      src/main/java/me/km/ObjectRegistry.java
  4. 1 0
      src/main/java/me/km/api/ModuleCommand.java
  5. 0 3
      src/main/java/me/km/blocks/BlockCampFire.java
  6. 70 0
      src/main/java/me/km/blocks/BlockModCauldron.java
  7. 29 0
      src/main/java/me/km/blocks/BlockWoodCauldron.java
  8. 46 1
      src/main/java/me/km/blocks/ModBlocks.java
  9. 106 0
      src/main/java/me/km/blocks/TileEntityCauldron.java
  10. 3 3
      src/main/java/me/km/commands/CommandInvSee.java
  11. 15 3
      src/main/java/me/km/items/ModItems.java
  12. 1 0
      src/main/java/me/km/playerbank/PlayerManager.java
  13. 1 2
      src/main/java/me/km/plots/CommandPlot.java
  14. 1 1
      src/main/java/me/km/snuviscript/ScriptEvents.java
  15. 8 0
      src/main/resources/assets/km/blockstates/cauldron_acacia.json
  16. 8 0
      src/main/resources/assets/km/blockstates/cauldron_big_oak.json
  17. 8 0
      src/main/resources/assets/km/blockstates/cauldron_birch.json
  18. 8 0
      src/main/resources/assets/km/blockstates/cauldron_jungle.json
  19. 8 0
      src/main/resources/assets/km/blockstates/cauldron_oak.json
  20. 8 0
      src/main/resources/assets/km/blockstates/cauldron_spruce.json
  21. 5 0
      src/main/resources/assets/km/blockstates/crate_acacia.json
  22. 5 0
      src/main/resources/assets/km/blockstates/crate_big_oak.json
  23. 5 0
      src/main/resources/assets/km/blockstates/crate_birch.json
  24. 5 0
      src/main/resources/assets/km/blockstates/crate_jungle.json
  25. 5 0
      src/main/resources/assets/km/blockstates/crate_oak.json
  26. 5 0
      src/main/resources/assets/km/blockstates/crate_spruce.json
  27. 14 0
      src/main/resources/assets/km/lang/en_US.lang
  28. 10 0
      src/main/resources/assets/km/models/block/cauldron/acacia/cauldron_empty.json
  29. 11 0
      src/main/resources/assets/km/models/block/cauldron/acacia/cauldron_level1.json
  30. 11 0
      src/main/resources/assets/km/models/block/cauldron/acacia/cauldron_level2.json
  31. 11 0
      src/main/resources/assets/km/models/block/cauldron/acacia/cauldron_level3.json
  32. 10 0
      src/main/resources/assets/km/models/block/cauldron/big_oak/cauldron_empty.json
  33. 11 0
      src/main/resources/assets/km/models/block/cauldron/big_oak/cauldron_level1.json
  34. 11 0
      src/main/resources/assets/km/models/block/cauldron/big_oak/cauldron_level2.json
  35. 11 0
      src/main/resources/assets/km/models/block/cauldron/big_oak/cauldron_level3.json
  36. 10 0
      src/main/resources/assets/km/models/block/cauldron/birch/cauldron_empty.json
  37. 11 0
      src/main/resources/assets/km/models/block/cauldron/birch/cauldron_level1.json
  38. 11 0
      src/main/resources/assets/km/models/block/cauldron/birch/cauldron_level2.json
  39. 11 0
      src/main/resources/assets/km/models/block/cauldron/birch/cauldron_level3.json
  40. 148 0
      src/main/resources/assets/km/models/block/cauldron/cauldron_empty.json
  41. 154 0
      src/main/resources/assets/km/models/block/cauldron/cauldron_level1.json
  42. 154 0
      src/main/resources/assets/km/models/block/cauldron/cauldron_level2.json
  43. 154 0
      src/main/resources/assets/km/models/block/cauldron/cauldron_level3.json
  44. 10 0
      src/main/resources/assets/km/models/block/cauldron/jungle/cauldron_empty.json
  45. 11 0
      src/main/resources/assets/km/models/block/cauldron/jungle/cauldron_level1.json
  46. 11 0
      src/main/resources/assets/km/models/block/cauldron/jungle/cauldron_level2.json
  47. 11 0
      src/main/resources/assets/km/models/block/cauldron/jungle/cauldron_level3.json
  48. 10 0
      src/main/resources/assets/km/models/block/cauldron/oak/cauldron_empty.json
  49. 11 0
      src/main/resources/assets/km/models/block/cauldron/oak/cauldron_level1.json
  50. 11 0
      src/main/resources/assets/km/models/block/cauldron/oak/cauldron_level2.json
  51. 11 0
      src/main/resources/assets/km/models/block/cauldron/oak/cauldron_level3.json
  52. 10 0
      src/main/resources/assets/km/models/block/cauldron/spruce/cauldron_empty.json
  53. 11 0
      src/main/resources/assets/km/models/block/cauldron/spruce/cauldron_level1.json
  54. 11 0
      src/main/resources/assets/km/models/block/cauldron/spruce/cauldron_level2.json
  55. 11 0
      src/main/resources/assets/km/models/block/cauldron/spruce/cauldron_level3.json
  56. 6 0
      src/main/resources/assets/km/models/block/crate/crate_acacia.json
  57. 6 0
      src/main/resources/assets/km/models/block/crate/crate_big_oak.json
  58. 6 0
      src/main/resources/assets/km/models/block/crate/crate_birch.json
  59. 6 0
      src/main/resources/assets/km/models/block/crate/crate_jungle.json
  60. 6 0
      src/main/resources/assets/km/models/block/crate/crate_oak.json
  61. 6 0
      src/main/resources/assets/km/models/block/crate/crate_spruce.json
  62. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/acacia/cauldron_bottom.png
  63. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/acacia/cauldron_inner.png
  64. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/acacia/cauldron_side.png
  65. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/acacia/cauldron_top.png
  66. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/big_oak/cauldron_bottom.png
  67. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/big_oak/cauldron_inner.png
  68. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/big_oak/cauldron_side.png
  69. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/big_oak/cauldron_top.png
  70. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/birch/cauldron_bottom.png
  71. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/birch/cauldron_inner.png
  72. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/birch/cauldron_side.png
  73. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/birch/cauldron_top.png
  74. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/jungle/cauldron_bottom.png
  75. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/jungle/cauldron_inner.png
  76. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/jungle/cauldron_side.png
  77. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/jungle/cauldron_top.png
  78. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/oak/cauldron_bottom.png
  79. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/oak/cauldron_inner.png
  80. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/oak/cauldron_side.png
  81. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/oak/cauldron_top.png
  82. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/spruce/cauldron_bottom.png
  83. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/spruce/cauldron_inner.png
  84. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/spruce/cauldron_side.png
  85. BIN
      src/main/resources/assets/km/textures/blocks/cauldron/spruce/cauldron_top.png
  86. BIN
      src/main/resources/assets/km/textures/blocks/crates/crate_acacia.png
  87. BIN
      src/main/resources/assets/km/textures/blocks/crates/crate_big_oak.png
  88. BIN
      src/main/resources/assets/km/textures/blocks/crates/crate_birch.png
  89. BIN
      src/main/resources/assets/km/textures/blocks/crates/crate_jungle.png
  90. BIN
      src/main/resources/assets/km/textures/blocks/crates/crate_oak.png
  91. BIN
      src/main/resources/assets/km/textures/blocks/crates/crate_spruce.png
  92. BIN
      src/main/resources/assets/km/textures/blocks/grey_water_still.png
  93. 5 0
      src/main/resources/assets/km/textures/blocks/grey_water_still.png.mcmeta

+ 23 - 0
src/main/java/me/km/ClientProxy.java

@@ -1,19 +1,26 @@
 package me.km;
 package me.km;
 
 
+import me.km.blocks.ModBlocks;
+import me.km.blocks.TileEntityCauldron;
 import me.km.entities.ModEntities;
 import me.km.entities.ModEntities;
 import me.km.items.ModelCylinder;
 import me.km.items.ModelCylinder;
 import me.km.items.ModelHat;
 import me.km.items.ModelHat;
 import me.km.networking.KeyManager;
 import me.km.networking.KeyManager;
 import net.minecraft.block.Block;
 import net.minecraft.block.Block;
 import net.minecraft.block.state.IBlockState;
 import net.minecraft.block.state.IBlockState;
+import net.minecraft.client.Minecraft;
 import net.minecraft.client.model.ModelBiped;
 import net.minecraft.client.model.ModelBiped;
 import net.minecraft.client.renderer.block.model.ModelBakery;
 import net.minecraft.client.renderer.block.model.ModelBakery;
 import net.minecraft.client.renderer.block.model.ModelResourceLocation;
 import net.minecraft.client.renderer.block.model.ModelResourceLocation;
 import net.minecraft.client.renderer.block.statemap.StateMapperBase;
 import net.minecraft.client.renderer.block.statemap.StateMapperBase;
+import net.minecraft.client.renderer.color.BlockColors;
+import net.minecraft.client.renderer.color.IBlockColor;
 import net.minecraft.client.renderer.entity.Render;
 import net.minecraft.client.renderer.entity.Render;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.Entity;
 import net.minecraft.item.Item;
 import net.minecraft.item.Item;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.IBlockAccess;
 import net.minecraftforge.client.model.ModelLoader;
 import net.minecraftforge.client.model.ModelLoader;
 import net.minecraftforge.common.MinecraftForge;
 import net.minecraftforge.common.MinecraftForge;
 import net.minecraftforge.fluids.IFluidBlock;
 import net.minecraftforge.fluids.IFluidBlock;
@@ -65,6 +72,22 @@ public class ClientProxy extends CommonProxy
         ModEntities.initClient();
         ModEntities.initClient();
         MinecraftForge.EVENT_BUS.register(new ClientEvents());
         MinecraftForge.EVENT_BUS.register(new ClientEvents());
         MinecraftForge.EVENT_BUS.register(new KeyManager());
         MinecraftForge.EVENT_BUS.register(new KeyManager());
+        IBlockColor colorer = (IBlockState state, IBlockAccess w, BlockPos pos, int tintIndex) -> 
+        {
+            TileEntityCauldron tile = (TileEntityCauldron) w.getTileEntity(pos);
+            if(tile == null) 
+            {
+                return -16777216;
+            }
+            return -16777216 | tile.getRed() << 16 | tile.getGreen() << 8 | tile.getBlue();
+        };
+        BlockColors colors = Minecraft.getMinecraft().getBlockColors();
+        colors.registerBlockColorHandler(colorer, ModBlocks.cauldronOak);
+        colors.registerBlockColorHandler(colorer, ModBlocks.cauldronAcacia);
+        colors.registerBlockColorHandler(colorer, ModBlocks.cauldronBigOak);
+        colors.registerBlockColorHandler(colorer, ModBlocks.cauldronBirch);
+        colors.registerBlockColorHandler(colorer, ModBlocks.cauldronJungle);
+        colors.registerBlockColorHandler(colorer, ModBlocks.cauldronSpruce);
     }
     }
 
 
     @Override
     @Override

+ 10 - 25
src/main/java/me/km/KajetansMod.java

@@ -4,6 +4,7 @@ import me.km.capabilities.CapabilitiesEvents;
 import me.km.api.Module;
 import me.km.api.Module;
 import me.km.api.SimpleConfig;
 import me.km.api.SimpleConfig;
 import me.km.api.CommandOverloader;
 import me.km.api.CommandOverloader;
+import me.km.api.Utils;
 import me.km.blockprotections.BlockProtectionBank;
 import me.km.blockprotections.BlockProtectionBank;
 import me.km.capabilities.DamageUtils;
 import me.km.capabilities.DamageUtils;
 import me.km.chatmanager.ChatManager;
 import me.km.chatmanager.ChatManager;
@@ -93,40 +94,24 @@ public class KajetansMod
         DamageUtils.init();
         DamageUtils.init();
         CapabilitiesEvents.init();
         CapabilitiesEvents.init();
         
         
-        /*net.minecraftforge.common.MinecraftForge.EVENT_BUS.register(new Object()
+        net.minecraftforge.common.MinecraftForge.EVENT_BUS.register(new Object()
             {
             {
-                public me.km.inventory.InventoryBase inv = null;
-                
                 @net.minecraftforge.fml.common.eventhandler.SubscribeEvent
                 @net.minecraftforge.fml.common.eventhandler.SubscribeEvent
                 public void wusi2(net.minecraftforge.event.ServerChatEvent e) 
                 public void wusi2(net.minecraftforge.event.ServerChatEvent e) 
                 {
                 {
-                    net.minecraft.entity.player.EntityPlayerMP p = e.getPlayer();
-                    if(inv == null)
+                    try
                     {
                     {
-                        System.out.println("NEU");
-                        inv = new me.km.inventory.InventoryBase("Test Titel", "2110211112302", p);
+                        net.minecraft.entity.player.EntityPlayerMP p = e.getPlayer();
+                        net.minecraft.util.math.BlockPos pos = Utils.getPlayerTarget(p);
+                        String[] parts = e.getMessage().split(" ");
+                        ((me.km.blocks.TileEntityCauldron) p.world.getTileEntity(pos))
+                                .setColor(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
                     }
                     }
-                    new me.km.inventory.CustomContainer(inv, p)
+                    catch(Exception ex)
                     {
                     {
-                        @Override
-                        public boolean onButtonClick(int slotId, int dragType, ClickType clickTypeIn, net.minecraft.entity.player.EntityPlayerMP player) 
-                        {
-                            return true;
-                        }
-                    }.openForPlayer();
-                }
-                
-                @net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-                public void changeConnectionOnJoin(net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent e)
-                {      
-                    if(e.player != null && e.player instanceof net.minecraft.entity.player.EntityPlayerMP)
-                    {
-                        net.minecraft.entity.player.EntityPlayerMP p = (net.minecraft.entity.player.EntityPlayerMP) e.player;
-                        // new handler sets connection with player in constructor, doing it twice
-                        p.connection = new me.km.playerbank.ModNetHandlerPlayServer(p.mcServer, p.connection.netManager, p);
                     }
                     }
                 }
                 }
-            });*/
+            });
     }
     }
     
     
     @Mod.EventHandler
     @Mod.EventHandler

+ 1 - 1
src/main/java/me/km/ObjectRegistry.java

@@ -38,8 +38,8 @@ public class ObjectRegistry
     @SubscribeEvent
     @SubscribeEvent
     public static void onItemRegistry(RegistryEvent.Register<Item> e) 
     public static void onItemRegistry(RegistryEvent.Register<Item> e) 
     {
     {
-        ModBlocks.initItemBlocks(e.getRegistry());
         ModItems.init(e.getRegistry());
         ModItems.init(e.getRegistry());
+        ModBlocks.initItemBlocks(e.getRegistry());
     }
     }
     
     
     @SubscribeEvent
     @SubscribeEvent

+ 1 - 0
src/main/java/me/km/api/ModuleCommand.java

@@ -101,6 +101,7 @@ public abstract class ModuleCommand extends CommandBase
         }
         }
         catch(Exception ex)
         catch(Exception ex)
         {
         {
+            ex.printStackTrace();
             if(KajetansMod.singlePlayer)
             if(KajetansMod.singlePlayer)
             {
             {
                 m.send(cs, "Dieser Command sollte nicht im SinglePlayer benutzt werden.");
                 m.send(cs, "Dieser Command sollte nicht im SinglePlayer benutzt werden.");

+ 0 - 3
src/main/java/me/km/blocks/BlockCampFire.java

@@ -1,14 +1,11 @@
 package me.km.blocks;
 package me.km.blocks;
 
 
 import java.util.Random;
 import java.util.Random;
-import static me.km.blocks.BlockModBed.PART;
 import me.km.items.ModItems;
 import me.km.items.ModItems;
 import net.minecraft.block.Block;
 import net.minecraft.block.Block;
-import net.minecraft.block.BlockBed;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.state.IBlockState;
 import net.minecraft.block.state.IBlockState;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.init.Items;
 import net.minecraft.item.Item;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.ItemStack;
 import net.minecraft.util.BlockRenderLayer;
 import net.minecraft.util.BlockRenderLayer;

+ 70 - 0
src/main/java/me/km/blocks/BlockModCauldron.java

@@ -0,0 +1,70 @@
+package me.km.blocks;
+
+import java.util.Random;
+import me.km.KajetansMod;
+import net.minecraft.block.BlockCauldron;
+import net.minecraft.block.ITileEntityProvider;
+import net.minecraft.block.SoundType;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+
+public class BlockModCauldron extends BlockCauldron implements IBlockBase, ITileEntityProvider
+{
+    protected String name;
+    private Item cauldron;
+
+    public BlockModCauldron(String name, String local) 
+    {
+        this.name = name;
+        this.setRegistryName(name);
+        super.setUnlocalizedName(local);
+        this.cauldron = null;
+        super.setHardness(2.0F);
+    }
+    
+    public void setItem(Item cauldron)
+    {
+        this.cauldron = cauldron;
+    }
+    
+    @Override
+    public void registerItemModel(Item itemBlock) 
+    {
+        KajetansMod.proxy.registerItemRenderer(itemBlock, 0, name);
+    }
+
+    @Override
+    public BlockModCauldron setSoundType(SoundType sound) 
+    {
+        super.setSoundType(sound);
+        return this;
+    }
+    
+    @Override
+    public Item getItemDropped(IBlockState state, Random rand, int fortune)
+    {
+        return cauldron;
+    }
+
+    @Override
+    public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state)
+    {
+        return new ItemStack(cauldron);
+    }
+
+    @Override
+    public TileEntity createNewTileEntity(World worldIn, int meta) 
+    {
+        return new TileEntityCauldron();
+    }
+    
+    @Override
+    public void breakBlock(World w, BlockPos pos, IBlockState state)
+    {
+        w.removeTileEntity(pos);
+    }
+}

+ 29 - 0
src/main/java/me/km/blocks/BlockWoodCauldron.java

@@ -0,0 +1,29 @@
+package me.km.blocks;
+
+import net.minecraft.block.SoundType;
+import net.minecraft.block.material.MapColor;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+public class BlockWoodCauldron extends BlockModCauldron
+{
+    public BlockWoodCauldron(String name, String local) 
+    {
+        super(name, local);
+    }
+
+    @Override
+    public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) 
+    {
+        return MapColor.WOOD;
+    }
+   
+    @Override
+    public SoundType getSoundType(IBlockState state, World world, BlockPos pos, Entity entity) 
+    {
+        return SoundType.WOOD;
+    }
+}

+ 46 - 1
src/main/java/me/km/blocks/ModBlocks.java

@@ -5,9 +5,11 @@ import me.km.fluids.BlockFluidHoney;
 import me.km.fluids.BlockFluidPoison;
 import me.km.fluids.BlockFluidPoison;
 import me.km.fluids.ModFluids;
 import me.km.fluids.ModFluids;
 import me.km.items.ItemMetal;
 import me.km.items.ItemMetal;
+import me.km.items.ModItems;
 import net.minecraft.block.Block;
 import net.minecraft.block.Block;
 import net.minecraft.block.material.MapColor;
 import net.minecraft.block.material.MapColor;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.material.Material;
+import net.minecraft.creativetab.CreativeTabs;
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Blocks;
 import net.minecraft.item.Item;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemBlock;
 import net.minecraft.item.ItemBlock;
@@ -34,6 +36,20 @@ public class ModBlocks
     public static BlockHay realHayBlock;
     public static BlockHay realHayBlock;
     public static BlockHayBed realHayBed;
     public static BlockHayBed realHayBed;
     
     
+    public static BlockBase crateAcacia;
+    public static BlockBase crateBigOak;
+    public static BlockBase crateBirch;
+    public static BlockBase crateJungle;
+    public static BlockBase crateOak;
+    public static BlockBase crateSpruce;
+    
+    public static BlockWoodCauldron cauldronOak;
+    public static BlockWoodCauldron cauldronBirch;
+    public static BlockWoodCauldron cauldronAcacia;
+    public static BlockWoodCauldron cauldronJungle;
+    public static BlockWoodCauldron cauldronSpruce;
+    public static BlockWoodCauldron cauldronBigOak;
+    
     public static BlockCampFire campFire;
     public static BlockCampFire campFire;
     public static BlockCampFireBurning campFireBurning;
     public static BlockCampFireBurning campFireBurning;
     public static BlockCampFireBurnt campFireBurnt;
     public static BlockCampFireBurnt campFireBurnt;
@@ -66,7 +82,22 @@ public class ModBlocks
         artefact = register(r, (BlockBase) new BlockBase(Material.IRON, "artefact", "artefact")
         artefact = register(r, (BlockBase) new BlockBase(Material.IRON, "artefact", "artefact")
                 .setHardness(50.0F).setResistance(2000.0F));
                 .setHardness(50.0F).setResistance(2000.0F));
         realHayBlock = register(r, new BlockHay("real_hay_block", "realHayBlock"));
         realHayBlock = register(r, new BlockHay("real_hay_block", "realHayBlock"));
-        realHayBed = register(r, new BlockHayBed("real_hay_bed", "realHayBlock"));
+        realHayBed = register(r, new BlockHayBed("real_hay_bed", "realHayBed"));
+        
+        crateAcacia = register(r, new BlockBase(Material.WOOD, "crate_acacia", "crateAcacia").setCreativeTab(CreativeTabs.DECORATIONS));
+        crateBigOak = register(r, new BlockBase(Material.WOOD, "crate_big_oak", "crateBigOak").setCreativeTab(CreativeTabs.DECORATIONS));
+        crateBirch = register(r, new BlockBase(Material.WOOD, "crate_birch", "crateBirch").setCreativeTab(CreativeTabs.DECORATIONS));
+        crateJungle = register(r, new BlockBase(Material.WOOD, "crate_jungle", "crateJungle").setCreativeTab(CreativeTabs.DECORATIONS));
+        crateOak = register(r, new BlockBase(Material.WOOD, "crate_oak", "crateOak").setCreativeTab(CreativeTabs.DECORATIONS));
+        crateSpruce = register(r, new BlockBase(Material.WOOD, "crate_spruce", "crateSpruce").setCreativeTab(CreativeTabs.DECORATIONS));
+        
+        cauldronOak = register(r, new BlockWoodCauldron("cauldron_oak", "cauldronOak"));
+        cauldronBirch = register(r, new BlockWoodCauldron("cauldron_birch", "cauldronBirch"));
+        cauldronAcacia = register(r, new BlockWoodCauldron("cauldron_acacia", "cauldronAcacia"));
+        cauldronJungle = register(r, new BlockWoodCauldron("cauldron_jungle", "cauldronJungle"));
+        cauldronSpruce = register(r, new BlockWoodCauldron("cauldron_spruce", "cauldronSpruce"));
+        cauldronBigOak = register(r, new BlockWoodCauldron("cauldron_big_oak", "cauldronBigOak"));
+        GameRegistry.registerTileEntity(TileEntityCauldron.class, "km:cauldron");
         
         
         campFire = register(r, new BlockCampFire("camp_fire", "campFire"));
         campFire = register(r, new BlockCampFire("camp_fire", "campFire"));
         campFireBurning = (BlockCampFireBurning) register(r, new BlockCampFireBurning("camp_fire_burning", "campFireBurning")).setLightLevel(1);
         campFireBurning = (BlockCampFireBurning) register(r, new BlockCampFireBurning("camp_fire_burning", "campFireBurning")).setLightLevel(1);
@@ -110,6 +141,20 @@ public class ModBlocks
         
         
         register(r, realHayBlock, getItemBlock(realHayBlock));
         register(r, realHayBlock, getItemBlock(realHayBlock));
         
         
+        register(r, crateAcacia, getItemBlock(crateAcacia));
+        register(r, crateBigOak, getItemBlock(crateBigOak));
+        register(r, crateBirch, getItemBlock(crateBirch));
+        register(r, crateJungle, getItemBlock(crateJungle));
+        register(r, crateOak, getItemBlock(crateOak));
+        register(r, crateSpruce, getItemBlock(crateSpruce));
+        
+        cauldronOak.setItem(ModItems.cauldronOak);
+        cauldronBirch.setItem(ModItems.cauldronBirch);
+        cauldronAcacia.setItem(ModItems.cauldronAcacia);
+        cauldronJungle.setItem(ModItems.cauldronJungle);
+        cauldronSpruce.setItem(ModItems.cauldronSpruce);
+        cauldronBigOak.setItem(ModItems.cauldronBigOak);
+        
         // traps
         // traps
         register(r, spikes, getItemMetal(spikes));
         register(r, spikes, getItemMetal(spikes));
         
         

+ 106 - 0
src/main/java/me/km/blocks/TileEntityCauldron.java

@@ -0,0 +1,106 @@
+package me.km.blocks;
+
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.NetworkManager;
+import net.minecraft.network.play.server.SPacketUpdateTileEntity;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
+
+public class TileEntityCauldron extends TileEntity
+{
+    private byte red;
+    private byte green;
+    private byte blue;
+    
+    public TileEntityCauldron()
+    {
+        red = -81;
+        green = -61;
+        blue = 116;
+    }
+    
+    @Override
+    public NBTTagCompound writeToNBT(NBTTagCompound com)
+    {
+        super.writeToNBT(com);
+        com.setByte("red", red);
+        com.setByte("green", green);
+        com.setByte("blue", blue);
+        return com;
+    }
+
+    @Override
+    protected void setWorldCreate(World w)
+    {
+        this.setWorld(w);
+    }
+
+    @Override
+    public void readFromNBT(NBTTagCompound com)
+    {
+        super.readFromNBT(com);
+        red = com.getByte("red");
+        green = com.getByte("green");
+        blue = com.getByte("blue");
+    }
+
+    public int getRed() 
+    {
+        return red + 128;
+    }
+
+    public int getGreen() 
+    {
+        return green + 128;
+    }
+
+    public int getBlue() 
+    {
+        return blue + 128;
+    }
+
+    public void setColor(int red, int green, int blue)
+    {
+        this.red = (byte) ((red & 0xFF) - 128);
+        this.green = (byte) ((green & 0xFF) - 128);
+        this.blue = (byte) ((blue & 0xFF) - 128);
+        notifyBlockUpdate();
+        markDirty();
+    }
+    
+    private void notifyBlockUpdate()
+    {
+        IBlockState state = world.getBlockState(pos);
+        this.world.notifyBlockUpdate(pos, state, state, 3);
+    }
+    
+    @Override
+    public SPacketUpdateTileEntity getUpdatePacket()
+    {
+        return new SPacketUpdateTileEntity(this.pos, -1, this.getUpdateTag());
+    }
+    
+    @Override
+    public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) 
+    {
+        NBTTagCompound com = pkt.getNbtCompound();
+        red = com.getByte("red");
+        green = com.getByte("green");
+        blue = com.getByte("blue");
+        notifyBlockUpdate();
+    }
+
+    @Override
+    public NBTTagCompound getUpdateTag()
+    {
+        return this.writeToNBT(new NBTTagCompound());
+    }
+    
+    @Override
+    public boolean shouldRefresh(World w, BlockPos pos, IBlockState oldState, IBlockState newState)
+    {
+        return oldState.getBlock() != newState.getBlock();
+    }
+}

+ 3 - 3
src/main/java/me/km/commands/CommandInvSee.java

@@ -7,7 +7,7 @@ import me.km.api.ModuleCommand;
 import me.km.exception.PlayerNotFoundException;
 import me.km.exception.PlayerNotFoundException;
 import me.km.permissions.Permissions;
 import me.km.permissions.Permissions;
 import net.minecraft.command.ICommandSender;
 import net.minecraft.command.ICommandSender;
-import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
 
 
 public class CommandInvSee extends ModuleCommand
 public class CommandInvSee extends ModuleCommand
 {
 {
@@ -22,7 +22,7 @@ public class CommandInvSee extends ModuleCommand
     @Override
     @Override
     public boolean execute(ICommandSender cs, String[] arg) 
     public boolean execute(ICommandSender cs, String[] arg) 
     {
     {
-        if(!(cs instanceof EntityPlayer))
+        if(!(cs instanceof EntityPlayerMP))
         {
         {
             this.getModule().send(cs, GlobalText.onlyPlayer());
             this.getModule().send(cs, GlobalText.onlyPlayer());
             return true;
             return true;
@@ -31,7 +31,7 @@ public class CommandInvSee extends ModuleCommand
         {
         {
             return false;
             return false;
         }
         }
-        EntityPlayer p = (EntityPlayer) cs;
+        EntityPlayerMP p = (EntityPlayerMP) cs;
         try
         try
         {
         {
             p.displayGUIChest(Utils.getPlayerByName(arg[0]).inventory);
             p.displayGUIChest(Utils.getPlayerByName(arg[0]).inventory);

+ 15 - 3
src/main/java/me/km/items/ModItems.java

@@ -185,6 +185,13 @@ public class ModItems
     public static ItemBase wolfFur; 
     public static ItemBase wolfFur; 
     public static ItemBlockSpecial campFire; 
     public static ItemBlockSpecial campFire; 
     
     
+    public static ItemBlockSpecial cauldronOak;
+    public static ItemBlockSpecial cauldronBirch;
+    public static ItemBlockSpecial cauldronAcacia;
+    public static ItemBlockSpecial cauldronJungle;
+    public static ItemBlockSpecial cauldronSpruce;
+    public static ItemBlockSpecial cauldronBigOak;
+    
     public static void init(IForgeRegistry<Item> r) 
     public static void init(IForgeRegistry<Item> r) 
     {
     {
         // nuggets and ingots
         // nuggets and ingots
@@ -319,9 +326,14 @@ public class ModItems
         batWing = register(r, new ItemBase("bat_wing", "batWing").setCreativeTab(CreativeTabs.MATERIALS));
         batWing = register(r, new ItemBase("bat_wing", "batWing").setCreativeTab(CreativeTabs.MATERIALS));
         wolfFur = register(r, new ItemBase("wolf_fur", "wolfFur").setCreativeTab(CreativeTabs.MATERIALS));
         wolfFur = register(r, new ItemBase("wolf_fur", "wolfFur").setCreativeTab(CreativeTabs.MATERIALS));
         
         
-        campFire = new ItemBlockSpecial("camp_fire", "camp_fire_item", "campFire", ModBlocks.campFire);
-        r.register(campFire);
-        campFire.registerItemModel(campFire);
+        campFire = register(r, new ItemBlockSpecial("camp_fire", "camp_fire_item", "campFire", ModBlocks.campFire));
+        
+        cauldronOak = register(r, new ItemBlockSpecial("cauldron_oak", "cauldron_oak_item", "cauldronOak", ModBlocks.cauldronOak));
+        cauldronBirch = register(r, new ItemBlockSpecial("cauldron_birch", "cauldron_birch_item", "cauldronBirch", ModBlocks.cauldronBirch));
+        cauldronAcacia = register(r, new ItemBlockSpecial("cauldron_acacia", "cauldron_acacia_item", "cauldronAcacia", ModBlocks.cauldronAcacia));
+        cauldronJungle = register(r, new ItemBlockSpecial("cauldron_jungle", "cauldron_jungle_item", "cauldronJungle", ModBlocks.cauldronJungle));
+        cauldronSpruce = register(r, new ItemBlockSpecial("cauldron_spruce", "cauldron_spruce_item", "cauldronSpruce", ModBlocks.cauldronSpruce));
+        cauldronBigOak = register(r, new ItemBlockSpecial("cauldron_big_oak", "cauldron_big_oak_item", "cauldronBigOak", ModBlocks.cauldronBigOak));
         
         
         try
         try
         {
         {

+ 1 - 0
src/main/java/me/km/playerbank/PlayerManager.java

@@ -21,6 +21,7 @@ public class PlayerManager extends Module
         data = new HashMap<>();
         data = new HashMap<>();
         back = new HashMap<>();
         back = new HashMap<>();
         bank = new PlayerBank(this, c);
         bank = new PlayerBank(this, c);
+        super.setDataBank(bank);
     }
     }
 
 
     public PlayerBank getDataBank() 
     public PlayerBank getDataBank() 

+ 1 - 2
src/main/java/me/km/plots/CommandPlot.java

@@ -11,7 +11,6 @@ import me.km.api.Utils;
 import me.km.chatmanager.ChatManager;
 import me.km.chatmanager.ChatManager;
 import me.km.dimensions.ModDimensions;
 import me.km.dimensions.ModDimensions;
 import me.km.permissions.Permissions;
 import me.km.permissions.Permissions;
-import me.km.playerbank.PlayerBank;
 import me.km.utils.SpecialBlockUtils;
 import me.km.utils.SpecialBlockUtils;
 import net.minecraft.block.Block;
 import net.minecraft.block.Block;
 import net.minecraft.command.ICommandSender;
 import net.minecraft.command.ICommandSender;
@@ -453,7 +452,7 @@ public class CommandPlot extends ModuleCommand
                             EntityPlayer p = (EntityPlayer) cs;
                             EntityPlayer p = (EntityPlayer) cs;
                             id = bank.getFirstRegionId(p);
                             id = bank.getFirstRegionId(p);
                         }
                         }
-                        GameProfile player = KajetansMod.playerbank.getDataBank(PlayerBank.class).getOfflinePlayer(arg[1]);
+                        GameProfile player = KajetansMod.playerbank.getDataBank().getOfflinePlayer(arg[1]);
                         if(player == null)
                         if(player == null)
                         {
                         {
                             m.send(cs, GlobalText.cantFindPlayer(arg[1]));
                             m.send(cs, GlobalText.cantFindPlayer(arg[1]));

+ 1 - 1
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -549,7 +549,7 @@ public class ScriptEvents extends ModuleListener
         });       
         });       
     }
     }
     
     
-    @SubscribeEvent
+    @SubscribeEvent(receiveCanceled = true)
     public void onEntityClick(PlayerInteractEvent.EntityInteract e)
     public void onEntityClick(PlayerInteractEvent.EntityInteract e)
     {
     {
         if(e.getHand() != EnumHand.OFF_HAND)
         if(e.getHand() != EnumHand.OFF_HAND)

+ 8 - 0
src/main/resources/assets/km/blockstates/cauldron_acacia.json

@@ -0,0 +1,8 @@
+{
+    "variants": {
+        "level=0": { "model": "km:cauldron/acacia/cauldron_empty" },
+        "level=1": { "model": "km:cauldron/acacia/cauldron_level1" },
+        "level=2": { "model": "km:cauldron/acacia/cauldron_level2" },
+        "level=3": { "model": "km:cauldron/acacia/cauldron_level3" }
+    }
+}

+ 8 - 0
src/main/resources/assets/km/blockstates/cauldron_big_oak.json

@@ -0,0 +1,8 @@
+{
+    "variants": {
+        "level=0": { "model": "km:cauldron/big_oak/cauldron_empty" },
+        "level=1": { "model": "km:cauldron/big_oak/cauldron_level1" },
+        "level=2": { "model": "km:cauldron/big_oak/cauldron_level2" },
+        "level=3": { "model": "km:cauldron/big_oak/cauldron_level3" }
+    }
+}

+ 8 - 0
src/main/resources/assets/km/blockstates/cauldron_birch.json

@@ -0,0 +1,8 @@
+{
+    "variants": {
+        "level=0": { "model": "km:cauldron/birch/cauldron_empty" },
+        "level=1": { "model": "km:cauldron/birch/cauldron_level1" },
+        "level=2": { "model": "km:cauldron/birch/cauldron_level2" },
+        "level=3": { "model": "km:cauldron/birch/cauldron_level3" }
+    }
+}

+ 8 - 0
src/main/resources/assets/km/blockstates/cauldron_jungle.json

@@ -0,0 +1,8 @@
+{
+    "variants": {
+        "level=0": { "model": "km:cauldron/jungle/cauldron_empty" },
+        "level=1": { "model": "km:cauldron/jungle/cauldron_level1" },
+        "level=2": { "model": "km:cauldron/jungle/cauldron_level2" },
+        "level=3": { "model": "km:cauldron/jungle/cauldron_level3" }
+    }
+}

+ 8 - 0
src/main/resources/assets/km/blockstates/cauldron_oak.json

@@ -0,0 +1,8 @@
+{
+    "variants": {
+        "level=0": { "model": "km:cauldron/oak/cauldron_empty" },
+        "level=1": { "model": "km:cauldron/oak/cauldron_level1" },
+        "level=2": { "model": "km:cauldron/oak/cauldron_level2" },
+        "level=3": { "model": "km:cauldron/oak/cauldron_level3" }
+    }
+}

+ 8 - 0
src/main/resources/assets/km/blockstates/cauldron_spruce.json

@@ -0,0 +1,8 @@
+{
+    "variants": {
+        "level=0": { "model": "km:cauldron/spruce/cauldron_empty" },
+        "level=1": { "model": "km:cauldron/spruce/cauldron_level1" },
+        "level=2": { "model": "km:cauldron/spruce/cauldron_level2" },
+        "level=3": { "model": "km:cauldron/spruce/cauldron_level3" }
+    }
+}

+ 5 - 0
src/main/resources/assets/km/blockstates/crate_acacia.json

@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "normal": { "model": "km:crate/crate_acacia" }
+    }
+}

+ 5 - 0
src/main/resources/assets/km/blockstates/crate_big_oak.json

@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "normal": { "model": "km:crate/crate_big_oak" }
+    }
+}

+ 5 - 0
src/main/resources/assets/km/blockstates/crate_birch.json

@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "normal": { "model": "km:crate/crate_birch" }
+    }
+}

+ 5 - 0
src/main/resources/assets/km/blockstates/crate_jungle.json

@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "normal": { "model": "km:crate/crate_jungle" }
+    }
+}

+ 5 - 0
src/main/resources/assets/km/blockstates/crate_oak.json

@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "normal": { "model": "km:crate/crate_oak" }
+    }
+}

+ 5 - 0
src/main/resources/assets/km/blockstates/crate_spruce.json

@@ -0,0 +1,5 @@
+{
+    "variants": {
+        "normal": { "model": "km:crate/crate_spruce" }
+    }
+}

+ 14 - 0
src/main/resources/assets/km/lang/en_US.lang

@@ -44,6 +44,13 @@ tile.artefact.name=Artefact
 tile.hayBlock.name=Straw Bale
 tile.hayBlock.name=Straw Bale
 tile.realHayBlock.name=Hay Bale
 tile.realHayBlock.name=Hay Bale
 
 
+tile.crateAcacia.name=Acacia Crate
+tile.crateBigOak.name=Dark Oak Crate
+tile.crateBirch.name=Birch Crate
+tile.crateJungle.name=Jungle Crate
+tile.crateOak.name=Oak Crate
+tile.crateSpruce.name=Spruce Crate
+
 tile.spikes.copper.name=Copper Spikes
 tile.spikes.copper.name=Copper Spikes
 tile.spikes.tin.name=Tin Spikes
 tile.spikes.tin.name=Tin Spikes
 tile.spikes.bronze.name=Bronze Spikes
 tile.spikes.bronze.name=Bronze Spikes
@@ -131,6 +138,13 @@ item.bundleHay.name=Hay Bundle
 item.batWing.name=Bat Wing
 item.batWing.name=Bat Wing
 item.wolfFur.name=Wolf Fur
 item.wolfFur.name=Wolf Fur
 
 
+item.cauldronOak.name=Oak Cauldron
+item.cauldronBirch.name=Birch Cauldron
+item.cauldronAcacia.name=Acacia Cauldron
+item.cauldronJungle.name=Jungle Cauldron
+item.cauldronSpruce.name=Spruce Cauldron
+item.cauldronBigOak.name=Big Oak Cauldron
+
 entity.BrownBear.name=Brown Bear
 entity.BrownBear.name=Brown Bear
 entity.BlackBear.name=Black Bear
 entity.BlackBear.name=Black Bear
 
 

+ 10 - 0
src/main/resources/assets/km/models/block/cauldron/acacia/cauldron_empty.json

@@ -0,0 +1,10 @@
+{
+    "parent": "km:block/cauldron/cauldron_empty",
+    "textures": {
+        "particle": "km:blocks/cauldron/acacia/cauldron_side",
+        "top": "km:blocks/cauldron/acacia/cauldron_top",
+        "bottom": "km:blocks/cauldron/acacia/cauldron_bottom",
+        "side": "km:blocks/cauldron/acacia/cauldron_side",
+        "inside": "km:blocks/cauldron/acacia/cauldron_inner"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/acacia/cauldron_level1.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level1",
+    "textures": {
+        "particle": "km:blocks/cauldron/acacia/cauldron_side",
+        "top": "km:blocks/cauldron/acacia/cauldron_top",
+        "bottom": "km:blocks/cauldron/acacia/cauldron_bottom",
+        "side": "km:blocks/cauldron/acacia/cauldron_side",
+        "inside": "km:blocks/cauldron/acacia/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/acacia/cauldron_level2.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level2",
+    "textures": {
+        "particle": "km:blocks/cauldron/acacia/cauldron_side",
+        "top": "km:blocks/cauldron/acacia/cauldron_top",
+        "bottom": "km:blocks/cauldron/acacia/cauldron_bottom",
+        "side": "km:blocks/cauldron/acacia/cauldron_side",
+        "inside": "km:blocks/cauldron/acacia/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/acacia/cauldron_level3.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level3",
+    "textures": {
+        "particle": "km:blocks/cauldron/acacia/cauldron_side",
+        "top": "km:blocks/cauldron/acacia/cauldron_top",
+        "bottom": "km:blocks/cauldron/acacia/cauldron_bottom",
+        "side": "km:blocks/cauldron/acacia/cauldron_side",
+        "inside": "km:blocks/cauldron/acacia/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 10 - 0
src/main/resources/assets/km/models/block/cauldron/big_oak/cauldron_empty.json

@@ -0,0 +1,10 @@
+{
+    "parent": "km:block/cauldron/cauldron_empty",
+    "textures": {
+        "particle": "km:blocks/cauldron/big_oak/cauldron_side",
+        "top": "km:blocks/cauldron/big_oak/cauldron_top",
+        "bottom": "km:blocks/cauldron/big_oak/cauldron_bottom",
+        "side": "km:blocks/cauldron/big_oak/cauldron_side",
+        "inside": "km:blocks/cauldron/big_oak/cauldron_inner"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/big_oak/cauldron_level1.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level1",
+    "textures": {
+        "particle": "km:blocks/cauldron/big_oak/cauldron_side",
+        "top": "km:blocks/cauldron/big_oak/cauldron_top",
+        "bottom": "km:blocks/cauldron/big_oak/cauldron_bottom",
+        "side": "km:blocks/cauldron/big_oak/cauldron_side",
+        "inside": "km:blocks/cauldron/big_oak/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/big_oak/cauldron_level2.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level2",
+    "textures": {
+        "particle": "km:blocks/cauldron/big_oak/cauldron_side",
+        "top": "km:blocks/cauldron/big_oak/cauldron_top",
+        "bottom": "km:blocks/cauldron/big_oak/cauldron_bottom",
+        "side": "km:blocks/cauldron/big_oak/cauldron_side",
+        "inside": "km:blocks/cauldron/big_oak/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/big_oak/cauldron_level3.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level3",
+    "textures": {
+        "particle": "km:blocks/cauldron/big_oak/cauldron_side",
+        "top": "km:blocks/cauldron/big_oak/cauldron_top",
+        "bottom": "km:blocks/cauldron/big_oak/cauldron_bottom",
+        "side": "km:blocks/cauldron/big_oak/cauldron_side",
+        "inside": "km:blocks/cauldron/big_oak/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 10 - 0
src/main/resources/assets/km/models/block/cauldron/birch/cauldron_empty.json

@@ -0,0 +1,10 @@
+{
+    "parent": "km:block/cauldron/cauldron_empty",
+    "textures": {
+        "particle": "km:blocks/cauldron/birch/cauldron_side",
+        "top": "km:blocks/cauldron/birch/cauldron_top",
+        "bottom": "km:blocks/cauldron/birch/cauldron_bottom",
+        "side": "km:blocks/cauldron/birch/cauldron_side",
+        "inside": "km:blocks/cauldron/birch/cauldron_inner"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/birch/cauldron_level1.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level1",
+    "textures": {
+        "particle": "km:blocks/cauldron/birch/cauldron_side",
+        "top": "km:blocks/cauldron/birch/cauldron_top",
+        "bottom": "km:blocks/cauldron/birch/cauldron_bottom",
+        "side": "km:blocks/cauldron/birch/cauldron_side",
+        "inside": "km:blocks/cauldron/birch/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/birch/cauldron_level2.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level2",
+    "textures": {
+        "particle": "km:blocks/cauldron/birch/cauldron_side",
+        "top": "km:blocks/cauldron/birch/cauldron_top",
+        "bottom": "km:blocks/cauldron/birch/cauldron_bottom",
+        "side": "km:blocks/cauldron/birch/cauldron_side",
+        "inside": "km:blocks/cauldron/birch/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/birch/cauldron_level3.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level3",
+    "textures": {
+        "particle": "km:blocks/cauldron/birch/cauldron_side",
+        "top": "km:blocks/cauldron/birch/cauldron_top",
+        "bottom": "km:blocks/cauldron/birch/cauldron_bottom",
+        "side": "km:blocks/cauldron/birch/cauldron_side",
+        "inside": "km:blocks/cauldron/birch/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 148 - 0
src/main/resources/assets/km/models/block/cauldron/cauldron_empty.json

@@ -0,0 +1,148 @@
+{
+    "ambientocclusion": false,
+    "elements": [
+        {   "from": [ 0, 3, 0 ],
+            "to": [ 2, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 2, 3, 2 ],
+            "to": [ 14, 4, 14 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#inside", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 14, 3, 0 ],
+            "to": [ 16, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 2, 3, 0 ],
+            "to": [ 14, 16, 2 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 2, 3, 14 ],
+            "to": [ 14, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 0, 0, 0 ],
+            "to": [ 4, 3, 2 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 2 ],
+            "to": [ 2, 3, 4 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 12, 0, 0 ],
+            "to": [ 16, 3, 2 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 14, 0, 2 ],
+            "to": [ 16, 3, 4 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 14 ],
+            "to": [ 4, 3, 16 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 12 ],
+            "to": [ 2, 3, 14 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 12, 0, 14 ],
+            "to": [ 16, 3, 16 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 14, 0, 12 ],
+            "to": [ 16, 3, 14 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        }
+    ]
+}

+ 154 - 0
src/main/resources/assets/km/models/block/cauldron/cauldron_level1.json

@@ -0,0 +1,154 @@
+{
+    "ambientocclusion": false,
+    "elements": [
+        {   "from": [ 0, 3, 0 ],
+            "to": [ 2, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 2, 3, 2 ],
+            "to": [ 14, 4, 14 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#inside", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 14, 3, 0 ],
+            "to": [ 16, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 2, 3, 0 ],
+            "to": [ 14, 16, 2 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 2, 3, 14 ],
+            "to": [ 14, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 0, 0, 0 ],
+            "to": [ 4, 3, 2 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 2 ],
+            "to": [ 2, 3, 4 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 12, 0, 0 ],
+            "to": [ 16, 3, 2 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 14, 0, 2 ],
+            "to": [ 16, 3, 4 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 14 ],
+            "to": [ 4, 3, 16 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 12 ],
+            "to": [ 2, 3, 14 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 12, 0, 14 ],
+            "to": [ 16, 3, 16 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 14, 0, 12 ],
+            "to": [ 16, 3, 14 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 2, 9, 2 ],
+            "to": [ 14, 9, 14 ],
+            "faces": {
+                "up": { "texture": "#water", "tintindex": 0 }
+            }
+        }
+    ]
+}

+ 154 - 0
src/main/resources/assets/km/models/block/cauldron/cauldron_level2.json

@@ -0,0 +1,154 @@
+{
+    "ambientocclusion": false,
+    "elements": [
+        {   "from": [ 0, 3, 0 ],
+            "to": [ 2, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 2, 3, 2 ],
+            "to": [ 14, 4, 14 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#inside", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 14, 3, 0 ],
+            "to": [ 16, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 2, 3, 0 ],
+            "to": [ 14, 16, 2 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 2, 3, 14 ],
+            "to": [ 14, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 0, 0, 0 ],
+            "to": [ 4, 3, 2 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 2 ],
+            "to": [ 2, 3, 4 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 12, 0, 0 ],
+            "to": [ 16, 3, 2 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 14, 0, 2 ],
+            "to": [ 16, 3, 4 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 14 ],
+            "to": [ 4, 3, 16 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 12 ],
+            "to": [ 2, 3, 14 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 12, 0, 14 ],
+            "to": [ 16, 3, 16 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 14, 0, 12 ],
+            "to": [ 16, 3, 14 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 2, 12, 2 ],
+            "to": [ 14, 12, 14 ],
+            "faces": {
+                "up": { "texture": "#water", "tintindex": 0 }
+            }
+        }
+    ]
+}

+ 154 - 0
src/main/resources/assets/km/models/block/cauldron/cauldron_level3.json

@@ -0,0 +1,154 @@
+{
+    "ambientocclusion": false,
+    "elements": [
+        {   "from": [ 0, 3, 0 ],
+            "to": [ 2, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 2, 3, 2 ],
+            "to": [ 14, 4, 14 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#inside", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 14, 3, 0 ],
+            "to": [ 16, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 2, 3, 0 ],
+            "to": [ 14, 16, 2 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side", "cullface": "north" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 2, 3, 14 ],
+            "to": [ 14, 16, 16 ],
+            "faces": {
+                "down":  { "texture": "#inside" },
+                "up":    { "texture": "#top", "cullface": "up" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side", "cullface": "south" },
+                "west":  { "texture": "#side", "cullface": "west" },
+                "east":  { "texture": "#side", "cullface": "east" }
+            }
+        },
+        {   "from": [ 0, 0, 0 ],
+            "to": [ 4, 3, 2 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 2 ],
+            "to": [ 2, 3, 4 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 12, 0, 0 ],
+            "to": [ 16, 3, 2 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 14, 0, 2 ],
+            "to": [ 16, 3, 4 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 14 ],
+            "to": [ 4, 3, 16 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 0, 0, 12 ],
+            "to": [ 2, 3, 14 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 12, 0, 14 ],
+            "to": [ 16, 3, 16 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 14, 0, 12 ],
+            "to": [ 16, 3, 14 ],
+            "faces": {
+                "down":  { "texture": "#bottom" },
+                "up":    { "texture": "#top" },
+                "north": { "texture": "#side" },
+                "south": { "texture": "#side" },
+                "west":  { "texture": "#side" },
+                "east":  { "texture": "#side" }
+            }
+        },
+        {   "from": [ 2, 15, 2 ],
+            "to": [ 14, 15, 14 ],
+            "faces": {
+                "up": { "texture": "#water", "tintindex": 0 }
+            }
+        }
+    ]
+}

+ 10 - 0
src/main/resources/assets/km/models/block/cauldron/jungle/cauldron_empty.json

@@ -0,0 +1,10 @@
+{
+    "parent": "km:block/cauldron/cauldron_empty",
+    "textures": {
+        "particle": "km:blocks/cauldron/jungle/cauldron_side",
+        "top": "km:blocks/cauldron/jungle/cauldron_top",
+        "bottom": "km:blocks/cauldron/jungle/cauldron_bottom",
+        "side": "km:blocks/cauldron/jungle/cauldron_side",
+        "inside": "km:blocks/cauldron/jungle/cauldron_inner"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/jungle/cauldron_level1.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level1",
+    "textures": {
+        "particle": "km:blocks/cauldron/jungle/cauldron_side",
+        "top": "km:blocks/cauldron/jungle/cauldron_top",
+        "bottom": "km:blocks/cauldron/jungle/cauldron_bottom",
+        "side": "km:blocks/cauldron/jungle/cauldron_side",
+        "inside": "km:blocks/cauldron/jungle/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/jungle/cauldron_level2.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level2",
+    "textures": {
+        "particle": "km:blocks/cauldron/jungle/cauldron_side",
+        "top": "km:blocks/cauldron/jungle/cauldron_top",
+        "bottom": "km:blocks/cauldron/jungle/cauldron_bottom",
+        "side": "km:blocks/cauldron/jungle/cauldron_side",
+        "inside": "km:blocks/cauldron/jungle/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/jungle/cauldron_level3.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level3",
+    "textures": {
+        "particle": "km:blocks/cauldron/jungle/cauldron_side",
+        "top": "km:blocks/cauldron/jungle/cauldron_top",
+        "bottom": "km:blocks/cauldron/jungle/cauldron_bottom",
+        "side": "km:blocks/cauldron/jungle/cauldron_side",
+        "inside": "km:blocks/cauldron/jungle/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 10 - 0
src/main/resources/assets/km/models/block/cauldron/oak/cauldron_empty.json

@@ -0,0 +1,10 @@
+{
+    "parent": "km:block/cauldron/cauldron_empty",
+    "textures": {
+        "particle": "km:blocks/cauldron/oak/cauldron_side",
+        "top": "km:blocks/cauldron/oak/cauldron_top",
+        "bottom": "km:blocks/cauldron/oak/cauldron_bottom",
+        "side": "km:blocks/cauldron/oak/cauldron_side",
+        "inside": "km:blocks/cauldron/oak/cauldron_inner"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/oak/cauldron_level1.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level1",
+    "textures": {
+        "particle": "km:blocks/cauldron/oak/cauldron_side",
+        "top": "km:blocks/cauldron/oak/cauldron_top",
+        "bottom": "km:blocks/cauldron/oak/cauldron_bottom",
+        "side": "km:blocks/cauldron/oak/cauldron_side",
+        "inside": "km:blocks/cauldron/oak/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/oak/cauldron_level2.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level2",
+    "textures": {
+        "particle": "km:blocks/cauldron/oak/cauldron_side",
+        "top": "km:blocks/cauldron/oak/cauldron_top",
+        "bottom": "km:blocks/cauldron/oak/cauldron_bottom",
+        "side": "km:blocks/cauldron/oak/cauldron_side",
+        "inside": "km:blocks/cauldron/oak/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/oak/cauldron_level3.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level3",
+    "textures": {
+        "particle": "km:blocks/cauldron/oak/cauldron_side",
+        "top": "km:blocks/cauldron/oak/cauldron_top",
+        "bottom": "km:blocks/cauldron/oak/cauldron_bottom",
+        "side": "km:blocks/cauldron/oak/cauldron_side",
+        "inside": "km:blocks/cauldron/oak/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 10 - 0
src/main/resources/assets/km/models/block/cauldron/spruce/cauldron_empty.json

@@ -0,0 +1,10 @@
+{
+    "parent": "km:block/cauldron/cauldron_empty",
+    "textures": {
+        "particle": "km:blocks/cauldron/spruce/cauldron_side",
+        "top": "km:blocks/cauldron/spruce/cauldron_top",
+        "bottom": "km:blocks/cauldron/spruce/cauldron_bottom",
+        "side": "km:blocks/cauldron/spruce/cauldron_side",
+        "inside": "km:blocks/cauldron/spruce/cauldron_inner"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/spruce/cauldron_level1.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level1",
+    "textures": {
+        "particle": "km:blocks/cauldron/spruce/cauldron_side",
+        "top": "km:blocks/cauldron/spruce/cauldron_top",
+        "bottom": "km:blocks/cauldron/spruce/cauldron_bottom",
+        "side": "km:blocks/cauldron/spruce/cauldron_side",
+        "inside": "km:blocks/cauldron/spruce/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/spruce/cauldron_level2.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level2",
+    "textures": {
+        "particle": "km:blocks/cauldron/spruce/cauldron_side",
+        "top": "km:blocks/cauldron/spruce/cauldron_top",
+        "bottom": "km:blocks/cauldron/spruce/cauldron_bottom",
+        "side": "km:blocks/cauldron/spruce/cauldron_side",
+        "inside": "km:blocks/cauldron/spruce/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 11 - 0
src/main/resources/assets/km/models/block/cauldron/spruce/cauldron_level3.json

@@ -0,0 +1,11 @@
+{
+    "parent": "km:block/cauldron/cauldron_level3",
+    "textures": {
+        "particle": "km:blocks/cauldron/spruce/cauldron_side",
+        "top": "km:blocks/cauldron/spruce/cauldron_top",
+        "bottom": "km:blocks/cauldron/spruce/cauldron_bottom",
+        "side": "km:blocks/cauldron/spruce/cauldron_side",
+        "inside": "km:blocks/cauldron/spruce/cauldron_inner",
+        "water": "km:blocks/grey_water_still"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/block/crate/crate_acacia.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/cube_all",
+    "textures": {
+        "all": "km:blocks/crates/crate_acacia"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/block/crate/crate_big_oak.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/cube_all",
+    "textures": {
+        "all": "km:blocks/crates/crate_big_oak"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/block/crate/crate_birch.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/cube_all",
+    "textures": {
+        "all": "km:blocks/crates/crate_birch"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/block/crate/crate_jungle.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/cube_all",
+    "textures": {
+        "all": "km:blocks/crates/crate_jungle"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/block/crate/crate_oak.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/cube_all",
+    "textures": {
+        "all": "km:blocks/crates/crate_oak"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/block/crate/crate_spruce.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/cube_all",
+    "textures": {
+        "all": "km:blocks/crates/crate_spruce"
+    }
+}

BIN
src/main/resources/assets/km/textures/blocks/cauldron/acacia/cauldron_bottom.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/acacia/cauldron_inner.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/acacia/cauldron_side.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/acacia/cauldron_top.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/big_oak/cauldron_bottom.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/big_oak/cauldron_inner.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/big_oak/cauldron_side.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/big_oak/cauldron_top.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/birch/cauldron_bottom.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/birch/cauldron_inner.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/birch/cauldron_side.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/birch/cauldron_top.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/jungle/cauldron_bottom.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/jungle/cauldron_inner.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/jungle/cauldron_side.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/jungle/cauldron_top.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/oak/cauldron_bottom.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/oak/cauldron_inner.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/oak/cauldron_side.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/oak/cauldron_top.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/spruce/cauldron_bottom.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/spruce/cauldron_inner.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/spruce/cauldron_side.png


BIN
src/main/resources/assets/km/textures/blocks/cauldron/spruce/cauldron_top.png


BIN
src/main/resources/assets/km/textures/blocks/crates/crate_acacia.png


BIN
src/main/resources/assets/km/textures/blocks/crates/crate_big_oak.png


BIN
src/main/resources/assets/km/textures/blocks/crates/crate_birch.png


BIN
src/main/resources/assets/km/textures/blocks/crates/crate_jungle.png


BIN
src/main/resources/assets/km/textures/blocks/crates/crate_oak.png


BIN
src/main/resources/assets/km/textures/blocks/crates/crate_spruce.png


BIN
src/main/resources/assets/km/textures/blocks/grey_water_still.png


+ 5 - 0
src/main/resources/assets/km/textures/blocks/grey_water_still.png.mcmeta

@@ -0,0 +1,5 @@
+{
+  "animation": {
+    "frametime": 2
+  }
+}