diff --git a/chunky/src/java/se/llbit/chunky/block/Air.java b/chunky/src/java/se/llbit/chunky/block/Air.java
deleted file mode 100644
index 8aad157063..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Air.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class Air extends MinecraftBlock {
- public static final Air INSTANCE = new Air();
-
- private Air() {
- super("air", Texture.air);
- solid = false;
- opaque = false;
- invisible = true;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Anvil.java b/chunky/src/java/se/llbit/chunky/block/Anvil.java
deleted file mode 100644
index c5d0289624..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Anvil.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.AnvilModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Anvil extends AbstractModelBlock {
-
- private final String description;
-
- public Anvil(String name, String facing, int damage) {
- super(name, Texture.anvilSide);
- int facing1;
- switch (facing) {
- default:
- case "north":
- case "south":
- facing1 = 0;
- break;
- case "east":
- case "west":
- facing1 = 1;
- break;
- }
- this.model = new AnvilModel(facing1, damage);
-
- this.description = "damage=" + damage;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/AttachedStem.java b/chunky/src/java/se/llbit/chunky/block/AttachedStem.java
deleted file mode 100644
index d6756a65a1..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/AttachedStem.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.AttachedStemModel;
-import se.llbit.chunky.resources.Texture;
-
-/**
- * Attached melon or pumpkin stem.
- */
-public class AttachedStem extends AbstractModelBlock {
-
- private final String description;
-
- public AttachedStem(String name, String facingString) {
- super(name, Texture.stemBent);
- description = "facing=" + facingString;
- int facing;
- switch (facingString) {
- default:
- case "north":
- facing = 2; //0;
- break;
- case "south":
- facing = 3; //1;
- break;
- case "east":
- facing = 1; //2;
- break;
- case "west":
- facing = 0; //3;
- break;
- }
- this.model = new AttachedStemModel(facing);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Azalea.java b/chunky/src/java/se/llbit/chunky/block/Azalea.java
deleted file mode 100644
index 2a86c6dfef..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Azalea.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.AzaleaModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Azalea extends AbstractModelBlock {
-
- public Azalea(String name, Texture top, Texture side) {
- super(name, top);
- solid = false;
- model = new AzaleaModel(top, side);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Bamboo.java b/chunky/src/java/se/llbit/chunky/block/Bamboo.java
deleted file mode 100644
index a2c4799c0c..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Bamboo.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BambooModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Bamboo extends AbstractModelBlock {
-
- private final String description;
-
- public Bamboo(int age, String leaves) {
- super("bamboo", Texture.bambooStalk);
- description = "age=" + age + ", leaves=" + leaves;
- model = new BambooModel(age, leaves);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Barrel.java b/chunky/src/java/se/llbit/chunky/block/Barrel.java
deleted file mode 100644
index 1e0aff40c1..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Barrel.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BarrelModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Barrel extends AbstractModelBlock {
-
- private final String description;
-
- public Barrel(String facing, String open) {
- super("barrel", Texture.barrelSide);
- this.description = "facing=" + facing + ", open=" + open;
- this.model = new BarrelModel(facing, open);
- opaque = true;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Beacon.java b/chunky/src/java/se/llbit/chunky/block/Beacon.java
deleted file mode 100644
index 62663f4a92..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Beacon.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.entity.BeaconBeam;
-import se.llbit.chunky.entity.Entity;
-import se.llbit.chunky.model.BeaconModel;
-import se.llbit.chunky.model.BlockModel;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Vector3;
-import se.llbit.nbt.CompoundTag;
-
-public class Beacon extends AbstractModelBlock {
-
- public Beacon() {
- super("beacon", Texture.beacon);
- localIntersect = true;
- solid = false;
- this.model = new BeaconModel();
- }
-
- @Override
- public boolean isBlockWithEntity() {
- return true;
- }
-
- @Override
- public boolean isBlockEntity() {
- return true;
- }
-
- @Override
- public Entity toBlockEntity(Vector3 position, CompoundTag entityTag) {
- if (entityTag.get("Levels").intValue(0) > 0) {
- return new BeaconBeam(position);
- }
- return null;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Bed.java b/chunky/src/java/se/llbit/chunky/block/Bed.java
deleted file mode 100644
index f91bec6b5f..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Bed.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BedModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Bed extends AbstractModelBlock {
-
- private final String description;
-
- public Bed(String name, Texture texture, String part, String facing) {
- super(name, texture);
- this.description = String.format("part=%s, facing=%s", part, facing);
- boolean head = part.equals("head");
- int direction;
- switch (facing) {
- default:
- case "north":
- direction = 2;
- break;
- case "east":
- direction = 3;
- break;
- case "south":
- direction = 0;
- break;
- case "west":
- direction = 1;
- break;
- }
- model = new BedModel(head, direction, texture);
- solid = false;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Beetroots.java b/chunky/src/java/se/llbit/chunky/block/Beetroots.java
deleted file mode 100644
index fc421d2a3f..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Beetroots.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CropsModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Beetroots extends AbstractModelBlock {
-
- private static final Texture[] texture = {
- Texture.beets0, Texture.beets1, Texture.beets2, Texture.beets3
- };
-
- private final int age;
-
- public Beetroots(int age) {
- super("beetroots", Texture.beets3);
- this.age = age & 3;
- this.model = new CropsModel(texture[this.age]);
- }
-
- @Override
- public String description() {
- return "age=" + age;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Bell.java b/chunky/src/java/se/llbit/chunky/block/Bell.java
deleted file mode 100644
index 1766b8b8df..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Bell.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BellModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Bell extends AbstractModelBlock {
-
- private final String description;
-
- public Bell(String facing, String attachment) {
- super("bell", Texture.bellBody);
- this.description = "attachment=" + attachment + ",facing=" + facing;
- model = new BellModel(facing, attachment);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/BigDripleaf.java b/chunky/src/java/se/llbit/chunky/block/BigDripleaf.java
deleted file mode 100644
index a65ba43c6a..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/BigDripleaf.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BigDripleafModel;
-import se.llbit.chunky.resources.Texture;
-
-public class BigDripleaf extends AbstractModelBlock {
-
- private final String description;
-
- public BigDripleaf(String facing, String tilt) {
- super("big_dripleaf", Texture.bigDripleafTop);
- description = "facing=" + facing + ", tilt=" + tilt;
- model = new BigDripleafModel(facing, tilt);
- solid = false;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/BigDripleafStem.java b/chunky/src/java/se/llbit/chunky/block/BigDripleafStem.java
deleted file mode 100644
index be3b808a4c..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/BigDripleafStem.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BigDripleafStemModel;
-import se.llbit.chunky.resources.Texture;
-
-public class BigDripleafStem extends AbstractModelBlock {
-
- private final String facing;
-
- public BigDripleafStem(String facing) {
- super("big_dripleaf_stem", Texture.bigDripleafStem);
- this.facing = facing;
- model = new BigDripleafStemModel(facing);
- solid = false;
- }
-
- @Override
- public String description() {
- return "facing=" + facing;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/BlastFurnace.java b/chunky/src/java/se/llbit/chunky/block/BlastFurnace.java
deleted file mode 100644
index ec79653e6a..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/BlastFurnace.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class BlastFurnace extends TopBottomOrientedTexturedBlock {
-
- private final boolean isLit;
- private final String description;
-
- public BlastFurnace(String facing, boolean lit) {
- super(
- "blast_furnace",
- facing,
- lit ? Texture.blastFurnaceFrontOn : Texture.blastFurnaceFront,
- Texture.blastFurnaceSide,
- Texture.blastFurnaceTop);
- this.description = String.format("facing=%s, lit=%s", facing, lit);
- isLit = lit;
- }
-
- public boolean isLit() {
- return isLit;
- }
-
- @Override public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/BlockSpec.java b/chunky/src/java/se/llbit/chunky/block/BlockSpec.java
index a69e137bb7..e1e525c773 100644
--- a/chunky/src/java/se/llbit/chunky/block/BlockSpec.java
+++ b/chunky/src/java/se/llbit/chunky/block/BlockSpec.java
@@ -5,6 +5,8 @@
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
+
+import se.llbit.chunky.block.minecraft.UnknownBlock;
import se.llbit.nbt.CompoundTag;
import se.llbit.nbt.Tag;
import se.llbit.util.NbtUtil;
diff --git a/chunky/src/java/se/llbit/chunky/block/BrewingStand.java b/chunky/src/java/se/llbit/chunky/block/BrewingStand.java
deleted file mode 100644
index 62eabb17a2..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/BrewingStand.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BrewingStandModel;
-import se.llbit.chunky.resources.Texture;
-
-public class BrewingStand extends AbstractModelBlock {
- private final String description;
-
- public BrewingStand(boolean bottle0, boolean bottle1, boolean bottle2) {
- super("brewing_stand", Texture.brewingStandBase);
- description = String.format("has_bottle_0=%s, has_bottle_1=%s, has_bottle_2=%s",
- bottle0, bottle1, bottle2);
- this.model = new BrewingStandModel(bottle0, bottle1, bottle2);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Button.java b/chunky/src/java/se/llbit/chunky/block/Button.java
deleted file mode 100644
index 083d9d6799..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Button.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.ButtonModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Button extends AbstractModelBlock {
-
- private final String description;
- // TODO(llbit): render powered buttons
-
- public Button(String name, Texture texture, String face, String facing, boolean powered) {
- super(name, texture);
- this.description = String.format("face=%s, facing=%s, powered=%s",
- face, facing, powered);
- this.model = new ButtonModel(face, facing, texture);
- // TODO handle rotation on top/bottom positions!
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Cactus.java b/chunky/src/java/se/llbit/chunky/block/Cactus.java
deleted file mode 100644
index dba27818ba..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Cactus.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BlockModel;
-import se.llbit.chunky.model.CactusModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Cactus extends AbstractModelBlock {
-
- public Cactus() {
- super("cactus", Texture.cactusSide);
- localIntersect = true;
- opaque = false;
- this.model = new CactusModel();
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Cake.java b/chunky/src/java/se/llbit/chunky/block/Cake.java
deleted file mode 100644
index 0678861511..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Cake.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CakeModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Cake extends AbstractModelBlock {
-
- private final int bites;
-
- public Cake(int bites) {
- super("cake", Texture.cakeTop);
- this.model = new CakeModel(bites);
- this.bites = bites;
- }
-
- @Override
- public String description() {
- return "bites=" + bites;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Carpet.java b/chunky/src/java/se/llbit/chunky/block/Carpet.java
deleted file mode 100644
index 5c5916873b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Carpet.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CarpetModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Carpet extends AbstractModelBlock {
-
- public Carpet(String name, Texture texture) {
- super(name, texture);
- solid = false;
- this.model = new CarpetModel(texture);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Carrots.java b/chunky/src/java/se/llbit/chunky/block/Carrots.java
deleted file mode 100644
index ddeae9fad3..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Carrots.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CropsModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Carrots extends AbstractModelBlock {
-
- private static final Texture[] texture = {
- Texture.carrots0, Texture.carrots0, Texture.carrots1, Texture.carrots1,
- Texture.carrots2, Texture.carrots2, Texture.carrots2, Texture.carrots3
- };
-
- private final int age;
-
- public Carrots(int age) {
- super("carrots", texture[texture.length - 1]);
- this.age = age % texture.length;
- this.model = new CropsModel(texture[this.age]);
- }
-
- @Override
- public String description() {
- return "age=" + age;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Cauldron.java b/chunky/src/java/se/llbit/chunky/block/Cauldron.java
deleted file mode 100644
index d668cd518c..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Cauldron.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CauldronModel;
-import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Ray;
-
-public class Cauldron extends MinecraftBlockTranslucent {
-
- private final int level;
-
- public Cauldron(String name, int level) {
- super(name, Texture.cauldronSide);
- this.level = level;
- localIntersect = true;
- }
-
- public int getLevel() {
- return level;
- }
-
- @Override
- public boolean intersect(Ray ray, Scene scene) {
- return CauldronModel.intersectWithWater(ray, scene, level);
- }
-
- @Override
- public String description() {
- return "level=" + level;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/CaveVines.java b/chunky/src/java/se/llbit/chunky/block/CaveVines.java
deleted file mode 100644
index 101de4ba2b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/CaveVines.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class CaveVines extends SpriteBlock {
-
- private final boolean berries;
-
- public CaveVines(String name, boolean berries, boolean body) {
- super(name, getTexture(body, berries));
- this.berries = berries;
- }
-
- private static Texture getTexture(boolean body, boolean lit) {
- if (body) {
- return lit ? Texture.caveVinesPlantLit : Texture.caveVinesPlant;
- }
- return lit ? Texture.caveVinesLit : Texture.caveVines;
- }
-
- public boolean hasBerries() {
- return berries;
- }
-
- @Override
- public String description() {
- return "berries=" + berries;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Chain.java b/chunky/src/java/se/llbit/chunky/block/Chain.java
deleted file mode 100644
index 1e73ce040c..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Chain.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.ChainModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Chain extends AbstractModelBlock {
-
- private final String description;
-
- public Chain(String name, Texture texture, String axis) {
- super(name, texture);
- model = new ChainModel(axis);
- description = "axis=" + axis;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/ChainCommandBlock.java b/chunky/src/java/se/llbit/chunky/block/ChainCommandBlock.java
deleted file mode 100644
index 24b3ba8779..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/ChainCommandBlock.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.DirectionalBlockModel;
-import se.llbit.chunky.resources.Texture;
-
-public class ChainCommandBlock extends AbstractModelBlock {
-
- private final String description;
-
- public ChainCommandBlock(String facing, boolean conditional) {
- super("chain_command_block", Texture.chainCommandBlockFront);
- this.description = String.format("facing=%s, conditional=%s", facing, conditional);
- this.model = new DirectionalBlockModel(facing,
- conditional ? Texture.chainCommandBlockConditional : Texture.chainCommandBlockFront,
- Texture.chainCommandBlockBack, Texture.chainCommandBlockSide);
- opaque = true;
- solid = true;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/ChiseledBookshelf.java b/chunky/src/java/se/llbit/chunky/block/ChiseledBookshelf.java
deleted file mode 100644
index 6253f3cbe1..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/ChiseledBookshelf.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class ChiseledBookshelf extends FixedTopBottomRotatableTexturedBlock {
-
- private final String description;
-
- public ChiseledBookshelf(String facing, boolean slot0, boolean slot1, boolean slot2, boolean slot3, boolean slot4, boolean slot5) {
- super("chiseled_bookshelf", facing, Texture.chiseledBookshelfCombinations[(slot0?1:0) + (slot1?2:0) + (slot2?4:0) + (slot3?8:0) + (slot4?16:0) + (slot5?32:0)],
- Texture.chiseledBookshelfSide, Texture.chiseledBookshelfTop);
- this.description = String.format("facing=%s, slot0=%s, slot1=%s, slot2=%s, slot3=%s, slot4=%s, slot5=%s", facing, slot0, slot1, slot2, slot3, slot4, slot5);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/ChorusFlower.java b/chunky/src/java/se/llbit/chunky/block/ChorusFlower.java
deleted file mode 100644
index d2e0fbd8a1..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/ChorusFlower.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.ChorusFlowerModel;
-import se.llbit.chunky.resources.Texture;
-
-public class ChorusFlower extends AbstractModelBlock {
-
- private final int age;
-
- public ChorusFlower(int age) {
- super("chorus_flower", Texture.chorusFlower);
- this.model = new ChorusFlowerModel(age % 6);
- this.age = age % 6;
- }
-
- @Override
- public String description() {
- return "age=" + age;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/ChorusPlant.java b/chunky/src/java/se/llbit/chunky/block/ChorusPlant.java
deleted file mode 100644
index 075ce61a7b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/ChorusPlant.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.ChorusPlantModel;
-import se.llbit.chunky.resources.Texture;
-
-public class ChorusPlant extends AbstractModelBlock {
-
- private final String description;
-
- public ChorusPlant(
- boolean north, boolean south, boolean east, boolean west,
- boolean up, boolean down) {
- super("chorus_plant", Texture.chorusPlant);
- this.description = String.format("north=%s, south=%s, east=%s, west=%s",
- north, south, east, west);
- model = new ChorusPlantModel(north, south, east, west, up, down);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Cocoa.java b/chunky/src/java/se/llbit/chunky/block/Cocoa.java
deleted file mode 100644
index ac6c8f6bd1..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Cocoa.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CocoaPlantModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Cocoa extends AbstractModelBlock {
-
- private final String description;
-
- public Cocoa(String facingString, int age) {
- super("cocoa", Texture.cocoaPlantLarge);
- description = String.format("facing=%s, age=%d", facingString, age);
- int facing;
- switch (facingString) {
- default:
- case "north":
- facing = 2;
- break;
- case "south":
- facing = 0;
- break;
- case "west":
- facing = 1;
- break;
- case "east":
- facing = 3;
- break;
- }
- model = new CocoaPlantModel(facing, age);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/CommandBlock.java b/chunky/src/java/se/llbit/chunky/block/CommandBlock.java
deleted file mode 100644
index 5b6ac4eeb2..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/CommandBlock.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.DirectionalBlockModel;
-import se.llbit.chunky.resources.Texture;
-
-public class CommandBlock extends AbstractModelBlock {
-
- private final String description;
-
- public CommandBlock(String facing, boolean conditional) {
- super("command_block", Texture.commandBlockFront);
- this.description = String.format("facing=%s, conditional=%s", facing, conditional);
- this.model = new DirectionalBlockModel(facing,
- conditional ? Texture.commandBlockConditional : Texture.commandBlockFront,
- Texture.commandBlockBack, Texture.commandBlockSide);
- opaque = true;
- solid = true;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Composter.java b/chunky/src/java/se/llbit/chunky/block/Composter.java
deleted file mode 100644
index 1a6584dc89..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Composter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.ComposterModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Composter extends AbstractModelBlock {
-
- private final int level;
-
- public Composter(int level) {
- super("composter", Texture.composterSide);
- this.level = level;
- this.model = new ComposterModel(level);
- }
-
- @Override
- public String description() {
- return "level=" + level;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Conduit.java b/chunky/src/java/se/llbit/chunky/block/Conduit.java
deleted file mode 100644
index bd0c016136..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Conduit.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.ConduitModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Conduit extends AbstractModelBlock {
-
- public Conduit() {
- super("conduit", Texture.conduit);
- model = new ConduitModel();
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/DaylightDetector.java b/chunky/src/java/se/llbit/chunky/block/DaylightDetector.java
deleted file mode 100644
index 364f18dbcf..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/DaylightDetector.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.DaylightSensorModel;
-import se.llbit.chunky.resources.Texture;
-
-public class DaylightDetector extends AbstractModelBlock {
- private final boolean inverted;
-
- public DaylightDetector(boolean inverted) {
- super("daylight_detector",
- inverted ? Texture.daylightDetectorInvertedTop : Texture.daylightDetectorTop);
- this.inverted = inverted;
- this.model = new DaylightSensorModel(
- inverted ? Texture.daylightDetectorInvertedTop : Texture.daylightDetectorTop);
- }
-
- @Override
- public String description() {
- return "inverted=" + inverted;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/DragonEgg.java b/chunky/src/java/se/llbit/chunky/block/DragonEgg.java
deleted file mode 100644
index 7118731c02..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/DragonEgg.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BlockModel;
-import se.llbit.chunky.model.DragonEggModel;
-import se.llbit.chunky.resources.Texture;
-
-public class DragonEgg extends AbstractModelBlock {
-
- public DragonEgg() {
- super("dragon_egg", Texture.dragonEgg);
- model = new DragonEggModel();
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Dropper.java b/chunky/src/java/se/llbit/chunky/block/Dropper.java
deleted file mode 100644
index 2fbc081b3f..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Dropper.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class Dropper extends Dispenser {
-
- public Dropper(String facing) {
- super("dropper", facing, Texture.dropperFront, Texture.dropperFrontVertical,
- Texture.furnaceSide, Texture.furnaceTop);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/EndPortal.java b/chunky/src/java/se/llbit/chunky/block/EndPortal.java
deleted file mode 100644
index 2946e2628e..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/EndPortal.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.BlockModel;
-import se.llbit.chunky.model.EndPortalModel;
-import se.llbit.chunky.resources.Texture;
-
-public class EndPortal extends AbstractModelBlock {
-
- public EndPortal() {
- super("end_portal", Texture.endPortal);
- model = new EndPortalModel();
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/EndPortalFrame.java b/chunky/src/java/se/llbit/chunky/block/EndPortalFrame.java
deleted file mode 100644
index a0d27a8f30..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/EndPortalFrame.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.EndPortalFrameModel;
-import se.llbit.chunky.resources.Texture;
-
-public class EndPortalFrame extends AbstractModelBlock {
-
- private final String description;
-
- public EndPortalFrame(boolean eye, String facing) {
- super("end_portal_frame", Texture.endPortalFrameSide);
- this.description = "eye=" + eye + ",facing=" + facing;
- this.model = new EndPortalFrameModel(eye, facing);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/EndRod.java b/chunky/src/java/se/llbit/chunky/block/EndRod.java
deleted file mode 100644
index 426157963b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/EndRod.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.EndRodModel;
-import se.llbit.chunky.resources.Texture;
-
-public class EndRod extends AbstractModelBlock {
-
- private final String description;
-
- public EndRod(String facingString) {
- super("end_rod", Texture.endRod);
- this.description = "facing=" + facingString;
- int facing;
- switch (facingString) {
- case "down":
- facing = 0;
- break;
- default:
- case "up":
- facing = 1;
- break;
- case "north":
- facing = 2;
- break;
- case "south":
- facing = 3;
- break;
- case "west":
- facing = 4;
- break;
- case "east":
- facing = 5;
- break;
- }
- model = new EndRodModel(facing);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/EnderChest.java b/chunky/src/java/se/llbit/chunky/block/EnderChest.java
deleted file mode 100644
index 3d260e8297..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/EnderChest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.ChestModel;
-import se.llbit.chunky.resources.Texture;
-
-public class EnderChest extends AbstractModelBlock {
-
- private final String description;
-
- public EnderChest(String facingString) {
- super("ender_chest", Texture.chestFront);
- this.description = "facing=" + facingString;
- int facing;
- switch (facingString) {
- default:
- case "north":
- facing = 2;
- break;
- case "south":
- facing = 3;
- break;
- case "west":
- facing = 4;
- break;
- case "east":
- facing = 5;
- break;
- }
- model = new ChestModel(0, facing, false, true);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Farmland.java b/chunky/src/java/se/llbit/chunky/block/Farmland.java
deleted file mode 100644
index c3d80f81b3..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Farmland.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.TexturedBlockModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Farmland extends AbstractModelBlock {
-
- private final int moisture;
-
- public Farmland(int moisture) {
- super("farmland", Texture.farmlandWet);
- this.model = new TexturedBlockModel(Texture.dirt, Texture.dirt, Texture.dirt, Texture.dirt,
- moisture >= 7 ? Texture.farmlandWet : Texture.farmlandDry, Texture.dirt);
- this.moisture = moisture;
- opaque = true;
- // TODO farmland shouldn't be a full block
- }
-
- @Override
- public String description() {
- return "moisture=" + moisture;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Fern.java b/chunky/src/java/se/llbit/chunky/block/Fern.java
deleted file mode 100644
index e76036edab..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Fern.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GrassTintedSpriteModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Fern extends AbstractModelBlock {
-
- public Fern() {
- super("fern", Texture.fern);
- solid = false;
- model = new GrassTintedSpriteModel(Texture.fern);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Fire.java b/chunky/src/java/se/llbit/chunky/block/Fire.java
deleted file mode 100644
index 6e7f592e3f..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Fire.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.FireModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Fire extends AbstractModelBlock {
-
- public Fire() {
- super("fire", Texture.fire);
- model = new FireModel(Texture.fireLayer0, Texture.fireLayer1);
- solid = false;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/FlowerPot.java b/chunky/src/java/se/llbit/chunky/block/FlowerPot.java
deleted file mode 100644
index 2d91e0fd14..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/FlowerPot.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.FlowerPotModel;
-import se.llbit.chunky.resources.Texture;
-
-public class FlowerPot extends AbstractModelBlock {
- public FlowerPot(String name, FlowerPotModel.Kind kind) {
- super(name, Texture.flowerPot);
- this.model = new FlowerPotModel(kind);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Frogspawn.java b/chunky/src/java/se/llbit/chunky/block/Frogspawn.java
deleted file mode 100644
index 034ee41c1b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Frogspawn.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.FrogspawnModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Frogspawn extends AbstractModelBlock{
- public Frogspawn() {
- super("frogspawn", Texture.frogspawn);
- this.model = new FrogspawnModel();
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/FrostedIce.java b/chunky/src/java/se/llbit/chunky/block/FrostedIce.java
deleted file mode 100644
index b258dd7f3f..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/FrostedIce.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class FrostedIce extends MinecraftBlockTranslucent {
- private static final Texture[] texture = {
- Texture.frostedIce0, Texture.frostedIce1, Texture.frostedIce2, Texture.frostedIce3
- };
-
- private final int age;
-
- public FrostedIce(int age) {
- super("frosted_ice", texture[age & 3]);
- solid = true;
- this.age = age & 3;
- }
-
- @Override public String description() {
- return "age=" + age;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Furnace.java b/chunky/src/java/se/llbit/chunky/block/Furnace.java
deleted file mode 100644
index 8d29917b1e..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Furnace.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class Furnace extends TopBottomOrientedTexturedBlock {
-
- private final boolean lit;
- private final String description;
-
- public Furnace(String facing, boolean lit) {
- super("furnace", facing, lit ? Texture.furnaceLitFront : Texture.furnaceUnlitFront,
- Texture.furnaceSide, Texture.furnaceTop);
- this.description = String.format("facing=%s, lit=%s", facing, lit);
- this.lit = lit;
- }
-
- public boolean isLit() {
- return lit;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Glass.java b/chunky/src/java/se/llbit/chunky/block/Glass.java
deleted file mode 100644
index 741890114e..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Glass.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-import se.llbit.chunky.world.Material;
-
-public class Glass extends MinecraftBlockTranslucent {
- public Glass(String name, Texture texture) {
- super(name, texture);
- ior = 1.52f;
- }
-
- @Override
- public boolean isSameMaterial(Material other) {
- return other instanceof Glass && other.name.equals(this.name); // same name means same color
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/GlassPane.java b/chunky/src/java/se/llbit/chunky/block/GlassPane.java
deleted file mode 100644
index 15af408c2b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/GlassPane.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GlassPaneModel;
-import se.llbit.chunky.resources.Texture;
-
-public class GlassPane extends AbstractModelBlock {
- private final String description;
-
- public GlassPane(String name, Texture side, Texture top,
- boolean north, boolean south, boolean east, boolean west) {
- super(name, side);
- localIntersect = true;
- this.description = String.format("north=%s, south=%s, east=%s, west=%s",
- north, south, east, west);
- this.model = new GlassPaneModel(top, side, north, south, east, west);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/GlazedTerracotta.java b/chunky/src/java/se/llbit/chunky/block/GlazedTerracotta.java
deleted file mode 100644
index bb4d01d6e2..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/GlazedTerracotta.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.TerracottaModel;
-import se.llbit.chunky.resources.Texture;
-
-public class GlazedTerracotta extends AbstractModelBlock {
-
- private final String description;
-
- public GlazedTerracotta(String name, Texture texture, String facingString) {
- super(name, texture);
- this.description = "facing=" + facingString;
- int facing;
- switch (facingString) {
- default:
- case "north":
- facing = 2;
- break;
- case "east":
- facing = 3;
- break;
- case "south":
- facing = 0;
- break;
- case "west":
- facing = 1;
- break;
- }
- this.model = new TerracottaModel(texture, facing);
- opaque = true;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Grass.java b/chunky/src/java/se/llbit/chunky/block/Grass.java
deleted file mode 100644
index 5f840c1ae3..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Grass.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GrassTintedSpriteModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Grass extends AbstractModelBlock {
-
- public Grass() {
- super("grass", Texture.tallGrass);
- solid = false;
- model = new GrassTintedSpriteModel(texture);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/GrassBlock.java b/chunky/src/java/se/llbit/chunky/block/GrassBlock.java
deleted file mode 100644
index 42f20617e1..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/GrassBlock.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GrassBlockModel;
-import se.llbit.chunky.resources.Texture;
-
-public class GrassBlock extends AbstractModelBlock {
-
- public GrassBlock() {
- super("grass_block", Texture.grassTop);
- model = new GrassBlockModel();
- opaque = true;
- solid = true;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/GrassPath.java b/chunky/src/java/se/llbit/chunky/block/GrassPath.java
deleted file mode 100644
index ef8b90e874..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/GrassPath.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GrassPathModel;
-import se.llbit.chunky.resources.Texture;
-
-public class GrassPath extends AbstractModelBlock {
-
- public GrassPath() {
- super("grass_path", Texture.grassPathTop);
- model = new GrassPathModel();
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Grindstone.java b/chunky/src/java/se/llbit/chunky/block/Grindstone.java
deleted file mode 100644
index cfdf4d0940..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Grindstone.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GrindstoneModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Grindstone extends AbstractModelBlock {
-
- private final String description;
-
- public Grindstone(String face, String facing) {
- super("grindstone", Texture.grindstoneSide);
- description = String.format("face=%s, facing=%s", face, facing);
- this.model = new GrindstoneModel(face, facing);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Honey.java b/chunky/src/java/se/llbit/chunky/block/Honey.java
deleted file mode 100644
index 882f5dd83c..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Honey.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.HoneyBlockModel;
-import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Ray;
-
-public class Honey extends MinecraftBlockTranslucent {
- public Honey() {
- super("honey_block", Texture.honeyBlockSide);
- localIntersect = true;
- opaque = false;
- ior = 1.474f; // according to https://study.com/academy/answer/what-is-the-refractive-index-of-honey.html
- solid = false;
- refractive = true;
- }
-
- @Override
- public boolean intersect(Ray ray, Scene scene) {
- return HoneyBlockModel.intersect(ray);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Hopper.java b/chunky/src/java/se/llbit/chunky/block/Hopper.java
deleted file mode 100644
index 309b55692d..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Hopper.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.HopperModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Hopper extends AbstractModelBlock {
- private final String description;
-
- public Hopper(String facing) {
- super("hopper", Texture.hopperInside);
- this.description = "facing=" + facing;
- this.model = new HopperModel(facing);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/IronBars.java b/chunky/src/java/se/llbit/chunky/block/IronBars.java
deleted file mode 100644
index 1015991a4e..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/IronBars.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.IronBarsModel;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.chunky.world.BlockData;
-
-public class IronBars extends AbstractModelBlock {
-
- private final String description;
-
- public IronBars(boolean north, boolean south, boolean east, boolean west) {
- super("iron_bars", Texture.ironBars);
- this.description = String.format("north=%s, south=%s, east=%s, west=%s",
- north, south, east, west);
- int connections = 0;
- if (north) {
- connections |= BlockData.CONNECTED_NORTH;
- }
- if (south) {
- connections |= BlockData.CONNECTED_SOUTH;
- }
- if (east) {
- connections |= BlockData.CONNECTED_EAST;
- }
- if (west) {
- connections |= BlockData.CONNECTED_WEST;
- }
- model = new IronBarsModel(connections);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/JigsawBlock.java b/chunky/src/java/se/llbit/chunky/block/JigsawBlock.java
deleted file mode 100644
index 1b5dc82b90..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/JigsawBlock.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.JigsawModel;
-import se.llbit.chunky.resources.Texture;
-
-public class JigsawBlock extends AbstractModelBlock {
-
- private final String orientation;
-
- public JigsawBlock(String name, String orientation) {
- super(name, Texture.jigsawTop);
- this.orientation = orientation;
- this.model = new JigsawModel(orientation);
- opaque = true;
- }
-
- @Override
- public String description() {
- return "orientation=" + orientation;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Ladder.java b/chunky/src/java/se/llbit/chunky/block/Ladder.java
deleted file mode 100644
index fa36bc9b1b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Ladder.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.LadderModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Ladder extends AbstractModelBlock {
-
- private final String description;
-
- public Ladder(String facingString) {
- super("ladder", Texture.ladder);
- this.description = "facing=" + facingString;
- solid = false;
- int facing;
- switch (facingString) {
- default:
- case "north":
- facing = 2;
- break;
- case "south":
- facing = 3;
- break;
- case "west":
- facing = 0;
- break;
- case "east":
- facing = 1;
- break;
- }
- model = new LadderModel(facing);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Lantern.java b/chunky/src/java/se/llbit/chunky/block/Lantern.java
deleted file mode 100644
index 315e99ed23..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Lantern.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.LanternModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Lantern extends AbstractModelBlock {
-
- private final boolean hanging;
-
- public Lantern(String name, Texture texture, boolean hanging) {
- super(name, texture);
- this.hanging = hanging;
- this.model = new LanternModel(texture, hanging);
- }
-
- @Override
- public String description() {
- return "hanging=" + hanging;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/LargeFern.java b/chunky/src/java/se/llbit/chunky/block/LargeFern.java
deleted file mode 100644
index e0bb9d8dec..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/LargeFern.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GrassTintedSpriteModel;
-import se.llbit.chunky.resources.Texture;
-
-public class LargeFern extends AbstractModelBlock {
-
- public LargeFern(String half) {
- super("large_fern",
- half.equals("upper")
- ? Texture.largeFernTop
- : Texture.largeFernBottom);
- solid = false;
- model = new GrassTintedSpriteModel(texture);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/LavaCauldron.java b/chunky/src/java/se/llbit/chunky/block/LavaCauldron.java
deleted file mode 100644
index e2fec1e889..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/LavaCauldron.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CauldronModel;
-import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.math.Ray;
-
-public class LavaCauldron extends Cauldron {
-
- public LavaCauldron() {
- super("lava_cauldron", 3); // lava cauldrons are always full
- localIntersect = true;
- }
-
- @Override
- public boolean intersect(Ray ray, Scene scene) {
- return CauldronModel.intersectWithLava(ray);
- }
-
- @Override
- public String description() {
- return ""; // do not show the level
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Leaves.java b/chunky/src/java/se/llbit/chunky/block/Leaves.java
deleted file mode 100644
index 33e937c2af..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Leaves.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.LeafModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Leaves extends AbstractModelBlock {
-
- public Leaves(String name, Texture texture) {
- super(name, texture);
- solid = false;
- this.model = new LeafModel(texture);
- }
-
- public Leaves(String name, Texture texture, int tint) {
- super(name, texture);
- solid = false;
- this.model = new LeafModel(texture, tint);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/LightningRod.java b/chunky/src/java/se/llbit/chunky/block/LightningRod.java
deleted file mode 100644
index 23b7da0fae..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/LightningRod.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.LightningRodModel;
-import se.llbit.chunky.resources.Texture;
-
-public class LightningRod extends AbstractModelBlock {
-
- private final String facing;
- private final boolean powered;
-
- public LightningRod(String facing, boolean powered) {
- super("lightning_rod", Texture.lightningRod);
- this.model = new LightningRodModel(facing, powered);
- this.powered = powered;
- this.facing = facing;
- }
-
- @Override
- public String description() {
- return "facing=" + facing + ", powered=" + powered;
- }
-
- public boolean isPowered() {
- return powered;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/LilyPad.java b/chunky/src/java/se/llbit/chunky/block/LilyPad.java
deleted file mode 100644
index 246a504f0c..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/LilyPad.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.entity.Entity;
-import se.llbit.chunky.entity.LilyPadEntity;
-import se.llbit.chunky.entity.SignEntity;
-import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Ray;
-import se.llbit.math.Vector3;
-import se.llbit.nbt.CompoundTag;
-
-public class LilyPad extends MinecraftBlockTranslucent {
- public LilyPad() {
- super("lily_pad", Texture.lilyPad);
- invisible = true;
- opaque = false;
- localIntersect = true;
- }
-
- @Override public boolean intersect(Ray ray, Scene scene) {
- return false;
- }
-
- @Override public boolean isEntity() {
- return true;
- }
-
- @Override public Entity toEntity(Vector3 position) {
- return new LilyPadEntity(position);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Log.java b/chunky/src/java/se/llbit/chunky/block/Log.java
deleted file mode 100644
index c3a648bc57..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Log.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.LogModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Log extends AbstractModelBlock {
-
- private final String description;
-
- public Log(String name, Texture side, Texture top, String axis) {
- super(name, side);
- this.description = "axis=" + axis;
- this.model = new LogModel(axis, side, top);
- opaque = true;
- solid = true;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/MangrovePropagule.java b/chunky/src/java/se/llbit/chunky/block/MangrovePropagule.java
deleted file mode 100644
index 8c43354dd9..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/MangrovePropagule.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.MangrovePropaguleModel;
-import se.llbit.chunky.resources.Texture;
-
-public class MangrovePropagule extends AbstractModelBlock {
- private final int age;
- private final boolean hanging;
-
- public MangrovePropagule(int age, boolean hanging) {
- super("mangrove_propagule", Texture.mangrovePropagule);
- this.age = age;
- this.hanging = hanging;
- this.model = new MangrovePropaguleModel(age, hanging);
- }
-
- @Override
- public String description() {
- return "age=" + age + ", hanging=" + hanging;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/MangroveRoots.java b/chunky/src/java/se/llbit/chunky/block/MangroveRoots.java
deleted file mode 100644
index b96cd0f9f9..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/MangroveRoots.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.MangroveRootsModel;
-import se.llbit.chunky.resources.Texture;
-
-public class MangroveRoots extends AbstractModelBlock {
- public MangroveRoots() {
- super("mangrove_roots", Texture.mangroveRootsTop);
- this.model = new MangroveRootsModel();
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/MinecraftBlockProvider.java b/chunky/src/java/se/llbit/chunky/block/MinecraftBlockProvider.java
index 41d386d8fb..e5159d304c 100644
--- a/chunky/src/java/se/llbit/chunky/block/MinecraftBlockProvider.java
+++ b/chunky/src/java/se/llbit/chunky/block/MinecraftBlockProvider.java
@@ -3,9 +3,12 @@
import java.util.*;
import java.util.function.BiFunction;
+import se.llbit.chunky.block.minecraft.*;
+import se.llbit.chunky.block.minecraft.Comparator;
+import se.llbit.chunky.block.minecraft.Observer;
import se.llbit.chunky.entity.SkullEntity;
-import se.llbit.chunky.model.FlowerPotModel;
-import se.llbit.chunky.model.FlowerPotModel.Kind;
+import se.llbit.chunky.model.minecraft.FlowerPotModel;
+import se.llbit.chunky.model.minecraft.FlowerPotModel.Kind;
import se.llbit.chunky.resources.EntityTexture;
import se.llbit.chunky.resources.ShulkerTexture;
import se.llbit.chunky.resources.Texture;
diff --git a/chunky/src/java/se/llbit/chunky/block/NetherPortal.java b/chunky/src/java/se/llbit/chunky/block/NetherPortal.java
deleted file mode 100644
index cb8807262a..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/NetherPortal.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.NetherPortalModel;
-import se.llbit.chunky.resources.Texture;
-
-public class NetherPortal extends AbstractModelBlock {
-
- private final String description;
-
- public NetherPortal(String axis) {
- super("nether_portal", Texture.portal);
- this.description = "axis=" + axis;
- this.model = new NetherPortalModel(axis);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/NetherWart.java b/chunky/src/java/se/llbit/chunky/block/NetherWart.java
deleted file mode 100644
index 656a1c7b2f..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/NetherWart.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CropsModel;
-import se.llbit.chunky.resources.Texture;
-
-public class NetherWart extends AbstractModelBlock {
-
- private static final Texture[] texture = {
- Texture.netherWart0, Texture.netherWart1, Texture.netherWart1, Texture.netherWart2
- };
-
- private final int age;
-
- public NetherWart(int age) {
- super("nether_wart", Texture.netherWart2);
- this.age = age & 3;
- this.model = new CropsModel(texture[this.age]);
- }
-
- @Override
- public String description() {
- return "age=" + age;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/PinkPetals.java b/chunky/src/java/se/llbit/chunky/block/PinkPetals.java
deleted file mode 100644
index b52420bcbf..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/PinkPetals.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.Flowerbed;
-import se.llbit.chunky.resources.Texture;
-
-public class PinkPetals extends AbstractModelBlock {
- private final String description;
-
- public PinkPetals(String name, int flowerAmount, String facing) {
- super(name, Texture.pinkPetals);
- this.description = String.format("facing=%s, flower_amount=%d", facing, flowerAmount);
- this.model = new Flowerbed(Texture.pinkPetals, Texture.pinkPetalsStem, flowerAmount, facing);
- }
-
- @Override
- public String description() {
- return this.description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/PitcherCrop.java b/chunky/src/java/se/llbit/chunky/block/PitcherCrop.java
deleted file mode 100644
index 5e72a959d2..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/PitcherCrop.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.PitcherCropBottomModel;
-import se.llbit.chunky.model.PitcherCropTopModel;
-import se.llbit.chunky.resources.Texture;
-
-public class PitcherCrop extends AbstractModelBlock {
- private final String description;
-
- public PitcherCrop(int age, String half) {
- super("pitcher_crop", Texture.pitcherCropTop);
- localIntersect = true;
- opaque = false;
- this.model = half.equals("upper")
- ? new PitcherCropTopModel(age)
- : new PitcherCropBottomModel(age);
- this.description = String.format("age=%d, half=%s", age, half);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
\ No newline at end of file
diff --git a/chunky/src/java/se/llbit/chunky/block/PitcherPlant.java b/chunky/src/java/se/llbit/chunky/block/PitcherPlant.java
deleted file mode 100644
index a31a582988..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/PitcherPlant.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.PitcherPlantBottomModel;
-import se.llbit.chunky.model.PitcherPlantTopModel;
-import se.llbit.chunky.resources.Texture;
-
-public class PitcherPlant extends AbstractModelBlock {
- private final String description;
-
- public PitcherPlant(String name, String half) {
- super(name, Texture.pinkPetals);
- this.description = String.format("half=%s", half);
- this.model = half.equals("upper") ? new PitcherPlantTopModel() : new PitcherPlantBottomModel();
- }
-
- @Override
- public String description() {
- return this.description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Potatoes.java b/chunky/src/java/se/llbit/chunky/block/Potatoes.java
deleted file mode 100644
index 09e3b15c89..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Potatoes.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CropsModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Potatoes extends AbstractModelBlock {
-
- private static final Texture[] texture = {
- Texture.potatoes0, Texture.potatoes0, Texture.potatoes1, Texture.potatoes1,
- Texture.potatoes2, Texture.potatoes2, Texture.potatoes2, Texture.potatoes3
- };
-
- private final int age;
-
- public Potatoes(int age) {
- super("potatoes", texture[texture.length - 1]);
- this.age = age % texture.length;
- this.model = new CropsModel(texture[this.age]);
- }
-
- @Override
- public String description() {
- return "age=" + age;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/PowderSnowCauldron.java b/chunky/src/java/se/llbit/chunky/block/PowderSnowCauldron.java
deleted file mode 100644
index debee45f49..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/PowderSnowCauldron.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CauldronModel;
-import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Ray;
-
-public class PowderSnowCauldron extends Cauldron {
-
- public PowderSnowCauldron(int level) {
- super("powder_snow_cauldron", level);
- }
-
- @Override
- public boolean intersect(Ray ray, Scene scene) {
- return CauldronModel.intersect(ray, getLevel(), Texture.powderSnow);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/PressurePlate.java b/chunky/src/java/se/llbit/chunky/block/PressurePlate.java
deleted file mode 100644
index 9152cca616..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/PressurePlate.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.PressurePlateModel;
-import se.llbit.chunky.resources.Texture;
-
-public class PressurePlate extends AbstractModelBlock {
-
- public PressurePlate(String name, Texture texture) {
- super(name, texture);
- model = new PressurePlateModel(texture);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/RedstoneLamp.java b/chunky/src/java/se/llbit/chunky/block/RedstoneLamp.java
deleted file mode 100644
index a425e13da6..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/RedstoneLamp.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class RedstoneLamp extends MinecraftBlock {
- public final boolean isLit;
-
- public RedstoneLamp(boolean lit) {
- super("redstone_lamp", lit ? Texture.redstoneLampOn : Texture.redstoneLampOff);
- this.isLit = lit;
- }
-
- @Override public String description() {
- return "lit=" + isLit;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/RedstoneTorch.java b/chunky/src/java/se/llbit/chunky/block/RedstoneTorch.java
deleted file mode 100644
index 65665ec0ef..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/RedstoneTorch.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class RedstoneTorch extends Torch {
- private final boolean lit;
-
- public RedstoneTorch(boolean lit) {
- super("redstone_torch", lit ? Texture.redstoneTorchOn : Texture.redstoneTorchOff);
- this.lit = lit;
- }
-
- public boolean isLit() {
- return lit;
- }
-
- @Override
- public String description() {
- return "lit=" + lit;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/RedstoneWallTorch.java b/chunky/src/java/se/llbit/chunky/block/RedstoneWallTorch.java
deleted file mode 100644
index f515f380e9..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/RedstoneWallTorch.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class RedstoneWallTorch extends WallTorch {
- private final boolean lit;
-
- public RedstoneWallTorch(String facing, boolean lit) {
- super("redstone_wall_torch", lit ? Texture.redstoneTorchOn : Texture.redstoneTorchOff, facing);
- this.lit = lit;
- }
-
- public boolean isLit() {
- return lit;
- }
-
- @Override
- public String description() {
- return "facing=" + facing + ", lit=" + lit;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/RepeatingCommandBlock.java b/chunky/src/java/se/llbit/chunky/block/RepeatingCommandBlock.java
deleted file mode 100644
index c9899ec33d..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/RepeatingCommandBlock.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.DirectionalBlockModel;
-import se.llbit.chunky.resources.Texture;
-
-public class RepeatingCommandBlock extends AbstractModelBlock {
-
- private final String description;
-
- public RepeatingCommandBlock(String facing, boolean conditional) {
- super("repeating_command_block", Texture.repeatingCommandBlockFront);
- this.description = String.format("facing=%s, conditional=%s", facing, conditional);
- this.model = new DirectionalBlockModel(facing,
- conditional ? Texture.repeatingCommandBlockConditional : Texture.repeatingCommandBlockFront,
- Texture.repeatingCommandBlockBack, Texture.repeatingCommandBlockSide);
- opaque = true;
- solid = true;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/RespawnAnchor.java b/chunky/src/java/se/llbit/chunky/block/RespawnAnchor.java
deleted file mode 100644
index 173a6befc6..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/RespawnAnchor.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class RespawnAnchor extends TexturedBlock {
- private static final Texture[] sideTextures = new Texture[]{
- Texture.respawnAnchorSide0,
- Texture.respawnAnchorSide1,
- Texture.respawnAnchorSide2,
- Texture.respawnAnchorSide3,
- Texture.respawnAnchorSide4
- };
-
- public final int charges;
-
- public RespawnAnchor(int charges) {
- super("respawn_anchor", sideTextures[charges], Texture.respawnAnchorTop, Texture.respawnAnchorBottom);
- this.charges = charges;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Scaffolding.java b/chunky/src/java/se/llbit/chunky/block/Scaffolding.java
deleted file mode 100644
index a1529a1216..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Scaffolding.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.ScaffoldingModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Scaffolding extends AbstractModelBlock {
-
- private final boolean bottom;
-
- public Scaffolding(boolean bottom) {
- super("scaffolding", Texture.scaffoldingSide);
- this.model = new ScaffoldingModel(bottom);
- this.bottom = bottom;
- }
-
- @Override
- public String description() {
- return "bottom=" + bottom;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SculkCatalyst.java b/chunky/src/java/se/llbit/chunky/block/SculkCatalyst.java
deleted file mode 100644
index 2e759b5818..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SculkCatalyst.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class SculkCatalyst extends TexturedBlock {
- private final boolean bloom;
-
- public SculkCatalyst(boolean bloom) {
- super("sculk_catalyst",
- bloom ? Texture.sculkCatalystSideBloom : Texture.sculkCatalystSide,
- bloom ? Texture.sculkCatalystTopBloom : Texture.sculkCatalystTop,
- Texture.sculkCatalystBottom);
- this.bloom = bloom;
- }
-
- @Override
- public String description() {
- return "bloom=" + bloom;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SculkSensor.java b/chunky/src/java/se/llbit/chunky/block/SculkSensor.java
deleted file mode 100644
index 72a9041075..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SculkSensor.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SculkSensorModel;
-import se.llbit.chunky.resources.Texture;
-
-public class SculkSensor extends AbstractModelBlock {
- private final String phase;
-
- public SculkSensor(String phase) {
- super("sculk_sensor", Texture.sculkSensorTop);
- this.phase = phase;
- this.model = new SculkSensorModel(isActive());
- }
-
- public boolean isActive() {
- return phase.equals("active") || phase.equals("cooldown");
- }
-
- @Override
- public String description() {
- return "sculk_sensor_phase=" + phase;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SculkShrieker.java b/chunky/src/java/se/llbit/chunky/block/SculkShrieker.java
deleted file mode 100644
index ba50f81ab4..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SculkShrieker.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SculkShriekerModel;
-import se.llbit.chunky.resources.Texture;
-
-public class SculkShrieker extends AbstractModelBlock {
- private final boolean canSummon;
-
- public SculkShrieker(boolean canSummon) {
- super("sculk_shrieker", Texture.sculkShriekerTop);
- this.canSummon = canSummon;
- model = new SculkShriekerModel(canSummon);
- }
-
- @Override
- public String description() {
- return "can_summon=" + canSummon;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SeaPickle.java b/chunky/src/java/se/llbit/chunky/block/SeaPickle.java
deleted file mode 100644
index 5706919013..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SeaPickle.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SeaPickleModel;
-import se.llbit.chunky.resources.Texture;
-
-public class SeaPickle extends AbstractModelBlock {
-
- private final String description;
- public final boolean live;
- public final int pickles;
-
- public SeaPickle(int pickles, boolean live) {
- super("sea_pickle", Texture.seaPickle);
- pickles = Math.max(1, Math.min(4, pickles));
- this.description = String.format("pickles=%d, waterlogged=%s", pickles, live);
- this.pickles = pickles;
- this.live = live;
- this.model = new SeaPickleModel(pickles, live);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/ShulkerBox.java b/chunky/src/java/se/llbit/chunky/block/ShulkerBox.java
deleted file mode 100644
index dfcc984c83..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/ShulkerBox.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.DirectionalBlockModel;
-import se.llbit.chunky.resources.Texture;
-
-public class ShulkerBox extends AbstractModelBlock {
-
- private final String description;
-
- public ShulkerBox(String name, Texture side, Texture top, Texture bottom, String facing) {
- super(name, side);
- this.description = "facing=" + facing;
- this.model = new DirectionalBlockModel(facing, top, bottom, side);
- opaque = true;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Slab.java b/chunky/src/java/se/llbit/chunky/block/Slab.java
deleted file mode 100644
index b069ea469b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Slab.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SlabModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Slab extends AbstractModelBlock {
-
- private final String description;
-
- public Slab(String name, Texture sideTexture, Texture topTexture, String type) {
- super(name, sideTexture);
- this.description = String.format("type=%s", type);
- this.model = new SlabModel(sideTexture, topTexture, type);
- solid = type.equals("double");
- }
-
- public Slab(String name, Texture texture, String type) {
- this(name, texture, texture, type);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Slime.java b/chunky/src/java/se/llbit/chunky/block/Slime.java
deleted file mode 100644
index f3d560919c..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Slime.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SlimeBlockModel;
-import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Ray;
-
-public class Slime extends MinecraftBlockTranslucent {
- public Slime() {
- super("slime_block", Texture.slime);
- localIntersect = true;
- opaque = false;
- ior = 1.516f; // gelatin, according to https://study.com/academy/answer/what-is-the-refractive-index-of-gelatin.html
- solid = true;
- refractive = true;
- }
-
- @Override
- public boolean intersect(Ray ray, Scene scene) {
- return SlimeBlockModel.intersect(ray);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SmallDripleaf.java b/chunky/src/java/se/llbit/chunky/block/SmallDripleaf.java
deleted file mode 100644
index 104bf99ed1..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SmallDripleaf.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SmallDripleafModel;
-import se.llbit.chunky.resources.Texture;
-
-public class SmallDripleaf extends AbstractModelBlock {
-
- private final String description;
-
- public SmallDripleaf(String facing, String half) {
- super("small_dripleaf", Texture.smallDripleafTop);
- this.description = "facing=" + facing + ", half=" + half;
- this.model = new SmallDripleafModel(facing, half);
- solid = false;
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Smoker.java b/chunky/src/java/se/llbit/chunky/block/Smoker.java
deleted file mode 100644
index 69927b204b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Smoker.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class Smoker extends TopBottomOrientedTexturedBlock {
-
- private final boolean isLit;
- private final String description;
-
- public Smoker(String facing, boolean lit) {
- super(
- "smoker",
- facing,
- lit ? Texture.smokerFrontOn : Texture.smokerFront,
- Texture.smokerSide,
- Texture.smokerTop,
- Texture.smokerBottom);
- this.description = String.format("facing=%s, lit=%s", facing, lit);
- isLit = lit;
- }
-
- public boolean isLit() {
- return isLit;
- }
-
- @Override public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SnifferEgg.java b/chunky/src/java/se/llbit/chunky/block/SnifferEgg.java
deleted file mode 100644
index 3fc85490f3..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SnifferEgg.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SnifferEggModel;
-import se.llbit.chunky.resources.Texture;
-
-public class SnifferEgg extends AbstractModelBlock {
-
- private final String description;
-
- public SnifferEgg(String name, int hatch) {
- super(name, getTopTexture(hatch));
- this.description = "hatch=" + hatch;
- this.model = new SnifferEggModel(hatch);
- }
-
- @Override
- public String description() {
- return description;
- }
-
- private static Texture getTopTexture(int hatch) {
- switch (hatch) {
- case 1:
- return Texture.snifferEggSlightlyCrackedTop;
- case 2:
- return Texture.snifferEggVeryCrackedTop;
- default:
- case 0:
- return Texture.snifferEggNotCrackedTop;
- }
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Snow.java b/chunky/src/java/se/llbit/chunky/block/Snow.java
deleted file mode 100644
index 77db474ed4..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Snow.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SnowModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Snow extends AbstractModelBlock {
-
- private final int layers;
-
- public Snow(int layers) {
- super("snow", Texture.snowBlock);
- this.layers = layers;
- localIntersect = layers < 8;
- opaque = layers == 8;
- this.model = new SnowModel(layers);
- localIntersect = layers < 8;
- opaque = layers == 8;
- }
-
- @Override
- public String description() {
- return "layers=" + layers;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SoulFire.java b/chunky/src/java/se/llbit/chunky/block/SoulFire.java
deleted file mode 100644
index 4af4ebc932..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SoulFire.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.FireModel;
-import se.llbit.chunky.resources.Texture;
-
-public class SoulFire extends AbstractModelBlock {
-
- public SoulFire() {
- super("soul_fire", Texture.soulFire);
- solid = false;
- model = new FireModel(Texture.soulFireLayer0, Texture.soulFireLayer1);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SporeBlossom.java b/chunky/src/java/se/llbit/chunky/block/SporeBlossom.java
deleted file mode 100644
index 7a9eaafc96..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SporeBlossom.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.entity.Entity;
-import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Ray;
-import se.llbit.math.Vector3;
-
-public class SporeBlossom extends Block {
-
- public SporeBlossom() {
- super("spore_blossom", Texture.sporeBlossom);
- invisible = true;
- opaque = false;
- localIntersect = true;
- }
-
- @Override
- public boolean intersect(Ray ray, Scene scene) {
- return false;
- }
-
- @Override
- public boolean isEntity() {
- return true;
- }
-
- @Override
- public Entity toEntity(Vector3 position) {
- return new se.llbit.chunky.entity.SporeBlossom(position);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SpriteBlock.java b/chunky/src/java/se/llbit/chunky/block/SpriteBlock.java
deleted file mode 100644
index f2ce5934cf..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SpriteBlock.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SpriteModel;
-import se.llbit.chunky.resources.Texture;
-
-public class SpriteBlock extends AbstractModelBlock {
-
- protected String facing;
-
- public SpriteBlock(String name, Texture texture) {
- super(name, texture);
- solid = false;
- model = new SpriteModel(texture);
- }
-
- public SpriteBlock(String name, Texture texture, String facing) {
- super(name, texture);
- solid = false;
- model = new SpriteModel(texture, facing);
- this.facing = facing;
- }
-
- @Override
- public String description() {
- if (facing != null) {
- return "facing=" + facing;
- }
- return super.description();
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Stem.java b/chunky/src/java/se/llbit/chunky/block/Stem.java
deleted file mode 100644
index 783d75f0d2..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Stem.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.StemModel;
-import se.llbit.chunky.resources.Texture;
-
-/**
- * Melon or pumpkin stem.
- */
-public class Stem extends AbstractModelBlock {
-
- private final int age;
-
- public Stem(String name, int age) {
- super(name, Texture.stemStraight);
- this.model = new StemModel(age & 7);
- this.age = age & 7;
- }
-
- @Override
- public String description() {
- return "age=" + age;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Stonecutter.java b/chunky/src/java/se/llbit/chunky/block/Stonecutter.java
deleted file mode 100644
index bb3a94e90b..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Stonecutter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.StonecutterModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Stonecutter extends AbstractModelBlock {
-
- private final String facing;
-
- public Stonecutter(String facing) {
- super("stonecutter", Texture.stonecutterSide);
- this.facing = facing;
- this.model = new StonecutterModel(facing);
- }
-
- @Override
- public String description() {
- return "facing=" + facing;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SugarCane.java b/chunky/src/java/se/llbit/chunky/block/SugarCane.java
deleted file mode 100644
index c8ba151daa..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SugarCane.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GrassTintedSpriteModel;
-import se.llbit.chunky.resources.Texture;
-
-public class SugarCane extends AbstractModelBlock {
- public SugarCane() {
- super("sugar_cane", Texture.sugarCane);
- solid = false;
- model = new GrassTintedSpriteModel(Texture.sugarCane);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Sunflower.java b/chunky/src/java/se/llbit/chunky/block/Sunflower.java
deleted file mode 100644
index d58e5aaf99..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Sunflower.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.SunFlowerModel;
-import se.llbit.chunky.resources.Texture;
-
-// TODO: refactor me!
-// TODO: render the sunflower actually facing the sun.
-public class Sunflower extends AbstractModelBlock {
-
- public Sunflower(String half) {
- super("sunflower",
- half.equals("upper")
- ? Texture.sunflowerTop
- : Texture.sunflowerBottom);
- solid = false;
- model = new SunFlowerModel(half.equals("upper"));
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/SweetBerryBush.java b/chunky/src/java/se/llbit/chunky/block/SweetBerryBush.java
deleted file mode 100644
index b0e6c21e01..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/SweetBerryBush.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class SweetBerryBush extends SpriteBlock {
- public SweetBerryBush(int age) {
- super("sweet_berry_bush", getTextureByAge(age));
- }
-
- protected static Texture getTextureByAge(int age) {
- switch (age) {
- case 0:
- return Texture.sweetBerryBushStage0;
- case 1:
- return Texture.sweetBerryBushStage1;
- case 2:
- return Texture.sweetBerryBushStage2;
- case 3:
- default:
- return Texture.sweetBerryBushStage3;
- }
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/TallGrass.java b/chunky/src/java/se/llbit/chunky/block/TallGrass.java
deleted file mode 100644
index da7f53766c..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/TallGrass.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.GrassTintedSpriteModel;
-import se.llbit.chunky.resources.Texture;
-
-public class TallGrass extends AbstractModelBlock {
-
- public TallGrass(String half) {
- super("tall_grass",
- half.equals("upper")
- ? Texture.doubleTallGrassTop
- : Texture.doubleTallGrassBottom);
- solid = false;
- model = new GrassTintedSpriteModel(texture);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/TintedGlass.java b/chunky/src/java/se/llbit/chunky/block/TintedGlass.java
deleted file mode 100644
index 462139d250..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/TintedGlass.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class TintedGlass extends MinecraftBlockTranslucent {
-
- public TintedGlass() {
- super("tinted_glass", Texture.tintedGlass);
- ior = 1.52f;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Torch.java b/chunky/src/java/se/llbit/chunky/block/Torch.java
deleted file mode 100644
index 4dc58f2bd4..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Torch.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.TorchModel;
-import se.llbit.chunky.resources.Texture;
-
-/**
- * A standing torch (on ground).
- */
-public class Torch extends AbstractModelBlock {
-
- public Torch(String name, Texture texture) {
- super(name, texture);
- solid = false;
- model = new TorchModel(texture, 5);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/TorchflowerCrop.java b/chunky/src/java/se/llbit/chunky/block/TorchflowerCrop.java
deleted file mode 100644
index f27235be35..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/TorchflowerCrop.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.resources.Texture;
-
-public class TorchflowerCrop extends SpriteBlock {
- public TorchflowerCrop(int age) {
- super("torchflower_crop", getTextureByAge(age));
- }
-
- protected static Texture getTextureByAge(int age) {
- switch (age) {
- case 1:
- return Texture.torchflowerCropStage1;
- case 0:
- default:
- return Texture.torchflowerCropStage0;
- }
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/TurtleEgg.java b/chunky/src/java/se/llbit/chunky/block/TurtleEgg.java
deleted file mode 100644
index 5ba9102adf..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/TurtleEgg.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.TurtleEggModel;
-import se.llbit.chunky.resources.Texture;
-
-public class TurtleEgg extends AbstractModelBlock {
-
- private final String description;
-
- public TurtleEgg(int eggs, int hatch) {
- super("turtle_egg", Texture.turtleEgg);
- this.description = String.format("eggs=%d, hatch=%d", eggs, hatch);
- this.model = new TurtleEggModel(eggs, hatch);
- }
-
- @Override
- public String description() {
- return description;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/UnknownBlock.java b/chunky/src/java/se/llbit/chunky/block/UnknownBlock.java
deleted file mode 100644
index 2beeb88e73..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/UnknownBlock.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Ray;
-
-public class UnknownBlock extends SpriteBlock {
- public static final UnknownBlock UNKNOWN = new UnknownBlock("?");
-
- public UnknownBlock(String name) {
- super(name, Texture.unknown);
- }
-
- @Override
- public boolean intersect(Ray ray, Scene scene) {
- if (scene.getHideUnknownBlocks()) {
- return false;
- }
- return super.intersect(ray, scene);
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/WallTorch.java b/chunky/src/java/se/llbit/chunky/block/WallTorch.java
deleted file mode 100644
index 59fbab5632..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/WallTorch.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.TorchModel;
-import se.llbit.chunky.resources.Texture;
-
-/**
- * A torch attached to a wall.
- */
-public class WallTorch extends AbstractModelBlock {
- protected final String facing;
-
- public WallTorch(String name, Texture texture, String facing) {
- super(name, texture);
- this.facing = facing;
- solid = false;
- int facingInt;
- switch (facing) {
- default:
- case "north":
- facingInt = 4;
- break;
- case "south":
- facingInt = 3;
- break;
- case "west":
- facingInt = 2;
- break;
- case "east":
- facingInt = 1;
- break;
- }
- model = new TorchModel(texture, facingInt);
- }
-
- @Override
- public String description() {
- return "facing=" + facing;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/Wheat.java b/chunky/src/java/se/llbit/chunky/block/Wheat.java
deleted file mode 100644
index 86b1de5eca..0000000000
--- a/chunky/src/java/se/llbit/chunky/block/Wheat.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package se.llbit.chunky.block;
-
-import se.llbit.chunky.model.CropsModel;
-import se.llbit.chunky.resources.Texture;
-
-public class Wheat extends AbstractModelBlock {
-
- private static final Texture[] texture = {
- Texture.crops0, Texture.crops1, Texture.crops2, Texture.crops3, Texture.crops4,
- Texture.crops5, Texture.crops6, Texture.crops7
- };
-
- private final int age;
-
- public Wheat(int age) {
- super("wheat", Texture.crops7);
- this.age = age & 7;
- this.model = new CropsModel(texture[this.age]);
- }
-
- @Override
- public String description() {
- return "age=" + age;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/block/legacy/LegacyBlockUtils.java b/chunky/src/java/se/llbit/chunky/block/legacy/LegacyBlockUtils.java
index 9ea9a88252..6b977841b7 100644
--- a/chunky/src/java/se/llbit/chunky/block/legacy/LegacyBlockUtils.java
+++ b/chunky/src/java/se/llbit/chunky/block/legacy/LegacyBlockUtils.java
@@ -1,9 +1,9 @@
package se.llbit.chunky.block.legacy;
import se.llbit.chunky.block.BlockFace;
-import se.llbit.chunky.block.FenceGate;
+import se.llbit.chunky.block.minecraft.FenceGate;
import se.llbit.chunky.block.FinalizationState;
-import se.llbit.chunky.block.Stairs;
+import se.llbit.chunky.block.minecraft.Stairs;
import se.llbit.chunky.block.legacy.blocks.LegacyFenceGate;
import se.llbit.chunky.block.legacy.blocks.LegacyStairs;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyDoorPart.java b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyDoorPart.java
index 59d6206c81..55cdda7eee 100644
--- a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyDoorPart.java
+++ b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyDoorPart.java
@@ -1,7 +1,7 @@
package se.llbit.chunky.block.legacy.blocks;
import se.llbit.chunky.block.BlockFace;
-import se.llbit.chunky.block.Door;
+import se.llbit.chunky.block.minecraft.Door;
import se.llbit.chunky.block.FinalizationState;
import se.llbit.chunky.block.legacy.LegacyBlocks;
import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock;
diff --git a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyRedstoneWire.java b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyRedstoneWire.java
index 0ee3585c50..8fad7d4907 100644
--- a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyRedstoneWire.java
+++ b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyRedstoneWire.java
@@ -1,7 +1,7 @@
package se.llbit.chunky.block.legacy.blocks;
import se.llbit.chunky.block.FinalizationState;
-import se.llbit.chunky.block.Repeater;
+import se.llbit.chunky.block.minecraft.Repeater;
import se.llbit.chunky.block.legacy.LegacyBlockUtils;
import se.llbit.chunky.block.legacy.LegacyBlocks;
import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock;
diff --git a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacySkull.java b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacySkull.java
index b01d5bb20a..c3bbbcf492 100644
--- a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacySkull.java
+++ b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacySkull.java
@@ -1,6 +1,6 @@
package se.llbit.chunky.block.legacy.blocks;
-import static se.llbit.chunky.block.Head.getTextureUrl;
+import static se.llbit.chunky.block.minecraft.Head.getTextureUrl;
import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
diff --git a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacySnowCoverableBlock.java b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacySnowCoverableBlock.java
index e5ec154987..2183e89a5b 100644
--- a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacySnowCoverableBlock.java
+++ b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacySnowCoverableBlock.java
@@ -1,7 +1,7 @@
package se.llbit.chunky.block.legacy.blocks;
import se.llbit.chunky.block.FinalizationState;
-import se.llbit.chunky.block.Snow;
+import se.llbit.chunky.block.minecraft.Snow;
import se.llbit.chunky.block.legacy.LegacyBlocks;
import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyStairs.java b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyStairs.java
index bf0831f142..25bce403c5 100644
--- a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyStairs.java
+++ b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyStairs.java
@@ -2,7 +2,7 @@
import se.llbit.chunky.block.BlockFace;
import se.llbit.chunky.block.FinalizationState;
-import se.llbit.chunky.block.Stairs;
+import se.llbit.chunky.block.minecraft.Stairs;
import se.llbit.chunky.block.legacy.LegacyBlocks;
import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyTripwire.java b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyTripwire.java
index 7f1bc350e3..e163bb24a3 100644
--- a/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyTripwire.java
+++ b/chunky/src/java/se/llbit/chunky/block/legacy/blocks/LegacyTripwire.java
@@ -2,8 +2,8 @@
import se.llbit.chunky.block.BlockFace;
import se.llbit.chunky.block.FinalizationState;
-import se.llbit.chunky.block.Tripwire;
-import se.llbit.chunky.block.TripwireHook;
+import se.llbit.chunky.block.minecraft.Tripwire;
+import se.llbit.chunky.block.minecraft.TripwireHook;
import se.llbit.chunky.block.legacy.LegacyBlocks;
import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Air.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Air.java
new file mode 100644
index 0000000000..a0e291ed87
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Air.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlock;
+import se.llbit.chunky.resources.Texture;
+
+public class Air extends MinecraftBlock {
+ public static final Air INSTANCE = new Air();
+
+ private Air() {
+ super("air", Texture.air);
+ solid = false;
+ opaque = false;
+ invisible = true;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/AmethystCluster.java b/chunky/src/java/se/llbit/chunky/block/minecraft/AmethystCluster.java
new file mode 100644
index 0000000000..7e276c0c54
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/AmethystCluster.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.resources.Texture;
+
+public class AmethystCluster extends SpriteBlock {
+
+ private final boolean lit;
+
+ public AmethystCluster(String name, Texture texture, String facing, boolean lit) {
+ super(name, texture, facing);
+ this.lit = lit;
+ }
+
+ public boolean isLit() {
+ return lit;
+ }
+
+ @Override
+ public String description() {
+ return "facing=" + facing + ", lit=" + lit;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Anvil.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Anvil.java
new file mode 100644
index 0000000000..1443410913
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Anvil.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.AnvilModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Anvil extends AbstractModelBlock {
+
+ private final String description;
+
+ public Anvil(String name, String facing, int damage) {
+ super(name, Texture.anvilSide);
+ int facing1;
+ switch (facing) {
+ default:
+ case "north":
+ case "south":
+ facing1 = 0;
+ break;
+ case "east":
+ case "west":
+ facing1 = 1;
+ break;
+ }
+ this.model = new AnvilModel(facing1, damage);
+
+ this.description = "damage=" + damage;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/AttachedStem.java b/chunky/src/java/se/llbit/chunky/block/minecraft/AttachedStem.java
new file mode 100644
index 0000000000..f425f4b15a
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/AttachedStem.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.AttachedStemModel;
+import se.llbit.chunky.resources.Texture;
+
+/**
+ * Attached melon or pumpkin stem.
+ */
+public class AttachedStem extends AbstractModelBlock {
+
+ private final String description;
+
+ public AttachedStem(String name, String facingString) {
+ super(name, Texture.stemBent);
+ description = "facing=" + facingString;
+ int facing;
+ switch (facingString) {
+ default:
+ case "north":
+ facing = 2; //0;
+ break;
+ case "south":
+ facing = 3; //1;
+ break;
+ case "east":
+ facing = 1; //2;
+ break;
+ case "west":
+ facing = 0; //3;
+ break;
+ }
+ this.model = new AttachedStemModel(facing);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Azalea.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Azalea.java
new file mode 100644
index 0000000000..a0b6d0d49a
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Azalea.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.AzaleaModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Azalea extends AbstractModelBlock {
+
+ public Azalea(String name, Texture top, Texture side) {
+ super(name, top);
+ solid = false;
+ model = new AzaleaModel(top, side);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Bamboo.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Bamboo.java
new file mode 100644
index 0000000000..2423d845ab
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Bamboo.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.BambooModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Bamboo extends AbstractModelBlock {
+
+ private final String description;
+
+ public Bamboo(int age, String leaves) {
+ super("bamboo", Texture.bambooStalk);
+ description = "age=" + age + ", leaves=" + leaves;
+ model = new BambooModel(age, leaves);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Banner.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Banner.java
similarity index 62%
rename from chunky/src/java/se/llbit/chunky/block/Banner.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Banner.java
index de358b0b9b..7f0fe77d04 100644
--- a/chunky/src/java/se/llbit/chunky/block/Banner.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Banner.java
@@ -1,7 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
-import se.llbit.chunky.entity.SignEntity;
import se.llbit.chunky.entity.StandingBanner;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Barrel.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Barrel.java
new file mode 100644
index 0000000000..a230c7f274
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Barrel.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.BarrelModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Barrel extends AbstractModelBlock {
+
+ private final String description;
+
+ public Barrel(String facing, String open) {
+ super("barrel", Texture.barrelSide);
+ this.description = "facing=" + facing + ", open=" + open;
+ this.model = new BarrelModel(facing, open);
+ opaque = true;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Beacon.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Beacon.java
new file mode 100644
index 0000000000..3f6949024b
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Beacon.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.entity.BeaconBeam;
+import se.llbit.chunky.entity.Entity;
+import se.llbit.chunky.model.minecraft.BeaconModel;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Vector3;
+import se.llbit.nbt.CompoundTag;
+
+public class Beacon extends AbstractModelBlock {
+
+ public Beacon() {
+ super("beacon", Texture.beacon);
+ localIntersect = true;
+ solid = false;
+ this.model = new BeaconModel();
+ }
+
+ @Override
+ public boolean isBlockWithEntity() {
+ return true;
+ }
+
+ @Override
+ public boolean isBlockEntity() {
+ return true;
+ }
+
+ @Override
+ public Entity toBlockEntity(Vector3 position, CompoundTag entityTag) {
+ if (entityTag.get("Levels").intValue(0) > 0) {
+ return new BeaconBeam(position);
+ }
+ return null;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Bed.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Bed.java
new file mode 100644
index 0000000000..9160c0943a
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Bed.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.BedModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Bed extends AbstractModelBlock {
+
+ private final String description;
+
+ public Bed(String name, Texture texture, String part, String facing) {
+ super(name, texture);
+ this.description = String.format("part=%s, facing=%s", part, facing);
+ boolean head = part.equals("head");
+ int direction;
+ switch (facing) {
+ default:
+ case "north":
+ direction = 2;
+ break;
+ case "east":
+ direction = 3;
+ break;
+ case "south":
+ direction = 0;
+ break;
+ case "west":
+ direction = 1;
+ break;
+ }
+ model = new BedModel(head, direction, texture);
+ solid = false;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Beetroots.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Beetroots.java
new file mode 100644
index 0000000000..21e77152fd
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Beetroots.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CropsModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Beetroots extends AbstractModelBlock {
+
+ private static final Texture[] texture = {
+ Texture.beets0, Texture.beets1, Texture.beets2, Texture.beets3
+ };
+
+ private final int age;
+
+ public Beetroots(int age) {
+ super("beetroots", Texture.beets3);
+ this.age = age & 3;
+ this.model = new CropsModel(texture[this.age]);
+ }
+
+ @Override
+ public String description() {
+ return "age=" + age;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Bell.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Bell.java
new file mode 100644
index 0000000000..70ac655381
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Bell.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.BellModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Bell extends AbstractModelBlock {
+
+ private final String description;
+
+ public Bell(String facing, String attachment) {
+ super("bell", Texture.bellBody);
+ this.description = "attachment=" + attachment + ",facing=" + facing;
+ model = new BellModel(facing, attachment);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/BigDripleaf.java b/chunky/src/java/se/llbit/chunky/block/minecraft/BigDripleaf.java
new file mode 100644
index 0000000000..086305d7af
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/BigDripleaf.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.BigDripleafModel;
+import se.llbit.chunky.resources.Texture;
+
+public class BigDripleaf extends AbstractModelBlock {
+
+ private final String description;
+
+ public BigDripleaf(String facing, String tilt) {
+ super("big_dripleaf", Texture.bigDripleafTop);
+ description = "facing=" + facing + ", tilt=" + tilt;
+ model = new BigDripleafModel(facing, tilt);
+ solid = false;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/BigDripleafStem.java b/chunky/src/java/se/llbit/chunky/block/minecraft/BigDripleafStem.java
new file mode 100644
index 0000000000..b8d0e6c3f4
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/BigDripleafStem.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.BigDripleafStemModel;
+import se.llbit.chunky.resources.Texture;
+
+public class BigDripleafStem extends AbstractModelBlock {
+
+ private final String facing;
+
+ public BigDripleafStem(String facing) {
+ super("big_dripleaf_stem", Texture.bigDripleafStem);
+ this.facing = facing;
+ model = new BigDripleafStemModel(facing);
+ solid = false;
+ }
+
+ @Override
+ public String description() {
+ return "facing=" + facing;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/BlastFurnace.java b/chunky/src/java/se/llbit/chunky/block/minecraft/BlastFurnace.java
new file mode 100644
index 0000000000..9ba4b0821d
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/BlastFurnace.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.TopBottomOrientedTexturedBlock;
+import se.llbit.chunky.resources.Texture;
+
+public class BlastFurnace extends TopBottomOrientedTexturedBlock {
+
+ private final boolean isLit;
+ private final String description;
+
+ public BlastFurnace(String facing, boolean lit) {
+ super(
+ "blast_furnace",
+ facing,
+ lit ? Texture.blastFurnaceFrontOn : Texture.blastFurnaceFront,
+ Texture.blastFurnaceSide,
+ Texture.blastFurnaceTop);
+ this.description = String.format("facing=%s, lit=%s", facing, lit);
+ isLit = lit;
+ }
+
+ public boolean isLit() {
+ return isLit;
+ }
+
+ @Override public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/BrewingStand.java b/chunky/src/java/se/llbit/chunky/block/minecraft/BrewingStand.java
new file mode 100644
index 0000000000..7603ae30d5
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/BrewingStand.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.BrewingStandModel;
+import se.llbit.chunky.resources.Texture;
+
+public class BrewingStand extends AbstractModelBlock {
+ private final String description;
+
+ public BrewingStand(boolean bottle0, boolean bottle1, boolean bottle2) {
+ super("brewing_stand", Texture.brewingStandBase);
+ description = String.format("has_bottle_0=%s, has_bottle_1=%s, has_bottle_2=%s",
+ bottle0, bottle1, bottle2);
+ this.model = new BrewingStandModel(bottle0, bottle1, bottle2);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Button.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Button.java
new file mode 100644
index 0000000000..7c2465dccb
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Button.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ButtonModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Button extends AbstractModelBlock {
+
+ private final String description;
+ // TODO(llbit): render powered buttons
+
+ public Button(String name, Texture texture, String face, String facing, boolean powered) {
+ super(name, texture);
+ this.description = String.format("face=%s, facing=%s, powered=%s",
+ face, facing, powered);
+ this.model = new ButtonModel(face, facing, texture);
+ // TODO handle rotation on top/bottom positions!
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Cactus.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Cactus.java
new file mode 100644
index 0000000000..9d94d0b241
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Cactus.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CactusModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Cactus extends AbstractModelBlock {
+
+ public Cactus() {
+ super("cactus", Texture.cactusSide);
+ localIntersect = true;
+ opaque = false;
+ this.model = new CactusModel();
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Cake.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Cake.java
new file mode 100644
index 0000000000..78cd6c26e5
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Cake.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CakeModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Cake extends AbstractModelBlock {
+
+ private final int bites;
+
+ public Cake(int bites) {
+ super("cake", Texture.cakeTop);
+ this.model = new CakeModel(bites);
+ this.bites = bites;
+ }
+
+ @Override
+ public String description() {
+ return "bites=" + bites;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/CakeWithCandle.java b/chunky/src/java/se/llbit/chunky/block/minecraft/CakeWithCandle.java
similarity index 59%
rename from chunky/src/java/se/llbit/chunky/block/CakeWithCandle.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/CakeWithCandle.java
index ba6a0947ac..c6cdb2f976 100644
--- a/chunky/src/java/se/llbit/chunky/block/CakeWithCandle.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/CakeWithCandle.java
@@ -1,8 +1,27 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.FlameParticles;
-import se.llbit.chunky.model.CakeWithCandleModel;
+import se.llbit.chunky.model.minecraft.CakeWithCandleModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/block/CalibratedSculkSensor.java b/chunky/src/java/se/llbit/chunky/block/minecraft/CalibratedSculkSensor.java
similarity index 54%
rename from chunky/src/java/se/llbit/chunky/block/CalibratedSculkSensor.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/CalibratedSculkSensor.java
index 42e9f581c9..bb4e503651 100644
--- a/chunky/src/java/se/llbit/chunky/block/CalibratedSculkSensor.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/CalibratedSculkSensor.java
@@ -1,8 +1,27 @@
-package se.llbit.chunky.block;
-
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
import se.llbit.chunky.entity.CalibratedSculkSensorAmethyst;
import se.llbit.chunky.entity.Entity;
-import se.llbit.chunky.model.CalibratedSculkSensorModel;
+import se.llbit.chunky.model.minecraft.CalibratedSculkSensorModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/block/Campfire.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Campfire.java
similarity index 65%
rename from chunky/src/java/se/llbit/chunky/block/Campfire.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Campfire.java
index e089a62482..42c4d59499 100644
--- a/chunky/src/java/se/llbit/chunky/block/Campfire.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Campfire.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
diff --git a/chunky/src/java/se/llbit/chunky/block/Candle.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Candle.java
similarity index 75%
rename from chunky/src/java/se/llbit/chunky/block/Candle.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Candle.java
index ead4228ffd..6c41351fcb 100644
--- a/chunky/src/java/se/llbit/chunky/block/Candle.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Candle.java
@@ -1,8 +1,27 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.FlameParticles;
-import se.llbit.chunky.model.CandleModel;
+import se.llbit.chunky.model.minecraft.CandleModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.Material;
import se.llbit.chunky.world.material.TextureMaterial;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Carpet.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Carpet.java
new file mode 100644
index 0000000000..3169f6cff2
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Carpet.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CarpetModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Carpet extends AbstractModelBlock {
+
+ public Carpet(String name, Texture texture) {
+ super(name, texture);
+ solid = false;
+ this.model = new CarpetModel(texture);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Carrots.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Carrots.java
new file mode 100644
index 0000000000..6f69dd48cc
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Carrots.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CropsModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Carrots extends AbstractModelBlock {
+
+ private static final Texture[] texture = {
+ Texture.carrots0, Texture.carrots0, Texture.carrots1, Texture.carrots1,
+ Texture.carrots2, Texture.carrots2, Texture.carrots2, Texture.carrots3
+ };
+
+ private final int age;
+
+ public Carrots(int age) {
+ super("carrots", texture[texture.length - 1]);
+ this.age = age % texture.length;
+ this.model = new CropsModel(texture[this.age]);
+ }
+
+ @Override
+ public String description() {
+ return "age=" + age;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Cauldron.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Cauldron.java
new file mode 100644
index 0000000000..6643e6db37
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Cauldron.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
+import se.llbit.chunky.model.minecraft.CauldronModel;
+import se.llbit.chunky.renderer.scene.Scene;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Ray;
+
+public class Cauldron extends MinecraftBlockTranslucent {
+
+ private final int level;
+
+ public Cauldron(String name, int level) {
+ super(name, Texture.cauldronSide);
+ this.level = level;
+ localIntersect = true;
+ }
+
+ public int getLevel() {
+ return level;
+ }
+
+ @Override
+ public boolean intersect(Ray ray, Scene scene) {
+ return CauldronModel.intersectWithWater(ray, scene, level);
+ }
+
+ @Override
+ public String description() {
+ return "level=" + level;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/CaveVines.java b/chunky/src/java/se/llbit/chunky/block/minecraft/CaveVines.java
new file mode 100644
index 0000000000..7951dc556d
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/CaveVines.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.resources.Texture;
+
+public class CaveVines extends SpriteBlock {
+
+ private final boolean berries;
+
+ public CaveVines(String name, boolean berries, boolean body) {
+ super(name, getTexture(body, berries));
+ this.berries = berries;
+ }
+
+ private static Texture getTexture(boolean body, boolean lit) {
+ if (body) {
+ return lit ? Texture.caveVinesPlantLit : Texture.caveVinesPlant;
+ }
+ return lit ? Texture.caveVinesLit : Texture.caveVines;
+ }
+
+ public boolean hasBerries() {
+ return berries;
+ }
+
+ @Override
+ public String description() {
+ return "berries=" + berries;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Chain.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Chain.java
new file mode 100644
index 0000000000..8d91ad93d5
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Chain.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ChainModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Chain extends AbstractModelBlock {
+
+ private final String description;
+
+ public Chain(String name, Texture texture, String axis) {
+ super(name, texture);
+ model = new ChainModel(axis);
+ description = "axis=" + axis;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/ChainCommandBlock.java b/chunky/src/java/se/llbit/chunky/block/minecraft/ChainCommandBlock.java
new file mode 100644
index 0000000000..ed6cbd1fa4
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/ChainCommandBlock.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.DirectionalBlockModel;
+import se.llbit.chunky.resources.Texture;
+
+public class ChainCommandBlock extends AbstractModelBlock {
+
+ private final String description;
+
+ public ChainCommandBlock(String facing, boolean conditional) {
+ super("chain_command_block", Texture.chainCommandBlockFront);
+ this.description = String.format("facing=%s, conditional=%s", facing, conditional);
+ this.model = new DirectionalBlockModel(facing,
+ conditional ? Texture.chainCommandBlockConditional : Texture.chainCommandBlockFront,
+ Texture.chainCommandBlockBack, Texture.chainCommandBlockSide);
+ opaque = true;
+ solid = true;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Chest.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Chest.java
similarity index 54%
rename from chunky/src/java/se/llbit/chunky/block/Chest.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Chest.java
index 22e3230db0..f1810f99e0 100644
--- a/chunky/src/java/se/llbit/chunky/block/Chest.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Chest.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.ChestModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ChestModel;
import se.llbit.chunky.resources.Texture;
public class Chest extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/ChiseledBookshelf.java b/chunky/src/java/se/llbit/chunky/block/minecraft/ChiseledBookshelf.java
new file mode 100644
index 0000000000..d057a96bb5
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/ChiseledBookshelf.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.FixedTopBottomRotatableTexturedBlock;
+import se.llbit.chunky.resources.Texture;
+
+public class ChiseledBookshelf extends FixedTopBottomRotatableTexturedBlock {
+
+ private final String description;
+
+ public ChiseledBookshelf(String facing, boolean slot0, boolean slot1, boolean slot2, boolean slot3, boolean slot4, boolean slot5) {
+ super("chiseled_bookshelf", facing, Texture.chiseledBookshelfCombinations[(slot0?1:0) + (slot1?2:0) + (slot2?4:0) + (slot3?8:0) + (slot4?16:0) + (slot5?32:0)],
+ Texture.chiseledBookshelfSide, Texture.chiseledBookshelfTop);
+ this.description = String.format("facing=%s, slot0=%s, slot1=%s, slot2=%s, slot3=%s, slot4=%s, slot5=%s", facing, slot0, slot1, slot2, slot3, slot4, slot5);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/ChorusFlower.java b/chunky/src/java/se/llbit/chunky/block/minecraft/ChorusFlower.java
new file mode 100644
index 0000000000..2e9d2b66b5
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/ChorusFlower.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ChorusFlowerModel;
+import se.llbit.chunky.resources.Texture;
+
+public class ChorusFlower extends AbstractModelBlock {
+
+ private final int age;
+
+ public ChorusFlower(int age) {
+ super("chorus_flower", Texture.chorusFlower);
+ this.model = new ChorusFlowerModel(age % 6);
+ this.age = age % 6;
+ }
+
+ @Override
+ public String description() {
+ return "age=" + age;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/ChorusPlant.java b/chunky/src/java/se/llbit/chunky/block/minecraft/ChorusPlant.java
new file mode 100644
index 0000000000..3c1986b229
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/ChorusPlant.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ChorusPlantModel;
+import se.llbit.chunky.resources.Texture;
+
+public class ChorusPlant extends AbstractModelBlock {
+
+ private final String description;
+
+ public ChorusPlant(
+ boolean north, boolean south, boolean east, boolean west,
+ boolean up, boolean down) {
+ super("chorus_plant", Texture.chorusPlant);
+ this.description = String.format("north=%s, south=%s, east=%s, west=%s",
+ north, south, east, west);
+ model = new ChorusPlantModel(north, south, east, west, up, down);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Cocoa.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Cocoa.java
new file mode 100644
index 0000000000..001e920d72
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Cocoa.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CocoaPlantModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Cocoa extends AbstractModelBlock {
+
+ private final String description;
+
+ public Cocoa(String facingString, int age) {
+ super("cocoa", Texture.cocoaPlantLarge);
+ description = String.format("facing=%s, age=%d", facingString, age);
+ int facing;
+ switch (facingString) {
+ default:
+ case "north":
+ facing = 2;
+ break;
+ case "south":
+ facing = 0;
+ break;
+ case "west":
+ facing = 1;
+ break;
+ case "east":
+ facing = 3;
+ break;
+ }
+ model = new CocoaPlantModel(facing, age);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/CommandBlock.java b/chunky/src/java/se/llbit/chunky/block/minecraft/CommandBlock.java
new file mode 100644
index 0000000000..8ced24e61b
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/CommandBlock.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.DirectionalBlockModel;
+import se.llbit.chunky.resources.Texture;
+
+public class CommandBlock extends AbstractModelBlock {
+
+ private final String description;
+
+ public CommandBlock(String facing, boolean conditional) {
+ super("command_block", Texture.commandBlockFront);
+ this.description = String.format("facing=%s, conditional=%s", facing, conditional);
+ this.model = new DirectionalBlockModel(facing,
+ conditional ? Texture.commandBlockConditional : Texture.commandBlockFront,
+ Texture.commandBlockBack, Texture.commandBlockSide);
+ opaque = true;
+ solid = true;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Comparator.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Comparator.java
similarity index 51%
rename from chunky/src/java/se/llbit/chunky/block/Comparator.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Comparator.java
index a2b94129fd..b5fed24af0 100644
--- a/chunky/src/java/se/llbit/chunky/block/Comparator.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Comparator.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.ComparatorModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ComparatorModel;
import se.llbit.chunky.resources.Texture;
// TODO: render locked repeaters.
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Composter.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Composter.java
new file mode 100644
index 0000000000..391937e916
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Composter.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ComposterModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Composter extends AbstractModelBlock {
+
+ private final int level;
+
+ public Composter(int level) {
+ super("composter", Texture.composterSide);
+ this.level = level;
+ this.model = new ComposterModel(level);
+ }
+
+ @Override
+ public String description() {
+ return "level=" + level;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Conduit.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Conduit.java
new file mode 100644
index 0000000000..bd95edafe5
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Conduit.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ConduitModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Conduit extends AbstractModelBlock {
+
+ public Conduit() {
+ super("conduit", Texture.conduit);
+ model = new ConduitModel();
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/CoralFan.java b/chunky/src/java/se/llbit/chunky/block/minecraft/CoralFan.java
similarity index 65%
rename from chunky/src/java/se/llbit/chunky/block/CoralFan.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/CoralFan.java
index 8351f8b6cc..d68a3111c7 100644
--- a/chunky/src/java/se/llbit/chunky/block/CoralFan.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/CoralFan.java
@@ -1,13 +1,30 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.CoralFanEntity;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Quad;
import se.llbit.math.Ray;
import se.llbit.math.Vector3;
-import se.llbit.math.Vector4;
public class CoralFan extends MinecraftBlockTranslucent {
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/DaylightDetector.java b/chunky/src/java/se/llbit/chunky/block/minecraft/DaylightDetector.java
new file mode 100644
index 0000000000..c068fea785
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/DaylightDetector.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.DaylightSensorModel;
+import se.llbit.chunky.resources.Texture;
+
+public class DaylightDetector extends AbstractModelBlock {
+ private final boolean inverted;
+
+ public DaylightDetector(boolean inverted) {
+ super("daylight_detector",
+ inverted ? Texture.daylightDetectorInvertedTop : Texture.daylightDetectorTop);
+ this.inverted = inverted;
+ this.model = new DaylightSensorModel(
+ inverted ? Texture.daylightDetectorInvertedTop : Texture.daylightDetectorTop);
+ }
+
+ @Override
+ public String description() {
+ return "inverted=" + inverted;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/DecoratedPot.java b/chunky/src/java/se/llbit/chunky/block/minecraft/DecoratedPot.java
similarity index 71%
rename from chunky/src/java/se/llbit/chunky/block/DecoratedPot.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/DecoratedPot.java
index 67be873f65..2d223fdb8c 100644
--- a/chunky/src/java/se/llbit/chunky/block/DecoratedPot.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/DecoratedPot.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.DecoratedPotModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.DecoratedPotModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.entity.Entity;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/block/Dispenser.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Dispenser.java
similarity index 50%
rename from chunky/src/java/se/llbit/chunky/block/Dispenser.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Dispenser.java
index 0dd53c3f2b..6fd60dfbe8 100644
--- a/chunky/src/java/se/llbit/chunky/block/Dispenser.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Dispenser.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
-import se.llbit.chunky.model.DispenserModel;
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.DispenserModel;
import se.llbit.chunky.resources.Texture;
/**
diff --git a/chunky/src/java/se/llbit/chunky/block/Door.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Door.java
similarity index 62%
rename from chunky/src/java/se/llbit/chunky/block/Door.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Door.java
index 7f2e90c935..7709d015ac 100644
--- a/chunky/src/java/se/llbit/chunky/block/Door.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Door.java
@@ -1,6 +1,26 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.DoorModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.block.BlockFace;
+import se.llbit.chunky.model.minecraft.DoorModel;
import se.llbit.chunky.resources.Texture;
// TODO: hinge placement is wrong for some variants.
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/DragonEgg.java b/chunky/src/java/se/llbit/chunky/block/minecraft/DragonEgg.java
new file mode 100644
index 0000000000..4cae51efc8
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/DragonEgg.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.DragonEggModel;
+import se.llbit.chunky.resources.Texture;
+
+public class DragonEgg extends AbstractModelBlock {
+
+ public DragonEgg() {
+ super("dragon_egg", Texture.dragonEgg);
+ model = new DragonEggModel();
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Dropper.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Dropper.java
new file mode 100644
index 0000000000..7594cd5fc4
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Dropper.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.resources.Texture;
+
+public class Dropper extends Dispenser {
+
+ public Dropper(String facing) {
+ super("dropper", facing, Texture.dropperFront, Texture.dropperFrontVertical,
+ Texture.furnaceSide, Texture.furnaceTop);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/EnchantingTable.java b/chunky/src/java/se/llbit/chunky/block/minecraft/EnchantingTable.java
similarity index 51%
rename from chunky/src/java/se/llbit/chunky/block/EnchantingTable.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/EnchantingTable.java
index 6e88ce6054..7b4a2bf513 100644
--- a/chunky/src/java/se/llbit/chunky/block/EnchantingTable.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/EnchantingTable.java
@@ -1,9 +1,27 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
import se.llbit.chunky.entity.Book;
import se.llbit.chunky.entity.Entity;
-import se.llbit.chunky.model.BlockModel;
-import se.llbit.chunky.model.EnchantmentTableModel;
+import se.llbit.chunky.model.minecraft.EnchantmentTableModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/EndPortal.java b/chunky/src/java/se/llbit/chunky/block/minecraft/EndPortal.java
new file mode 100644
index 0000000000..1a319439cd
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/EndPortal.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.EndPortalModel;
+import se.llbit.chunky.resources.Texture;
+
+public class EndPortal extends AbstractModelBlock {
+
+ public EndPortal() {
+ super("end_portal", Texture.endPortal);
+ model = new EndPortalModel();
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/EndPortalFrame.java b/chunky/src/java/se/llbit/chunky/block/minecraft/EndPortalFrame.java
new file mode 100644
index 0000000000..2190320a7e
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/EndPortalFrame.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.EndPortalFrameModel;
+import se.llbit.chunky.resources.Texture;
+
+public class EndPortalFrame extends AbstractModelBlock {
+
+ private final String description;
+
+ public EndPortalFrame(boolean eye, String facing) {
+ super("end_portal_frame", Texture.endPortalFrameSide);
+ this.description = "eye=" + eye + ",facing=" + facing;
+ this.model = new EndPortalFrameModel(eye, facing);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/EndRod.java b/chunky/src/java/se/llbit/chunky/block/minecraft/EndRod.java
new file mode 100644
index 0000000000..23df58a7ab
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/EndRod.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.EndRodModel;
+import se.llbit.chunky.resources.Texture;
+
+public class EndRod extends AbstractModelBlock {
+
+ private final String description;
+
+ public EndRod(String facingString) {
+ super("end_rod", Texture.endRod);
+ this.description = "facing=" + facingString;
+ int facing;
+ switch (facingString) {
+ case "down":
+ facing = 0;
+ break;
+ default:
+ case "up":
+ facing = 1;
+ break;
+ case "north":
+ facing = 2;
+ break;
+ case "south":
+ facing = 3;
+ break;
+ case "west":
+ facing = 4;
+ break;
+ case "east":
+ facing = 5;
+ break;
+ }
+ model = new EndRodModel(facing);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/EnderChest.java b/chunky/src/java/se/llbit/chunky/block/minecraft/EnderChest.java
new file mode 100644
index 0000000000..de2ee95a1b
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/EnderChest.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ChestModel;
+import se.llbit.chunky.resources.Texture;
+
+public class EnderChest extends AbstractModelBlock {
+
+ private final String description;
+
+ public EnderChest(String facingString) {
+ super("ender_chest", Texture.chestFront);
+ this.description = "facing=" + facingString;
+ int facing;
+ switch (facingString) {
+ default:
+ case "north":
+ facing = 2;
+ break;
+ case "south":
+ facing = 3;
+ break;
+ case "west":
+ facing = 4;
+ break;
+ case "east":
+ facing = 5;
+ break;
+ }
+ model = new ChestModel(0, facing, false, true);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Farmland.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Farmland.java
new file mode 100644
index 0000000000..4120907852
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Farmland.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.TexturedBlockModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Farmland extends AbstractModelBlock {
+
+ private final int moisture;
+
+ public Farmland(int moisture) {
+ super("farmland", Texture.farmlandWet);
+ this.model = new TexturedBlockModel(Texture.dirt, Texture.dirt, Texture.dirt, Texture.dirt,
+ moisture >= 7 ? Texture.farmlandWet : Texture.farmlandDry, Texture.dirt);
+ this.moisture = moisture;
+ opaque = true;
+ // TODO farmland shouldn't be a full block
+ }
+
+ @Override
+ public String description() {
+ return "moisture=" + moisture;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Fence.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Fence.java
similarity index 50%
rename from chunky/src/java/se/llbit/chunky/block/Fence.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Fence.java
index d4de18b674..d94984a4f1 100644
--- a/chunky/src/java/se/llbit/chunky/block/Fence.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Fence.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.FenceModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.FenceModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.BlockData;
diff --git a/chunky/src/java/se/llbit/chunky/block/FenceGate.java b/chunky/src/java/se/llbit/chunky/block/minecraft/FenceGate.java
similarity index 54%
rename from chunky/src/java/se/llbit/chunky/block/FenceGate.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/FenceGate.java
index 8b24ec16f0..166a4706f7 100644
--- a/chunky/src/java/se/llbit/chunky/block/FenceGate.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/FenceGate.java
@@ -1,6 +1,26 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.FenceGateModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.block.BlockFace;
+import se.llbit.chunky.model.minecraft.FenceGateModel;
import se.llbit.chunky.resources.Texture;
public class FenceGate extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Fern.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Fern.java
new file mode 100644
index 0000000000..17c505afa2
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Fern.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.GrassTintedSpriteModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Fern extends AbstractModelBlock {
+
+ public Fern() {
+ super("fern", Texture.fern);
+ solid = false;
+ model = new GrassTintedSpriteModel(Texture.fern);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Fire.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Fire.java
new file mode 100644
index 0000000000..fbb1f8fa91
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Fire.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.FireModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Fire extends AbstractModelBlock {
+
+ public Fire() {
+ super("fire", Texture.fire);
+ model = new FireModel(Texture.fireLayer0, Texture.fireLayer1);
+ solid = false;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/FlowerPot.java b/chunky/src/java/se/llbit/chunky/block/minecraft/FlowerPot.java
new file mode 100644
index 0000000000..c30f09376f
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/FlowerPot.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.FlowerPotModel;
+import se.llbit.chunky.resources.Texture;
+
+public class FlowerPot extends AbstractModelBlock {
+ public FlowerPot(String name, FlowerPotModel.Kind kind) {
+ super(name, Texture.flowerPot);
+ this.model = new FlowerPotModel(kind);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Frogspawn.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Frogspawn.java
new file mode 100644
index 0000000000..ba3903a562
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Frogspawn.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.FrogspawnModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Frogspawn extends AbstractModelBlock {
+ public Frogspawn() {
+ super("frogspawn", Texture.frogspawn);
+ this.model = new FrogspawnModel();
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/FrostedIce.java b/chunky/src/java/se/llbit/chunky/block/minecraft/FrostedIce.java
new file mode 100644
index 0000000000..80b657d009
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/FrostedIce.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
+import se.llbit.chunky.resources.Texture;
+
+public class FrostedIce extends MinecraftBlockTranslucent {
+ private static final Texture[] texture = {
+ Texture.frostedIce0, Texture.frostedIce1, Texture.frostedIce2, Texture.frostedIce3
+ };
+
+ private final int age;
+
+ public FrostedIce(int age) {
+ super("frosted_ice", texture[age & 3]);
+ solid = true;
+ this.age = age & 3;
+ }
+
+ @Override public String description() {
+ return "age=" + age;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Furnace.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Furnace.java
new file mode 100644
index 0000000000..fe5a706733
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Furnace.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.TopBottomOrientedTexturedBlock;
+import se.llbit.chunky.resources.Texture;
+
+public class Furnace extends TopBottomOrientedTexturedBlock {
+
+ private final boolean lit;
+ private final String description;
+
+ public Furnace(String facing, boolean lit) {
+ super("furnace", facing, lit ? Texture.furnaceLitFront : Texture.furnaceUnlitFront,
+ Texture.furnaceSide, Texture.furnaceTop);
+ this.description = String.format("facing=%s, lit=%s", facing, lit);
+ this.lit = lit;
+ }
+
+ public boolean isLit() {
+ return lit;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Glass.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Glass.java
new file mode 100644
index 0000000000..b83715d8c2
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Glass.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.chunky.world.Material;
+
+public class Glass extends MinecraftBlockTranslucent {
+ public Glass(String name, Texture texture) {
+ super(name, texture);
+ ior = 1.52f;
+ }
+
+ @Override
+ public boolean isSameMaterial(Material other) {
+ return other instanceof Glass && other.name.equals(this.name); // same name means same color
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/GlassPane.java b/chunky/src/java/se/llbit/chunky/block/minecraft/GlassPane.java
new file mode 100644
index 0000000000..9864da8433
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/GlassPane.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.GlassPaneModel;
+import se.llbit.chunky.resources.Texture;
+
+public class GlassPane extends AbstractModelBlock {
+ private final String description;
+
+ public GlassPane(String name, Texture side, Texture top,
+ boolean north, boolean south, boolean east, boolean west) {
+ super(name, side);
+ localIntersect = true;
+ this.description = String.format("north=%s, south=%s, east=%s, west=%s",
+ north, south, east, west);
+ this.model = new GlassPaneModel(top, side, north, south, east, west);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/GlazedTerracotta.java b/chunky/src/java/se/llbit/chunky/block/minecraft/GlazedTerracotta.java
new file mode 100644
index 0000000000..05e6ed79ca
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/GlazedTerracotta.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.TerracottaModel;
+import se.llbit.chunky.resources.Texture;
+
+public class GlazedTerracotta extends AbstractModelBlock {
+
+ private final String description;
+
+ public GlazedTerracotta(String name, Texture texture, String facingString) {
+ super(name, texture);
+ this.description = "facing=" + facingString;
+ int facing;
+ switch (facingString) {
+ default:
+ case "north":
+ facing = 2;
+ break;
+ case "east":
+ facing = 3;
+ break;
+ case "south":
+ facing = 0;
+ break;
+ case "west":
+ facing = 1;
+ break;
+ }
+ this.model = new TerracottaModel(texture, facing);
+ opaque = true;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/GlowLichen.java b/chunky/src/java/se/llbit/chunky/block/minecraft/GlowLichen.java
similarity index 55%
rename from chunky/src/java/se/llbit/chunky/block/GlowLichen.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/GlowLichen.java
index 0e5b154375..8105f9d64a 100644
--- a/chunky/src/java/se/llbit/chunky/block/GlowLichen.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/GlowLichen.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.GlowLichenModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.GlowLichenModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.BlockData;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Grass.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Grass.java
new file mode 100644
index 0000000000..36d94e0a99
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Grass.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.GrassTintedSpriteModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Grass extends AbstractModelBlock {
+
+ public Grass() {
+ super("grass", Texture.tallGrass);
+ solid = false;
+ model = new GrassTintedSpriteModel(texture);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/GrassBlock.java b/chunky/src/java/se/llbit/chunky/block/minecraft/GrassBlock.java
new file mode 100644
index 0000000000..aae2274eca
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/GrassBlock.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.GrassBlockModel;
+import se.llbit.chunky.resources.Texture;
+
+public class GrassBlock extends AbstractModelBlock {
+
+ public GrassBlock() {
+ super("grass_block", Texture.grassTop);
+ model = new GrassBlockModel();
+ opaque = true;
+ solid = true;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/GrassPath.java b/chunky/src/java/se/llbit/chunky/block/minecraft/GrassPath.java
new file mode 100644
index 0000000000..fe7f7f96bd
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/GrassPath.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.GrassPathModel;
+import se.llbit.chunky.resources.Texture;
+
+public class GrassPath extends AbstractModelBlock {
+
+ public GrassPath() {
+ super("grass_path", Texture.grassPathTop);
+ model = new GrassPathModel();
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Grindstone.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Grindstone.java
new file mode 100644
index 0000000000..e4a50a1acb
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Grindstone.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.GrindstoneModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Grindstone extends AbstractModelBlock {
+
+ private final String description;
+
+ public Grindstone(String face, String facing) {
+ super("grindstone", Texture.grindstoneSide);
+ description = String.format("face=%s, facing=%s", face, facing);
+ this.model = new GrindstoneModel(face, facing);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/HangingSign.java b/chunky/src/java/se/llbit/chunky/block/minecraft/HangingSign.java
similarity index 55%
rename from chunky/src/java/se/llbit/chunky/block/HangingSign.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/HangingSign.java
index 52e6498a42..f669c87a78 100644
--- a/chunky/src/java/se/llbit/chunky/block/HangingSign.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/HangingSign.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.HangingSignEntity;
import se.llbit.chunky.renderer.scene.Scene;
diff --git a/chunky/src/java/se/llbit/chunky/block/Head.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Head.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/block/Head.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Head.java
index 530f7dd055..b9ddcc78ed 100644
--- a/chunky/src/java/se/llbit/chunky/block/Head.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Head.java
@@ -1,5 +1,5 @@
-/* Copyright (c) 2019 Jesper Öqvist
- * Copyright (c) 2020-2021 Chunky contributors
+/*
+ * Copyright (c) 2020-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -15,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.block;
+package se.llbit.chunky.block.minecraft;
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.HeadEntity;
import se.llbit.chunky.entity.SkullEntity;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Honey.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Honey.java
new file mode 100644
index 0000000000..5fcbfc15bc
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Honey.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
+import se.llbit.chunky.model.minecraft.HoneyBlockModel;
+import se.llbit.chunky.renderer.scene.Scene;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Ray;
+
+public class Honey extends MinecraftBlockTranslucent {
+ public Honey() {
+ super("honey_block", Texture.honeyBlockSide);
+ localIntersect = true;
+ opaque = false;
+ ior = 1.474f; // according to https://study.com/academy/answer/what-is-the-refractive-index-of-honey.html
+ solid = false;
+ refractive = true;
+ }
+
+ @Override
+ public boolean intersect(Ray ray, Scene scene) {
+ return HoneyBlockModel.intersect(ray);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Hopper.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Hopper.java
new file mode 100644
index 0000000000..b90c98d4dd
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Hopper.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.HopperModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Hopper extends AbstractModelBlock {
+ private final String description;
+
+ public Hopper(String facing) {
+ super("hopper", Texture.hopperInside);
+ this.description = "facing=" + facing;
+ this.model = new HopperModel(facing);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/IronBars.java b/chunky/src/java/se/llbit/chunky/block/minecraft/IronBars.java
new file mode 100644
index 0000000000..8cf623fb1f
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/IronBars.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.IronBarsModel;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.chunky.world.BlockData;
+
+public class IronBars extends AbstractModelBlock {
+
+ private final String description;
+
+ public IronBars(boolean north, boolean south, boolean east, boolean west) {
+ super("iron_bars", Texture.ironBars);
+ this.description = String.format("north=%s, south=%s, east=%s, west=%s",
+ north, south, east, west);
+ int connections = 0;
+ if (north) {
+ connections |= BlockData.CONNECTED_NORTH;
+ }
+ if (south) {
+ connections |= BlockData.CONNECTED_SOUTH;
+ }
+ if (east) {
+ connections |= BlockData.CONNECTED_EAST;
+ }
+ if (west) {
+ connections |= BlockData.CONNECTED_WEST;
+ }
+ model = new IronBarsModel(connections);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/JigsawBlock.java b/chunky/src/java/se/llbit/chunky/block/minecraft/JigsawBlock.java
new file mode 100644
index 0000000000..82f0e50bf6
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/JigsawBlock.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.JigsawModel;
+import se.llbit.chunky.resources.Texture;
+
+public class JigsawBlock extends AbstractModelBlock {
+
+ private final String orientation;
+
+ public JigsawBlock(String name, String orientation) {
+ super(name, Texture.jigsawTop);
+ this.orientation = orientation;
+ this.model = new JigsawModel(orientation);
+ opaque = true;
+ }
+
+ @Override
+ public String description() {
+ return "orientation=" + orientation;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Ladder.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Ladder.java
new file mode 100644
index 0000000000..eb1045e5d3
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Ladder.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.LadderModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Ladder extends AbstractModelBlock {
+
+ private final String description;
+
+ public Ladder(String facingString) {
+ super("ladder", Texture.ladder);
+ this.description = "facing=" + facingString;
+ solid = false;
+ int facing;
+ switch (facingString) {
+ default:
+ case "north":
+ facing = 2;
+ break;
+ case "south":
+ facing = 3;
+ break;
+ case "west":
+ facing = 0;
+ break;
+ case "east":
+ facing = 1;
+ break;
+ }
+ model = new LadderModel(facing);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Lantern.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Lantern.java
new file mode 100644
index 0000000000..32e590728a
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Lantern.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.LanternModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Lantern extends AbstractModelBlock {
+
+ private final boolean hanging;
+
+ public Lantern(String name, Texture texture, boolean hanging) {
+ super(name, texture);
+ this.hanging = hanging;
+ this.model = new LanternModel(texture, hanging);
+ }
+
+ @Override
+ public String description() {
+ return "hanging=" + hanging;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/LargeFern.java b/chunky/src/java/se/llbit/chunky/block/minecraft/LargeFern.java
new file mode 100644
index 0000000000..e46db1aeea
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/LargeFern.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.GrassTintedSpriteModel;
+import se.llbit.chunky.resources.Texture;
+
+public class LargeFern extends AbstractModelBlock {
+
+ public LargeFern(String half) {
+ super("large_fern",
+ half.equals("upper")
+ ? Texture.largeFernTop
+ : Texture.largeFernBottom);
+ solid = false;
+ model = new GrassTintedSpriteModel(texture);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Lava.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Lava.java
similarity index 81%
rename from chunky/src/java/se/llbit/chunky/block/Lava.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Lava.java
index a36f58a94d..62e5099c36 100644
--- a/chunky/src/java/se/llbit/chunky/block/Lava.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Lava.java
@@ -1,14 +1,33 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.*;
-import static se.llbit.chunky.block.Water.CORNER_0;
-import static se.llbit.chunky.block.Water.CORNER_1;
-import static se.llbit.chunky.block.Water.CORNER_2;
-import static se.llbit.chunky.block.Water.CORNER_3;
-import static se.llbit.chunky.block.Water.FULL_BLOCK;
+import static se.llbit.chunky.block.minecraft.Water.CORNER_0;
+import static se.llbit.chunky.block.minecraft.Water.CORNER_1;
+import static se.llbit.chunky.block.minecraft.Water.CORNER_2;
+import static se.llbit.chunky.block.minecraft.Water.CORNER_3;
+import static se.llbit.chunky.block.minecraft.Water.FULL_BLOCK;
public class Lava extends MinecraftBlockTranslucent {
private static final AABB fullBlock = new AABB(0, 1, 0, 1, 0, 1);
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/LavaCauldron.java b/chunky/src/java/se/llbit/chunky/block/minecraft/LavaCauldron.java
new file mode 100644
index 0000000000..e2c96f39f4
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/LavaCauldron.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.model.minecraft.CauldronModel;
+import se.llbit.chunky.renderer.scene.Scene;
+import se.llbit.math.Ray;
+
+public class LavaCauldron extends Cauldron {
+
+ public LavaCauldron() {
+ super("lava_cauldron", 3); // lava cauldrons are always full
+ localIntersect = true;
+ }
+
+ @Override
+ public boolean intersect(Ray ray, Scene scene) {
+ return CauldronModel.intersectWithLava(ray);
+ }
+
+ @Override
+ public String description() {
+ return ""; // do not show the level
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Leaves.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Leaves.java
new file mode 100644
index 0000000000..71e02f22fb
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Leaves.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.LeafModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Leaves extends AbstractModelBlock {
+
+ public Leaves(String name, Texture texture) {
+ super(name, texture);
+ solid = false;
+ this.model = new LeafModel(texture);
+ }
+
+ public Leaves(String name, Texture texture, int tint) {
+ super(name, texture);
+ solid = false;
+ this.model = new LeafModel(texture, tint);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Lectern.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Lectern.java
similarity index 52%
rename from chunky/src/java/se/llbit/chunky/block/Lectern.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Lectern.java
index 55638abbbe..ee8071214c 100644
--- a/chunky/src/java/se/llbit/chunky/block/Lectern.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Lectern.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
diff --git a/chunky/src/java/se/llbit/chunky/block/Lever.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Lever.java
similarity index 67%
rename from chunky/src/java/se/llbit/chunky/block/Lever.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Lever.java
index 83b06249ec..b2be117a58 100644
--- a/chunky/src/java/se/llbit/chunky/block/Lever.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Lever.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.LeverModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.LeverModel;
import se.llbit.chunky.resources.Texture;
public class Lever extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/LightBlock.java b/chunky/src/java/se/llbit/chunky/block/minecraft/LightBlock.java
similarity index 60%
rename from chunky/src/java/se/llbit/chunky/block/LightBlock.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/LightBlock.java
index 383d65b507..acdaa126b3 100644
--- a/chunky/src/java/se/llbit/chunky/block/LightBlock.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/LightBlock.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.LightBlockModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.LightBlockModel;
import se.llbit.chunky.model.TexturedBlockModel;
import se.llbit.chunky.renderer.RenderMode;
import se.llbit.chunky.renderer.scene.Scene;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/LightningRod.java b/chunky/src/java/se/llbit/chunky/block/minecraft/LightningRod.java
new file mode 100644
index 0000000000..d20f53611c
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/LightningRod.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.LightningRodModel;
+import se.llbit.chunky.resources.Texture;
+
+public class LightningRod extends AbstractModelBlock {
+
+ private final String facing;
+ private final boolean powered;
+
+ public LightningRod(String facing, boolean powered) {
+ super("lightning_rod", Texture.lightningRod);
+ this.model = new LightningRodModel(facing, powered);
+ this.powered = powered;
+ this.facing = facing;
+ }
+
+ @Override
+ public String description() {
+ return "facing=" + facing + ", powered=" + powered;
+ }
+
+ public boolean isPowered() {
+ return powered;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/LilyPad.java b/chunky/src/java/se/llbit/chunky/block/minecraft/LilyPad.java
new file mode 100644
index 0000000000..96d89236cd
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/LilyPad.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
+import se.llbit.chunky.entity.Entity;
+import se.llbit.chunky.entity.LilyPadEntity;
+import se.llbit.chunky.renderer.scene.Scene;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Ray;
+import se.llbit.math.Vector3;
+
+public class LilyPad extends MinecraftBlockTranslucent {
+ public LilyPad() {
+ super("lily_pad", Texture.lilyPad);
+ invisible = true;
+ opaque = false;
+ localIntersect = true;
+ }
+
+ @Override public boolean intersect(Ray ray, Scene scene) {
+ return false;
+ }
+
+ @Override public boolean isEntity() {
+ return true;
+ }
+
+ @Override public Entity toEntity(Vector3 position) {
+ return new LilyPadEntity(position);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Log.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Log.java
new file mode 100644
index 0000000000..93bc901250
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Log.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.LogModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Log extends AbstractModelBlock {
+
+ private final String description;
+
+ public Log(String name, Texture side, Texture top, String axis) {
+ super(name, side);
+ this.description = "axis=" + axis;
+ this.model = new LogModel(axis, side, top);
+ opaque = true;
+ solid = true;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/MangrovePropagule.java b/chunky/src/java/se/llbit/chunky/block/minecraft/MangrovePropagule.java
new file mode 100644
index 0000000000..01d961ee0b
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/MangrovePropagule.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.MangrovePropaguleModel;
+import se.llbit.chunky.resources.Texture;
+
+public class MangrovePropagule extends AbstractModelBlock {
+ private final int age;
+ private final boolean hanging;
+
+ public MangrovePropagule(int age, boolean hanging) {
+ super("mangrove_propagule", Texture.mangrovePropagule);
+ this.age = age;
+ this.hanging = hanging;
+ this.model = new MangrovePropaguleModel(age, hanging);
+ }
+
+ @Override
+ public String description() {
+ return "age=" + age + ", hanging=" + hanging;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/MangroveRoots.java b/chunky/src/java/se/llbit/chunky/block/minecraft/MangroveRoots.java
new file mode 100644
index 0000000000..d4bc44513a
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/MangroveRoots.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.MangroveRootsModel;
+import se.llbit.chunky.resources.Texture;
+
+public class MangroveRoots extends AbstractModelBlock {
+ public MangroveRoots() {
+ super("mangrove_roots", Texture.mangroveRootsTop);
+ this.model = new MangroveRootsModel();
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/NetherPortal.java b/chunky/src/java/se/llbit/chunky/block/minecraft/NetherPortal.java
new file mode 100644
index 0000000000..56d2336eb2
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/NetherPortal.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.NetherPortalModel;
+import se.llbit.chunky.resources.Texture;
+
+public class NetherPortal extends AbstractModelBlock {
+
+ private final String description;
+
+ public NetherPortal(String axis) {
+ super("nether_portal", Texture.portal);
+ this.description = "axis=" + axis;
+ this.model = new NetherPortalModel(axis);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/NetherWart.java b/chunky/src/java/se/llbit/chunky/block/minecraft/NetherWart.java
new file mode 100644
index 0000000000..ebfc44a331
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/NetherWart.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CropsModel;
+import se.llbit.chunky.resources.Texture;
+
+public class NetherWart extends AbstractModelBlock {
+
+ private static final Texture[] texture = {
+ Texture.netherWart0, Texture.netherWart1, Texture.netherWart1, Texture.netherWart2
+ };
+
+ private final int age;
+
+ public NetherWart(int age) {
+ super("nether_wart", Texture.netherWart2);
+ this.age = age & 3;
+ this.model = new CropsModel(texture[this.age]);
+ }
+
+ @Override
+ public String description() {
+ return "age=" + age;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Observer.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Observer.java
similarity index 50%
rename from chunky/src/java/se/llbit/chunky/block/Observer.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Observer.java
index 1a1f1d1980..4bfcbaebcc 100644
--- a/chunky/src/java/se/llbit/chunky/block/Observer.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Observer.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.ObserverModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ObserverModel;
import se.llbit.chunky.resources.Texture;
public class Observer extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/PinkPetals.java b/chunky/src/java/se/llbit/chunky/block/minecraft/PinkPetals.java
new file mode 100644
index 0000000000..9d4a7976b9
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/PinkPetals.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.Flowerbed;
+import se.llbit.chunky.resources.Texture;
+
+public class PinkPetals extends AbstractModelBlock {
+ private final String description;
+
+ public PinkPetals(String name, int flowerAmount, String facing) {
+ super(name, Texture.pinkPetals);
+ this.description = String.format("facing=%s, flower_amount=%d", facing, flowerAmount);
+ this.model = new Flowerbed(Texture.pinkPetals, Texture.pinkPetalsStem, flowerAmount, facing);
+ }
+
+ @Override
+ public String description() {
+ return this.description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Piston.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Piston.java
similarity index 52%
rename from chunky/src/java/se/llbit/chunky/block/Piston.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Piston.java
index 4e2ae3b465..59dbbf7919 100644
--- a/chunky/src/java/se/llbit/chunky/block/Piston.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Piston.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.PistonModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.PistonModel;
import se.llbit.chunky.resources.Texture;
public class Piston extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/PistonHead.java b/chunky/src/java/se/llbit/chunky/block/minecraft/PistonHead.java
similarity index 50%
rename from chunky/src/java/se/llbit/chunky/block/PistonHead.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/PistonHead.java
index 671005a9c6..068f6413ef 100644
--- a/chunky/src/java/se/llbit/chunky/block/PistonHead.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/PistonHead.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.PistonExtensionModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.PistonExtensionModel;
import se.llbit.chunky.resources.Texture;
public class PistonHead extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/PitcherCrop.java b/chunky/src/java/se/llbit/chunky/block/minecraft/PitcherCrop.java
new file mode 100644
index 0000000000..2d3e5793bc
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/PitcherCrop.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.PitcherCropBottomModel;
+import se.llbit.chunky.model.minecraft.PitcherCropTopModel;
+import se.llbit.chunky.resources.Texture;
+
+public class PitcherCrop extends AbstractModelBlock {
+ private final String description;
+
+ public PitcherCrop(int age, String half) {
+ super("pitcher_crop", Texture.pitcherCropTop);
+ localIntersect = true;
+ opaque = false;
+ this.model = half.equals("upper")
+ ? new PitcherCropTopModel(age)
+ : new PitcherCropBottomModel(age);
+ this.description = String.format("age=%d, half=%s", age, half);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
\ No newline at end of file
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/PitcherPlant.java b/chunky/src/java/se/llbit/chunky/block/minecraft/PitcherPlant.java
new file mode 100644
index 0000000000..9c1d58e0b7
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/PitcherPlant.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.PitcherPlantBottomModel;
+import se.llbit.chunky.model.minecraft.PitcherPlantTopModel;
+import se.llbit.chunky.resources.Texture;
+
+public class PitcherPlant extends AbstractModelBlock {
+ private final String description;
+
+ public PitcherPlant(String name, String half) {
+ super(name, Texture.pinkPetals);
+ this.description = String.format("half=%s", half);
+ this.model = half.equals("upper") ? new PitcherPlantTopModel() : new PitcherPlantBottomModel();
+ }
+
+ @Override
+ public String description() {
+ return this.description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/PointedDripstone.java b/chunky/src/java/se/llbit/chunky/block/minecraft/PointedDripstone.java
similarity index 63%
rename from chunky/src/java/se/llbit/chunky/block/PointedDripstone.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/PointedDripstone.java
index ddab5f80d5..f8d0ef8d68 100644
--- a/chunky/src/java/se/llbit/chunky/block/PointedDripstone.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/PointedDripstone.java
@@ -1,4 +1,22 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
import se.llbit.chunky.resources.Texture;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Potatoes.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Potatoes.java
new file mode 100644
index 0000000000..f3018fd7ca
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Potatoes.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CropsModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Potatoes extends AbstractModelBlock {
+
+ private static final Texture[] texture = {
+ Texture.potatoes0, Texture.potatoes0, Texture.potatoes1, Texture.potatoes1,
+ Texture.potatoes2, Texture.potatoes2, Texture.potatoes2, Texture.potatoes3
+ };
+
+ private final int age;
+
+ public Potatoes(int age) {
+ super("potatoes", texture[texture.length - 1]);
+ this.age = age % texture.length;
+ this.model = new CropsModel(texture[this.age]);
+ }
+
+ @Override
+ public String description() {
+ return "age=" + age;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/PowderSnowCauldron.java b/chunky/src/java/se/llbit/chunky/block/minecraft/PowderSnowCauldron.java
new file mode 100644
index 0000000000..cc658fd386
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/PowderSnowCauldron.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.model.minecraft.CauldronModel;
+import se.llbit.chunky.renderer.scene.Scene;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Ray;
+
+public class PowderSnowCauldron extends Cauldron {
+
+ public PowderSnowCauldron(int level) {
+ super("powder_snow_cauldron", level);
+ }
+
+ @Override
+ public boolean intersect(Ray ray, Scene scene) {
+ return CauldronModel.intersect(ray, getLevel(), Texture.powderSnow);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/PressurePlate.java b/chunky/src/java/se/llbit/chunky/block/minecraft/PressurePlate.java
new file mode 100644
index 0000000000..80669f152a
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/PressurePlate.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.PressurePlateModel;
+import se.llbit.chunky.resources.Texture;
+
+public class PressurePlate extends AbstractModelBlock {
+
+ public PressurePlate(String name, Texture texture) {
+ super(name, texture);
+ model = new PressurePlateModel(texture);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Rail.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Rail.java
similarity index 61%
rename from chunky/src/java/se/llbit/chunky/block/Rail.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Rail.java
index 57d6213bc4..d3f36a2b03 100644
--- a/chunky/src/java/se/llbit/chunky/block/Rail.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Rail.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.RailModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.RailModel;
import se.llbit.chunky.resources.Texture;
public class Rail extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneLamp.java b/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneLamp.java
new file mode 100644
index 0000000000..6b6008b2cb
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneLamp.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlock;
+import se.llbit.chunky.resources.Texture;
+
+public class RedstoneLamp extends MinecraftBlock {
+ public final boolean isLit;
+
+ public RedstoneLamp(boolean lit) {
+ super("redstone_lamp", lit ? Texture.redstoneLampOn : Texture.redstoneLampOff);
+ this.isLit = lit;
+ }
+
+ @Override public String description() {
+ return "lit=" + isLit;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneTorch.java b/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneTorch.java
new file mode 100644
index 0000000000..4b5b2fc5e1
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneTorch.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.resources.Texture;
+
+public class RedstoneTorch extends Torch {
+ private final boolean lit;
+
+ public RedstoneTorch(boolean lit) {
+ super("redstone_torch", lit ? Texture.redstoneTorchOn : Texture.redstoneTorchOff);
+ this.lit = lit;
+ }
+
+ public boolean isLit() {
+ return lit;
+ }
+
+ @Override
+ public String description() {
+ return "lit=" + lit;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneWallTorch.java b/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneWallTorch.java
new file mode 100644
index 0000000000..4feb1a0f19
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneWallTorch.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.resources.Texture;
+
+public class RedstoneWallTorch extends WallTorch {
+ private final boolean lit;
+
+ public RedstoneWallTorch(String facing, boolean lit) {
+ super("redstone_wall_torch", lit ? Texture.redstoneTorchOn : Texture.redstoneTorchOff, facing);
+ this.lit = lit;
+ }
+
+ public boolean isLit() {
+ return lit;
+ }
+
+ @Override
+ public String description() {
+ return "facing=" + facing + ", lit=" + lit;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/RedstoneWire.java b/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneWire.java
similarity index 60%
rename from chunky/src/java/se/llbit/chunky/block/RedstoneWire.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneWire.java
index f462fe77cd..19fa761817 100644
--- a/chunky/src/java/se/llbit/chunky/block/RedstoneWire.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/RedstoneWire.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.RedstoneWireModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.RedstoneWireModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.BlockData;
diff --git a/chunky/src/java/se/llbit/chunky/block/Repeater.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Repeater.java
similarity index 52%
rename from chunky/src/java/se/llbit/chunky/block/Repeater.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Repeater.java
index 03c622fa58..658e7321d9 100644
--- a/chunky/src/java/se/llbit/chunky/block/Repeater.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Repeater.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.RedstoneRepeaterModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.RedstoneRepeaterModel;
import se.llbit.chunky.resources.Texture;
// TODO: render locked repeaters.
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/RepeatingCommandBlock.java b/chunky/src/java/se/llbit/chunky/block/minecraft/RepeatingCommandBlock.java
new file mode 100644
index 0000000000..da650818bf
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/RepeatingCommandBlock.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.DirectionalBlockModel;
+import se.llbit.chunky.resources.Texture;
+
+public class RepeatingCommandBlock extends AbstractModelBlock {
+
+ private final String description;
+
+ public RepeatingCommandBlock(String facing, boolean conditional) {
+ super("repeating_command_block", Texture.repeatingCommandBlockFront);
+ this.description = String.format("facing=%s, conditional=%s", facing, conditional);
+ this.model = new DirectionalBlockModel(facing,
+ conditional ? Texture.repeatingCommandBlockConditional : Texture.repeatingCommandBlockFront,
+ Texture.repeatingCommandBlockBack, Texture.repeatingCommandBlockSide);
+ opaque = true;
+ solid = true;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/RespawnAnchor.java b/chunky/src/java/se/llbit/chunky/block/minecraft/RespawnAnchor.java
new file mode 100644
index 0000000000..83de2a8a24
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/RespawnAnchor.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.TexturedBlock;
+import se.llbit.chunky.resources.Texture;
+
+public class RespawnAnchor extends TexturedBlock {
+ private static final Texture[] sideTextures = new Texture[]{
+ Texture.respawnAnchorSide0,
+ Texture.respawnAnchorSide1,
+ Texture.respawnAnchorSide2,
+ Texture.respawnAnchorSide3,
+ Texture.respawnAnchorSide4
+ };
+
+ public final int charges;
+
+ public RespawnAnchor(int charges) {
+ super("respawn_anchor", sideTextures[charges], Texture.respawnAnchorTop, Texture.respawnAnchorBottom);
+ this.charges = charges;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Scaffolding.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Scaffolding.java
new file mode 100644
index 0000000000..b3ffa615bc
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Scaffolding.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.ScaffoldingModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Scaffolding extends AbstractModelBlock {
+
+ private final boolean bottom;
+
+ public Scaffolding(boolean bottom) {
+ super("scaffolding", Texture.scaffoldingSide);
+ this.model = new ScaffoldingModel(bottom);
+ this.bottom = bottom;
+ }
+
+ @Override
+ public String description() {
+ return "bottom=" + bottom;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SculkCatalyst.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SculkCatalyst.java
new file mode 100644
index 0000000000..5898a266cc
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SculkCatalyst.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.TexturedBlock;
+import se.llbit.chunky.resources.Texture;
+
+public class SculkCatalyst extends TexturedBlock {
+ private final boolean bloom;
+
+ public SculkCatalyst(boolean bloom) {
+ super("sculk_catalyst",
+ bloom ? Texture.sculkCatalystSideBloom : Texture.sculkCatalystSide,
+ bloom ? Texture.sculkCatalystTopBloom : Texture.sculkCatalystTop,
+ Texture.sculkCatalystBottom);
+ this.bloom = bloom;
+ }
+
+ @Override
+ public String description() {
+ return "bloom=" + bloom;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SculkSensor.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SculkSensor.java
new file mode 100644
index 0000000000..156e8a8db1
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SculkSensor.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SculkSensorModel;
+import se.llbit.chunky.resources.Texture;
+
+public class SculkSensor extends AbstractModelBlock {
+
+ private final String phase;
+
+ public SculkSensor(String phase) {
+ super("sculk_sensor", Texture.sculkSensorTop);
+ this.phase = phase;
+ this.model = new SculkSensorModel(isActive());
+ }
+
+ public boolean isActive() {
+ return phase.equals("active") || phase.equals("cooldown");
+ }
+
+ @Override
+ public String description() {
+ return "sculk_sensor_phase=" + phase;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SculkShrieker.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SculkShrieker.java
new file mode 100644
index 0000000000..5d7e96282c
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SculkShrieker.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SculkShriekerModel;
+import se.llbit.chunky.resources.Texture;
+
+public class SculkShrieker extends AbstractModelBlock {
+ private final boolean canSummon;
+
+ public SculkShrieker(boolean canSummon) {
+ super("sculk_shrieker", Texture.sculkShriekerTop);
+ this.canSummon = canSummon;
+ model = new SculkShriekerModel(canSummon);
+ }
+
+ @Override
+ public String description() {
+ return "can_summon=" + canSummon;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/SculkVein.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SculkVein.java
similarity index 55%
rename from chunky/src/java/se/llbit/chunky/block/SculkVein.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/SculkVein.java
index 4b15a382be..2b71162e4a 100644
--- a/chunky/src/java/se/llbit/chunky/block/SculkVein.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SculkVein.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.SculkVeinModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SculkVeinModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.BlockData;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SeaPickle.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SeaPickle.java
new file mode 100644
index 0000000000..9c56fb8e5d
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SeaPickle.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SeaPickleModel;
+import se.llbit.chunky.resources.Texture;
+
+public class SeaPickle extends AbstractModelBlock {
+
+ private final String description;
+ public final boolean live;
+ public final int pickles;
+
+ public SeaPickle(int pickles, boolean live) {
+ super("sea_pickle", Texture.seaPickle);
+ pickles = Math.max(1, Math.min(4, pickles));
+ this.description = String.format("pickles=%d, waterlogged=%s", pickles, live);
+ this.pickles = pickles;
+ this.live = live;
+ this.model = new SeaPickleModel(pickles, live);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/ShulkerBox.java b/chunky/src/java/se/llbit/chunky/block/minecraft/ShulkerBox.java
new file mode 100644
index 0000000000..d9c2184e36
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/ShulkerBox.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.DirectionalBlockModel;
+import se.llbit.chunky.resources.Texture;
+
+public class ShulkerBox extends AbstractModelBlock {
+
+ private final String description;
+
+ public ShulkerBox(String name, Texture side, Texture top, Texture bottom, String facing) {
+ super(name, side);
+ this.description = "facing=" + facing;
+ this.model = new DirectionalBlockModel(facing, top, bottom, side);
+ opaque = true;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Sign.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Sign.java
similarity index 52%
rename from chunky/src/java/se/llbit/chunky/block/Sign.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Sign.java
index aa1c827a94..fd5ab16226 100644
--- a/chunky/src/java/se/llbit/chunky/block/Sign.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Sign.java
@@ -1,9 +1,27 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.SignEntity;
import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
import se.llbit.math.Ray;
import se.llbit.math.Vector3;
import se.llbit.nbt.CompoundTag;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Slab.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Slab.java
new file mode 100644
index 0000000000..de457f18ad
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Slab.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SlabModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Slab extends AbstractModelBlock {
+
+ private final String description;
+
+ public Slab(String name, Texture sideTexture, Texture topTexture, String type) {
+ super(name, sideTexture);
+ this.description = String.format("type=%s", type);
+ this.model = new SlabModel(sideTexture, topTexture, type);
+ solid = type.equals("double");
+ }
+
+ public Slab(String name, Texture texture, String type) {
+ this(name, texture, texture, type);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Slime.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Slime.java
new file mode 100644
index 0000000000..61301cf887
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Slime.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
+import se.llbit.chunky.model.minecraft.SlimeBlockModel;
+import se.llbit.chunky.renderer.scene.Scene;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Ray;
+
+public class Slime extends MinecraftBlockTranslucent {
+ public Slime() {
+ super("slime_block", Texture.slime);
+ localIntersect = true;
+ opaque = false;
+ ior = 1.516f; // gelatin, according to https://study.com/academy/answer/what-is-the-refractive-index-of-gelatin.html
+ solid = true;
+ refractive = true;
+ }
+
+ @Override
+ public boolean intersect(Ray ray, Scene scene) {
+ return SlimeBlockModel.intersect(ray);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SmallDripleaf.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SmallDripleaf.java
new file mode 100644
index 0000000000..def759e75d
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SmallDripleaf.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SmallDripleafModel;
+import se.llbit.chunky.resources.Texture;
+
+public class SmallDripleaf extends AbstractModelBlock {
+
+ private final String description;
+
+ public SmallDripleaf(String facing, String half) {
+ super("small_dripleaf", Texture.smallDripleafTop);
+ this.description = "facing=" + facing + ", half=" + half;
+ this.model = new SmallDripleafModel(facing, half);
+ solid = false;
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Smoker.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Smoker.java
new file mode 100644
index 0000000000..635c3707ce
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Smoker.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.TopBottomOrientedTexturedBlock;
+import se.llbit.chunky.resources.Texture;
+
+public class Smoker extends TopBottomOrientedTexturedBlock {
+
+ private final boolean isLit;
+ private final String description;
+
+ public Smoker(String facing, boolean lit) {
+ super(
+ "smoker",
+ facing,
+ lit ? Texture.smokerFrontOn : Texture.smokerFront,
+ Texture.smokerSide,
+ Texture.smokerTop,
+ Texture.smokerBottom);
+ this.description = String.format("facing=%s, lit=%s", facing, lit);
+ isLit = lit;
+ }
+
+ public boolean isLit() {
+ return isLit;
+ }
+
+ @Override public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SnifferEgg.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SnifferEgg.java
new file mode 100644
index 0000000000..78b540d762
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SnifferEgg.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SnifferEggModel;
+import se.llbit.chunky.resources.Texture;
+
+public class SnifferEgg extends AbstractModelBlock {
+
+ private final String description;
+
+ public SnifferEgg(String name, int hatch) {
+ super(name, getTopTexture(hatch));
+ this.description = "hatch=" + hatch;
+ this.model = new SnifferEggModel(hatch);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+
+ private static Texture getTopTexture(int hatch) {
+ switch (hatch) {
+ case 1:
+ return Texture.snifferEggSlightlyCrackedTop;
+ case 2:
+ return Texture.snifferEggVeryCrackedTop;
+ default:
+ case 0:
+ return Texture.snifferEggNotCrackedTop;
+ }
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Snow.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Snow.java
new file mode 100644
index 0000000000..52a5752c78
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Snow.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SnowModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Snow extends AbstractModelBlock {
+
+ private final int layers;
+
+ public Snow(int layers) {
+ super("snow", Texture.snowBlock);
+ this.layers = layers;
+ localIntersect = layers < 8;
+ opaque = layers == 8;
+ this.model = new SnowModel(layers);
+ localIntersect = layers < 8;
+ opaque = layers == 8;
+ }
+
+ @Override
+ public String description() {
+ return "layers=" + layers;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SoulFire.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SoulFire.java
new file mode 100644
index 0000000000..ea0e4f7854
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SoulFire.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.FireModel;
+import se.llbit.chunky.resources.Texture;
+
+public class SoulFire extends AbstractModelBlock {
+
+ public SoulFire() {
+ super("soul_fire", Texture.soulFire);
+ solid = false;
+ model = new FireModel(Texture.soulFireLayer0, Texture.soulFireLayer1);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SporeBlossom.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SporeBlossom.java
new file mode 100644
index 0000000000..c9a8ea0e0d
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SporeBlossom.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.Block;
+import se.llbit.chunky.entity.Entity;
+import se.llbit.chunky.renderer.scene.Scene;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Ray;
+import se.llbit.math.Vector3;
+
+public class SporeBlossom extends Block {
+
+ public SporeBlossom() {
+ super("spore_blossom", Texture.sporeBlossom);
+ invisible = true;
+ opaque = false;
+ localIntersect = true;
+ }
+
+ @Override
+ public boolean intersect(Ray ray, Scene scene) {
+ return false;
+ }
+
+ @Override
+ public boolean isEntity() {
+ return true;
+ }
+
+ @Override
+ public Entity toEntity(Vector3 position) {
+ return new se.llbit.chunky.entity.SporeBlossom(position);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SpriteBlock.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SpriteBlock.java
new file mode 100644
index 0000000000..9a795fd913
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SpriteBlock.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SpriteModel;
+import se.llbit.chunky.resources.Texture;
+
+public class SpriteBlock extends AbstractModelBlock {
+
+ protected String facing;
+
+ public SpriteBlock(String name, Texture texture) {
+ super(name, texture);
+ solid = false;
+ model = new SpriteModel(texture);
+ }
+
+ public SpriteBlock(String name, Texture texture, String facing) {
+ super(name, texture);
+ solid = false;
+ model = new SpriteModel(texture, facing);
+ this.facing = facing;
+ }
+
+ @Override
+ public String description() {
+ if (facing != null) {
+ return "facing=" + facing;
+ }
+ return super.description();
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Stairs.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Stairs.java
similarity index 76%
rename from chunky/src/java/se/llbit/chunky/block/Stairs.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Stairs.java
index 90b6e55246..875ca0ad12 100644
--- a/chunky/src/java/se/llbit/chunky/block/Stairs.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Stairs.java
@@ -1,6 +1,26 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.StairModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.block.BlockFace;
+import se.llbit.chunky.model.minecraft.StairModel;
import se.llbit.chunky.resources.Texture;
public class Stairs extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Stem.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Stem.java
new file mode 100644
index 0000000000..530f6c0eb0
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Stem.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.StemModel;
+import se.llbit.chunky.resources.Texture;
+
+/**
+ * Melon or pumpkin stem.
+ */
+public class Stem extends AbstractModelBlock {
+
+ private final int age;
+
+ public Stem(String name, int age) {
+ super(name, Texture.stemStraight);
+ this.model = new StemModel(age & 7);
+ this.age = age & 7;
+ }
+
+ @Override
+ public String description() {
+ return "age=" + age;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Stonecutter.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Stonecutter.java
new file mode 100644
index 0000000000..ca8177b6ef
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Stonecutter.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.StonecutterModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Stonecutter extends AbstractModelBlock {
+
+ private final String facing;
+
+ public Stonecutter(String facing) {
+ super("stonecutter", Texture.stonecutterSide);
+ this.facing = facing;
+ this.model = new StonecutterModel(facing);
+ }
+
+ @Override
+ public String description() {
+ return "facing=" + facing;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SugarCane.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SugarCane.java
new file mode 100644
index 0000000000..1cb9fe5928
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SugarCane.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.GrassTintedSpriteModel;
+import se.llbit.chunky.resources.Texture;
+
+public class SugarCane extends AbstractModelBlock {
+ public SugarCane() {
+ super("sugar_cane", Texture.sugarCane);
+ solid = false;
+ model = new GrassTintedSpriteModel(Texture.sugarCane);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Sunflower.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Sunflower.java
new file mode 100644
index 0000000000..e210a337e6
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Sunflower.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.SunFlowerModel;
+import se.llbit.chunky.resources.Texture;
+
+// TODO: refactor me!
+// TODO: render the sunflower actually facing the sun.
+public class Sunflower extends AbstractModelBlock {
+
+ public Sunflower(String half) {
+ super("sunflower",
+ half.equals("upper")
+ ? Texture.sunflowerTop
+ : Texture.sunflowerBottom);
+ solid = false;
+ model = new SunFlowerModel(half.equals("upper"));
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/SweetBerryBush.java b/chunky/src/java/se/llbit/chunky/block/minecraft/SweetBerryBush.java
new file mode 100644
index 0000000000..70dfa40131
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/SweetBerryBush.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.resources.Texture;
+
+public class SweetBerryBush extends SpriteBlock {
+ public SweetBerryBush(int age) {
+ super("sweet_berry_bush", getTextureByAge(age));
+ }
+
+ protected static Texture getTextureByAge(int age) {
+ switch (age) {
+ case 0:
+ return Texture.sweetBerryBushStage0;
+ case 1:
+ return Texture.sweetBerryBushStage1;
+ case 2:
+ return Texture.sweetBerryBushStage2;
+ case 3:
+ default:
+ return Texture.sweetBerryBushStage3;
+ }
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/TallGrass.java b/chunky/src/java/se/llbit/chunky/block/minecraft/TallGrass.java
new file mode 100644
index 0000000000..eb3738f27f
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/TallGrass.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.GrassTintedSpriteModel;
+import se.llbit.chunky.resources.Texture;
+
+public class TallGrass extends AbstractModelBlock {
+
+ public TallGrass(String half) {
+ super("tall_grass",
+ half.equals("upper")
+ ? Texture.doubleTallGrassTop
+ : Texture.doubleTallGrassBottom);
+ solid = false;
+ model = new GrassTintedSpriteModel(texture);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/TintedGlass.java b/chunky/src/java/se/llbit/chunky/block/minecraft/TintedGlass.java
new file mode 100644
index 0000000000..78e9a31d4f
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/TintedGlass.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
+import se.llbit.chunky.resources.Texture;
+
+public class TintedGlass extends MinecraftBlockTranslucent {
+
+ public TintedGlass() {
+ super("tinted_glass", Texture.tintedGlass);
+ ior = 1.52f;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Torch.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Torch.java
new file mode 100644
index 0000000000..de080848a2
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Torch.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.TorchModel;
+import se.llbit.chunky.resources.Texture;
+
+/**
+ * A standing torch (on ground).
+ */
+public class Torch extends AbstractModelBlock {
+
+ public Torch(String name, Texture texture) {
+ super(name, texture);
+ solid = false;
+ model = new TorchModel(texture, 5);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/TorchflowerCrop.java b/chunky/src/java/se/llbit/chunky/block/minecraft/TorchflowerCrop.java
new file mode 100644
index 0000000000..70c8a1d51b
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/TorchflowerCrop.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.resources.Texture;
+
+public class TorchflowerCrop extends SpriteBlock {
+ public TorchflowerCrop(int age) {
+ super("torchflower_crop", getTextureByAge(age));
+ }
+
+ protected static Texture getTextureByAge(int age) {
+ switch (age) {
+ case 1:
+ return Texture.torchflowerCropStage1;
+ case 0:
+ default:
+ return Texture.torchflowerCropStage0;
+ }
+ }
+}
+
diff --git a/chunky/src/java/se/llbit/chunky/block/Trapdoor.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Trapdoor.java
similarity index 51%
rename from chunky/src/java/se/llbit/chunky/block/Trapdoor.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Trapdoor.java
index 892116cd77..722a56cc23 100644
--- a/chunky/src/java/se/llbit/chunky/block/Trapdoor.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Trapdoor.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.TrapdoorModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.TrapdoorModel;
import se.llbit.chunky.resources.Texture;
// TODO: fix rendering/texturing bugs.
diff --git a/chunky/src/java/se/llbit/chunky/block/Tripwire.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Tripwire.java
similarity index 54%
rename from chunky/src/java/se/llbit/chunky/block/Tripwire.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Tripwire.java
index 69c35a9fb3..e2e7a8310c 100644
--- a/chunky/src/java/se/llbit/chunky/block/Tripwire.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Tripwire.java
@@ -1,11 +1,30 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
import static se.llbit.chunky.world.BlockData.CONNECTED_EAST;
import static se.llbit.chunky.world.BlockData.CONNECTED_NORTH;
import static se.llbit.chunky.world.BlockData.CONNECTED_SOUTH;
import static se.llbit.chunky.world.BlockData.CONNECTED_WEST;
-import se.llbit.chunky.model.TripwireModel;
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.TripwireModel;
import se.llbit.chunky.resources.Texture;
public class Tripwire extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/TripwireHook.java b/chunky/src/java/se/llbit/chunky/block/minecraft/TripwireHook.java
similarity index 54%
rename from chunky/src/java/se/llbit/chunky/block/TripwireHook.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/TripwireHook.java
index 6fae04e296..78b6a40713 100644
--- a/chunky/src/java/se/llbit/chunky/block/TripwireHook.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/TripwireHook.java
@@ -1,6 +1,26 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.TripwireHookModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.block.BlockFace;
+import se.llbit.chunky.model.minecraft.TripwireHookModel;
import se.llbit.chunky.resources.Texture;
public class TripwireHook extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/TurtleEgg.java b/chunky/src/java/se/llbit/chunky/block/minecraft/TurtleEgg.java
new file mode 100644
index 0000000000..1eea6cbe4f
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/TurtleEgg.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.TurtleEggModel;
+import se.llbit.chunky.resources.Texture;
+
+public class TurtleEgg extends AbstractModelBlock {
+
+ private final String description;
+
+ public TurtleEgg(int eggs, int hatch) {
+ super("turtle_egg", Texture.turtleEgg);
+ this.description = String.format("eggs=%d, hatch=%d", eggs, hatch);
+ this.model = new TurtleEggModel(eggs, hatch);
+ }
+
+ @Override
+ public String description() {
+ return description;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/UnknownBlock.java b/chunky/src/java/se/llbit/chunky/block/minecraft/UnknownBlock.java
new file mode 100644
index 0000000000..e0434cf392
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/UnknownBlock.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.renderer.scene.Scene;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Ray;
+
+public class UnknownBlock extends SpriteBlock {
+ public static final UnknownBlock UNKNOWN = new UnknownBlock("?");
+
+ public UnknownBlock(String name) {
+ super(name, Texture.unknown);
+ }
+
+ @Override
+ public boolean intersect(Ray ray, Scene scene) {
+ if (scene.getHideUnknownBlocks()) {
+ return false;
+ }
+ return super.intersect(ray, scene);
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Vine.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Vine.java
similarity index 55%
rename from chunky/src/java/se/llbit/chunky/block/Vine.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Vine.java
index 834a2783e4..d01bf6ab03 100644
--- a/chunky/src/java/se/llbit/chunky/block/Vine.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Vine.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.VineModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.VineModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.BlockData;
diff --git a/chunky/src/java/se/llbit/chunky/block/Wall.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Wall.java
similarity index 50%
rename from chunky/src/java/se/llbit/chunky/block/Wall.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Wall.java
index 955fe5517e..6d6bf07896 100644
--- a/chunky/src/java/se/llbit/chunky/block/Wall.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Wall.java
@@ -1,6 +1,25 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
-import se.llbit.chunky.model.WallModel;
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.WallModel;
import se.llbit.chunky.resources.Texture;
public class Wall extends AbstractModelBlock {
diff --git a/chunky/src/java/se/llbit/chunky/block/WallBanner.java b/chunky/src/java/se/llbit/chunky/block/minecraft/WallBanner.java
similarity index 63%
rename from chunky/src/java/se/llbit/chunky/block/WallBanner.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/WallBanner.java
index ba3f04bcf8..47024654a2 100644
--- a/chunky/src/java/se/llbit/chunky/block/WallBanner.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/WallBanner.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.StandingBanner;
import se.llbit.chunky.renderer.scene.Scene;
diff --git a/chunky/src/java/se/llbit/chunky/block/WallCoralFan.java b/chunky/src/java/se/llbit/chunky/block/minecraft/WallCoralFan.java
similarity index 50%
rename from chunky/src/java/se/llbit/chunky/block/WallCoralFan.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/WallCoralFan.java
index 3943dde04d..c1c1f1f600 100644
--- a/chunky/src/java/se/llbit/chunky/block/WallCoralFan.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/WallCoralFan.java
@@ -1,9 +1,27 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.WallCoralFanEntity;
import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
import se.llbit.math.Ray;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/block/WallHangingSign.java b/chunky/src/java/se/llbit/chunky/block/minecraft/WallHangingSign.java
similarity index 66%
rename from chunky/src/java/se/llbit/chunky/block/WallHangingSign.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/WallHangingSign.java
index de7d01de4e..1afccff9fc 100644
--- a/chunky/src/java/se/llbit/chunky/block/WallHangingSign.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/WallHangingSign.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.HangingSignEntity;
import se.llbit.chunky.entity.WallHangingSignEntity;
diff --git a/chunky/src/java/se/llbit/chunky/block/WallHead.java b/chunky/src/java/se/llbit/chunky/block/minecraft/WallHead.java
similarity index 69%
rename from chunky/src/java/se/llbit/chunky/block/WallHead.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/WallHead.java
index 8668cda1e9..7fb2a24819 100644
--- a/chunky/src/java/se/llbit/chunky/block/WallHead.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/WallHead.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.HeadEntity;
import se.llbit.chunky.entity.SkullEntity;
diff --git a/chunky/src/java/se/llbit/chunky/block/WallSign.java b/chunky/src/java/se/llbit/chunky/block/minecraft/WallSign.java
similarity index 59%
rename from chunky/src/java/se/llbit/chunky/block/WallSign.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/WallSign.java
index db74d2836d..dd833d102e 100644
--- a/chunky/src/java/se/llbit/chunky/block/WallSign.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/WallSign.java
@@ -1,10 +1,28 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.entity.Entity;
import se.llbit.chunky.entity.SignEntity;
import se.llbit.chunky.entity.WallSignEntity;
import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.resources.Texture;
import se.llbit.math.Ray;
import se.llbit.math.Vector3;
import se.llbit.nbt.CompoundTag;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/WallTorch.java b/chunky/src/java/se/llbit/chunky/block/minecraft/WallTorch.java
new file mode 100644
index 0000000000..57f00b405f
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/WallTorch.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.TorchModel;
+import se.llbit.chunky.resources.Texture;
+
+/**
+ * A torch attached to a wall.
+ */
+public class WallTorch extends AbstractModelBlock {
+ protected final String facing;
+
+ public WallTorch(String name, Texture texture, String facing) {
+ super(name, texture);
+ this.facing = facing;
+ solid = false;
+ int facingInt;
+ switch (facing) {
+ default:
+ case "north":
+ facingInt = 4;
+ break;
+ case "south":
+ facingInt = 3;
+ break;
+ case "west":
+ facingInt = 2;
+ break;
+ case "east":
+ facingInt = 1;
+ break;
+ }
+ model = new TorchModel(texture, facingInt);
+ }
+
+ @Override
+ public String description() {
+ return "facing=" + facing;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/block/Water.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Water.java
similarity index 91%
rename from chunky/src/java/se/llbit/chunky/block/Water.java
rename to chunky/src/java/se/llbit/chunky/block/minecraft/Water.java
index 4f54b9d520..1f819f50ff 100644
--- a/chunky/src/java/se/llbit/chunky/block/Water.java
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Water.java
@@ -1,10 +1,28 @@
-package se.llbit.chunky.block;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.MinecraftBlockTranslucent;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.Material;
import se.llbit.math.Quad;
-import se.llbit.math.QuickMath;
import se.llbit.math.Ray;
import se.llbit.math.Triangle;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/block/minecraft/Wheat.java b/chunky/src/java/se/llbit/chunky/block/minecraft/Wheat.java
new file mode 100644
index 0000000000..c68f4f96db
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/block/minecraft/Wheat.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.block.minecraft;
+
+import se.llbit.chunky.block.AbstractModelBlock;
+import se.llbit.chunky.model.minecraft.CropsModel;
+import se.llbit.chunky.resources.Texture;
+
+public class Wheat extends AbstractModelBlock {
+
+ private static final Texture[] texture = {
+ Texture.crops0, Texture.crops1, Texture.crops2, Texture.crops3, Texture.crops4,
+ Texture.crops5, Texture.crops6, Texture.crops7
+ };
+
+ private final int age;
+
+ public Wheat(int age) {
+ super("wheat", Texture.crops7);
+ this.age = age & 7;
+ this.model = new CropsModel(texture[this.age]);
+ }
+
+ @Override
+ public String description() {
+ return "age=" + age;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/chunk/BlockPalette.java b/chunky/src/java/se/llbit/chunky/chunk/BlockPalette.java
index b6644099a4..9fc15279d2 100644
--- a/chunky/src/java/se/llbit/chunky/chunk/BlockPalette.java
+++ b/chunky/src/java/se/llbit/chunky/chunk/BlockPalette.java
@@ -17,6 +17,7 @@
package se.llbit.chunky.chunk;
import se.llbit.chunky.block.*;
+import se.llbit.chunky.block.minecraft.*;
import se.llbit.chunky.plugin.PluginApi;
import se.llbit.math.Octree;
import se.llbit.nbt.CompoundTag;
diff --git a/chunky/src/java/se/llbit/chunky/entity/BeaconBeam.java b/chunky/src/java/se/llbit/chunky/entity/BeaconBeam.java
index 15c430cb83..9df60b648d 100644
--- a/chunky/src/java/se/llbit/chunky/entity/BeaconBeam.java
+++ b/chunky/src/java/se/llbit/chunky/entity/BeaconBeam.java
@@ -1,7 +1,7 @@
package se.llbit.chunky.entity;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
-import se.llbit.chunky.block.Beacon;
+import se.llbit.chunky.block.minecraft.Beacon;
import se.llbit.chunky.block.Block;
import se.llbit.chunky.chunk.BlockPalette;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/chunky/entity/CalibratedSculkSensorAmethyst.java b/chunky/src/java/se/llbit/chunky/entity/CalibratedSculkSensorAmethyst.java
index 9b2a8ed13e..b6fe4591e8 100644
--- a/chunky/src/java/se/llbit/chunky/entity/CalibratedSculkSensorAmethyst.java
+++ b/chunky/src/java/se/llbit/chunky/entity/CalibratedSculkSensorAmethyst.java
@@ -1,6 +1,6 @@
package se.llbit.chunky.entity;
-import se.llbit.chunky.block.CalibratedSculkSensor;
+import se.llbit.chunky.block.minecraft.CalibratedSculkSensor;
import se.llbit.chunky.model.Model;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/chunky/entity/CoralFanEntity.java b/chunky/src/java/se/llbit/chunky/entity/CoralFanEntity.java
index 135c372963..5b39a00c16 100644
--- a/chunky/src/java/se/llbit/chunky/entity/CoralFanEntity.java
+++ b/chunky/src/java/se/llbit/chunky/entity/CoralFanEntity.java
@@ -17,7 +17,7 @@
*/
package se.llbit.chunky.entity;
-import se.llbit.chunky.block.CoralFan;
+import se.llbit.chunky.block.minecraft.CoralFan;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.Material;
import se.llbit.chunky.world.material.TextureMaterial;
diff --git a/chunky/src/java/se/llbit/chunky/entity/Entity.java b/chunky/src/java/se/llbit/chunky/entity/Entity.java
index eef4c594c4..11d6bd361a 100644
--- a/chunky/src/java/se/llbit/chunky/entity/Entity.java
+++ b/chunky/src/java/se/llbit/chunky/entity/Entity.java
@@ -17,8 +17,10 @@
*/
package se.llbit.chunky.entity;
+import java.util.Collection;
+
import se.llbit.chunky.chunk.BlockPalette;
-import se.llbit.chunky.model.DecoratedPotModel;
+import se.llbit.chunky.model.minecraft.DecoratedPotModel;
import se.llbit.json.JsonObject;
import se.llbit.json.JsonValue;
import se.llbit.math.Grid;
diff --git a/chunky/src/java/se/llbit/chunky/entity/FlameParticles.java b/chunky/src/java/se/llbit/chunky/entity/FlameParticles.java
index 8cc88a97cb..1f0945d200 100644
--- a/chunky/src/java/se/llbit/chunky/entity/FlameParticles.java
+++ b/chunky/src/java/se/llbit/chunky/entity/FlameParticles.java
@@ -6,7 +6,7 @@
import java.util.stream.StreamSupport;
import se.llbit.chunky.block.Block;
-import se.llbit.chunky.block.Candle;
+import se.llbit.chunky.block.minecraft.Candle;
import se.llbit.chunky.model.Model;
import se.llbit.json.JsonArray;
import se.llbit.json.JsonObject;
diff --git a/chunky/src/java/se/llbit/chunky/entity/PlayerEntity.java b/chunky/src/java/se/llbit/chunky/entity/PlayerEntity.java
index 3c5448a935..92d982d6f9 100644
--- a/chunky/src/java/se/llbit/chunky/entity/PlayerEntity.java
+++ b/chunky/src/java/se/llbit/chunky/entity/PlayerEntity.java
@@ -18,7 +18,7 @@
*/
package se.llbit.chunky.entity;
-import se.llbit.chunky.block.Head;
+import se.llbit.chunky.block.minecraft.Head;
import se.llbit.chunky.entity.SkullEntity.Kind;
import se.llbit.chunky.renderer.scene.PlayerModel;
import se.llbit.chunky.resources.*;
diff --git a/chunky/src/java/se/llbit/chunky/entity/SporeBlossom.java b/chunky/src/java/se/llbit/chunky/entity/SporeBlossom.java
index 4771721ca9..84646b8dc6 100644
--- a/chunky/src/java/se/llbit/chunky/entity/SporeBlossom.java
+++ b/chunky/src/java/se/llbit/chunky/entity/SporeBlossom.java
@@ -1,7 +1,7 @@
package se.llbit.chunky.entity;
import java.util.Collection;
-import se.llbit.chunky.model.SporeBlossomModel;
+import se.llbit.chunky.model.minecraft.SporeBlossomModel;
import se.llbit.json.JsonObject;
import se.llbit.json.JsonValue;
import se.llbit.math.Transform;
diff --git a/chunky/src/java/se/llbit/chunky/entity/WallCoralFanEntity.java b/chunky/src/java/se/llbit/chunky/entity/WallCoralFanEntity.java
index 35def14bae..c779bf8022 100644
--- a/chunky/src/java/se/llbit/chunky/entity/WallCoralFanEntity.java
+++ b/chunky/src/java/se/llbit/chunky/entity/WallCoralFanEntity.java
@@ -17,7 +17,7 @@
*/
package se.llbit.chunky.entity;
-import se.llbit.chunky.block.CoralFan;
+import se.llbit.chunky.block.minecraft.CoralFan;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.Material;
import se.llbit.chunky.world.material.TextureMaterial;
diff --git a/chunky/src/java/se/llbit/chunky/entity/WallHangingSignEntity.java b/chunky/src/java/se/llbit/chunky/entity/WallHangingSignEntity.java
index 104c53425e..55c5d641a7 100644
--- a/chunky/src/java/se/llbit/chunky/entity/WallHangingSignEntity.java
+++ b/chunky/src/java/se/llbit/chunky/entity/WallHangingSignEntity.java
@@ -1,6 +1,6 @@
package se.llbit.chunky.entity;
-import se.llbit.chunky.block.WallHangingSign;
+import se.llbit.chunky.block.minecraft.WallHangingSign;
import se.llbit.chunky.model.Model;
import se.llbit.chunky.resources.SignTexture;
import se.llbit.chunky.resources.Texture;
diff --git a/chunky/src/java/se/llbit/chunky/map/SurfaceLayer.java b/chunky/src/java/se/llbit/chunky/map/SurfaceLayer.java
index 72da624cb7..0dcdfc4821 100644
--- a/chunky/src/java/se/llbit/chunky/map/SurfaceLayer.java
+++ b/chunky/src/java/se/llbit/chunky/map/SurfaceLayer.java
@@ -17,13 +17,13 @@
package se.llbit.chunky.map;
import org.apache.commons.math3.util.FastMath;
-import se.llbit.chunky.block.Air;
+import se.llbit.chunky.block.minecraft.Air;
import se.llbit.chunky.block.Block;
-import se.llbit.chunky.block.Grass;
-import se.llbit.chunky.block.GrassBlock;
-import se.llbit.chunky.block.Leaves;
-import se.llbit.chunky.block.TallGrass;
-import se.llbit.chunky.block.Vine;
+import se.llbit.chunky.block.minecraft.Grass;
+import se.llbit.chunky.block.minecraft.GrassBlock;
+import se.llbit.chunky.block.minecraft.Leaves;
+import se.llbit.chunky.block.minecraft.TallGrass;
+import se.llbit.chunky.block.minecraft.Vine;
import se.llbit.chunky.block.legacy.UnfinalizedLegacyBlock;
import se.llbit.chunky.chunk.BlockPalette;
import se.llbit.chunky.chunk.ChunkData;
diff --git a/chunky/src/java/se/llbit/chunky/model/FrogspawnModel.java b/chunky/src/java/se/llbit/chunky/model/FrogspawnModel.java
deleted file mode 100644
index d3e34507e8..0000000000
--- a/chunky/src/java/se/llbit/chunky/model/FrogspawnModel.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package se.llbit.chunky.model;
-
-import se.llbit.chunky.resources.Texture;
-import se.llbit.math.Quad;
-import se.llbit.math.Vector3;
-import se.llbit.math.Vector4;
-
-public class FrogspawnModel extends QuadModel {
- private static final Quad[] quads = {
- new Quad(new Vector3(0, 0.25 / 16, 0), new Vector3(1, 0.25 / 16, 0),
- new Vector3(0, 0.25 / 16, 1), new Vector4(0, 1, 1, 0), true),
- };
-
- private static final Texture[] textures = {
- Texture.frogspawn
- };
-
- @Override
- public Quad[] getQuads() {
- return quads;
- }
-
- @Override
- public Texture[] getTextures() {
- return textures;
- }
-}
diff --git a/chunky/src/java/se/llbit/chunky/model/GrassTintedSpriteModel.java b/chunky/src/java/se/llbit/chunky/model/GrassTintedSpriteModel.java
index a1619d83e6..30f336e6cb 100644
--- a/chunky/src/java/se/llbit/chunky/model/GrassTintedSpriteModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/GrassTintedSpriteModel.java
@@ -16,6 +16,7 @@
*/
package se.llbit.chunky.model;
+import se.llbit.chunky.model.minecraft.SpriteModel;
import se.llbit.chunky.resources.Texture;
public class GrassTintedSpriteModel extends SpriteModel {
diff --git a/chunky/src/java/se/llbit/chunky/model/QuadModel.java b/chunky/src/java/se/llbit/chunky/model/QuadModel.java
index 3aba875ed8..31b070b142 100644
--- a/chunky/src/java/se/llbit/chunky/model/QuadModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/QuadModel.java
@@ -1,5 +1,25 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
package se.llbit.chunky.model;
+import se.llbit.chunky.model.BlockModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.plugin.PluginApi;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
diff --git a/chunky/src/java/se/llbit/chunky/model/TexturedBlockModel.java b/chunky/src/java/se/llbit/chunky/model/TexturedBlockModel.java
index 1c6bfda3d5..fdb3568dff 100644
--- a/chunky/src/java/se/llbit/chunky/model/TexturedBlockModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/TexturedBlockModel.java
@@ -16,7 +16,7 @@
*/
package se.llbit.chunky.model;
-import se.llbit.chunky.block.Air;
+import se.llbit.chunky.block.minecraft.Air;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
import se.llbit.math.QuickMath;
diff --git a/chunky/src/java/se/llbit/chunky/model/AnvilModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/AnvilModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/AnvilModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/AnvilModel.java
index bf41006adb..a754216bc4 100644
--- a/chunky/src/java/se/llbit/chunky/model/AnvilModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/AnvilModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2013 Jesper Öqvist
+/*
+ * Copyright (c) 2013-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/AttachedStemModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/AttachedStemModel.java
similarity index 68%
rename from chunky/src/java/se/llbit/chunky/model/AttachedStemModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/AttachedStemModel.java
index 547d735371..4350c4925a 100644
--- a/chunky/src/java/se/llbit/chunky/model/AttachedStemModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/AttachedStemModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/AzaleaModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/AzaleaModel.java
similarity index 85%
rename from chunky/src/java/se/llbit/chunky/model/AzaleaModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/AzaleaModel.java
index 3a6c101d01..841cd8a8f8 100644
--- a/chunky/src/java/se/llbit/chunky/model/AzaleaModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/AzaleaModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/BambooModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/BambooModel.java
similarity index 90%
rename from chunky/src/java/se/llbit/chunky/model/BambooModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/BambooModel.java
index f3de1a0f88..9ef08c97f2 100644
--- a/chunky/src/java/se/llbit/chunky/model/BambooModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/BambooModel.java
@@ -1,6 +1,27 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
import java.util.Arrays;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/BarrelModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/BarrelModel.java
similarity index 71%
rename from chunky/src/java/se/llbit/chunky/model/BarrelModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/BarrelModel.java
index b6a6949481..ffe39c462e 100644
--- a/chunky/src/java/se/llbit/chunky/model/BarrelModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/BarrelModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/BeaconModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/BeaconModel.java
similarity index 92%
rename from chunky/src/java/se/llbit/chunky/model/BeaconModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/BeaconModel.java
index e118be4801..891f67d0ed 100644
--- a/chunky/src/java/se/llbit/chunky/model/BeaconModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/BeaconModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2013 Jesper Öqvist
+/*
+ * Copyright (c) 2013-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/BedModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/BedModel.java
similarity index 98%
rename from chunky/src/java/se/llbit/chunky/model/BedModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/BedModel.java
index e4d7a30546..defbdeed22 100644
--- a/chunky/src/java/se/llbit/chunky/model/BedModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/BedModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/BellModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/BellModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/BellModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/BellModel.java
index c8c4a5f25e..04407dd8b3 100644
--- a/chunky/src/java/se/llbit/chunky/model/BellModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/BellModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/BigDripleafModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/BigDripleafModel.java
similarity index 93%
rename from chunky/src/java/se/llbit/chunky/model/BigDripleafModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/BigDripleafModel.java
index e932f9f730..dc821bce73 100644
--- a/chunky/src/java/se/llbit/chunky/model/BigDripleafModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/BigDripleafModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/BigDripleafStemModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/BigDripleafStemModel.java
similarity index 76%
rename from chunky/src/java/se/llbit/chunky/model/BigDripleafStemModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/BigDripleafStemModel.java
index 6936aafcd0..3540bbff23 100644
--- a/chunky/src/java/se/llbit/chunky/model/BigDripleafStemModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/BigDripleafStemModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/BrewingStandModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/BrewingStandModel.java
similarity index 98%
rename from chunky/src/java/se/llbit/chunky/model/BrewingStandModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/BrewingStandModel.java
index 5bae7771d8..792b574c03 100644
--- a/chunky/src/java/se/llbit/chunky/model/BrewingStandModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/BrewingStandModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/ButtonModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ButtonModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/ButtonModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ButtonModel.java
index a55a340923..7700865158 100644
--- a/chunky/src/java/se/llbit/chunky/model/ButtonModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ButtonModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/CactusModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CactusModel.java
similarity index 93%
rename from chunky/src/java/se/llbit/chunky/model/CactusModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CactusModel.java
index e5196d97aa..d3b74253f9 100644
--- a/chunky/src/java/se/llbit/chunky/model/CactusModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CactusModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/CakeModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CakeModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/CakeModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CakeModel.java
index be86daac8c..ecafdafeeb 100644
--- a/chunky/src/java/se/llbit/chunky/model/CakeModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CakeModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/CakeWithCandleModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CakeWithCandleModel.java
similarity index 86%
rename from chunky/src/java/se/llbit/chunky/model/CakeWithCandleModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CakeWithCandleModel.java
index 925710c60e..e70bef9c9a 100644
--- a/chunky/src/java/se/llbit/chunky/model/CakeWithCandleModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CakeWithCandleModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/CalibratedSculkSensorModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CalibratedSculkSensorModel.java
similarity index 87%
rename from chunky/src/java/se/llbit/chunky/model/CalibratedSculkSensorModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CalibratedSculkSensorModel.java
index 279fe9e1c6..8c176be5dd 100644
--- a/chunky/src/java/se/llbit/chunky/model/CalibratedSculkSensorModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CalibratedSculkSensorModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/CandleModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CandleModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/CandleModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CandleModel.java
index 2b8b7ab16b..00132cc131 100644
--- a/chunky/src/java/se/llbit/chunky/model/CandleModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CandleModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/CarpetModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CarpetModel.java
similarity index 90%
rename from chunky/src/java/se/llbit/chunky/model/CarpetModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CarpetModel.java
index 9e4ea192d7..13c44224b1 100644
--- a/chunky/src/java/se/llbit/chunky/model/CarpetModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CarpetModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2013 Jesper Öqvist
+/*
+ * Copyright (c) 2013-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/CauldronModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CauldronModel.java
similarity index 99%
rename from chunky/src/java/se/llbit/chunky/model/CauldronModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CauldronModel.java
index 6841142e0b..be240c673c 100644
--- a/chunky/src/java/se/llbit/chunky/model/CauldronModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CauldronModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,10 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
-import se.llbit.chunky.block.Lava;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Lava;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
diff --git a/chunky/src/java/se/llbit/chunky/model/ChainModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ChainModel.java
similarity index 70%
rename from chunky/src/java/se/llbit/chunky/model/ChainModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ChainModel.java
index 6b268e6a7b..12ae3b1ab2 100644
--- a/chunky/src/java/se/llbit/chunky/model/ChainModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ChainModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/ChestModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ChestModel.java
similarity index 98%
rename from chunky/src/java/se/llbit/chunky/model/ChestModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ChestModel.java
index 3506b840c0..61af4ab46f 100644
--- a/chunky/src/java/se/llbit/chunky/model/ChestModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ChestModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/ChorusFlowerModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ChorusFlowerModel.java
similarity index 91%
rename from chunky/src/java/se/llbit/chunky/model/ChorusFlowerModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ChorusFlowerModel.java
index 4ebbd2511c..5a095a8683 100644
--- a/chunky/src/java/se/llbit/chunky/model/ChorusFlowerModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ChorusFlowerModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2015 Jesper Öqvist
+/*
+ * Copyright (c) 2015-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/ChorusPlantModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ChorusPlantModel.java
similarity index 96%
rename from chunky/src/java/se/llbit/chunky/model/ChorusPlantModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ChorusPlantModel.java
index 871f93c095..cd52503fa3 100644
--- a/chunky/src/java/se/llbit/chunky/model/ChorusPlantModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ChorusPlantModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2015 Jesper Öqvist
+/*
+ * Copyright (c) 2015-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.*;
diff --git a/chunky/src/java/se/llbit/chunky/model/CocoaPlantModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CocoaPlantModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/CocoaPlantModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CocoaPlantModel.java
index df04e05fc3..19d9362b70 100644
--- a/chunky/src/java/se/llbit/chunky/model/CocoaPlantModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CocoaPlantModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Transform;
diff --git a/chunky/src/java/se/llbit/chunky/model/ComparatorModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ComparatorModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/ComparatorModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ComparatorModel.java
index bbc3f355f3..93a24b5933 100644
--- a/chunky/src/java/se/llbit/chunky/model/ComparatorModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ComparatorModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2013 Jesper Öqvist
+/*
+ * Copyright (c) 2013-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/ComposterModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ComposterModel.java
similarity index 90%
rename from chunky/src/java/se/llbit/chunky/model/ComposterModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ComposterModel.java
index 15812b8edd..282d26483d 100644
--- a/chunky/src/java/se/llbit/chunky/model/ComposterModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ComposterModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.*;
diff --git a/chunky/src/java/se/llbit/chunky/model/ConduitModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ConduitModel.java
similarity index 71%
rename from chunky/src/java/se/llbit/chunky/model/ConduitModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ConduitModel.java
index f96d604f35..6f0296be17 100644
--- a/chunky/src/java/se/llbit/chunky/model/ConduitModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ConduitModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/CropsModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/CropsModel.java
similarity index 92%
rename from chunky/src/java/se/llbit/chunky/model/CropsModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/CropsModel.java
index 871d06d782..79e84d99be 100644
--- a/chunky/src/java/se/llbit/chunky/model/CropsModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/CropsModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/DaylightSensorModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/DaylightSensorModel.java
similarity index 90%
rename from chunky/src/java/se/llbit/chunky/model/DaylightSensorModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/DaylightSensorModel.java
index 8e8eb9a976..08edb2c7a8 100644
--- a/chunky/src/java/se/llbit/chunky/model/DaylightSensorModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/DaylightSensorModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2013 Jesper Öqvist
+/*
+ * Copyright (c) 2013-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/DecoratedPotModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/DecoratedPotModel.java
similarity index 91%
rename from chunky/src/java/se/llbit/chunky/model/DecoratedPotModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/DecoratedPotModel.java
index 78678722de..29a72bcd1b 100644
--- a/chunky/src/java/se/llbit/chunky/model/DecoratedPotModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/DecoratedPotModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
-
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.TopBottomOrientedTexturedBlockModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.log.Log;
import se.llbit.math.Quad;
diff --git a/chunky/src/java/se/llbit/chunky/model/DispenserModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/DispenserModel.java
similarity index 60%
rename from chunky/src/java/se/llbit/chunky/model/DispenserModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/DispenserModel.java
index 10200e3b51..dc7eb6bf2a 100644
--- a/chunky/src/java/se/llbit/chunky/model/DispenserModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/DispenserModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/DoorModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/DoorModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/DoorModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/DoorModel.java
index e7bd1ef2ba..8499b2ea80 100644
--- a/chunky/src/java/se/llbit/chunky/model/DoorModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/DoorModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/DragonEggModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/DragonEggModel.java
similarity index 99%
rename from chunky/src/java/se/llbit/chunky/model/DragonEggModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/DragonEggModel.java
index 16b7da3745..c2131b3806 100644
--- a/chunky/src/java/se/llbit/chunky/model/DragonEggModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/DragonEggModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/EnchantmentTableModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/EnchantmentTableModel.java
similarity index 90%
rename from chunky/src/java/se/llbit/chunky/model/EnchantmentTableModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/EnchantmentTableModel.java
index 44bd49229b..f0740a87d1 100644
--- a/chunky/src/java/se/llbit/chunky/model/EnchantmentTableModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/EnchantmentTableModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/EndPortalFrameModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/EndPortalFrameModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/EndPortalFrameModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/EndPortalFrameModel.java
index de5ef92556..74c116cdfd 100644
--- a/chunky/src/java/se/llbit/chunky/model/EndPortalFrameModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/EndPortalFrameModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.*;
diff --git a/chunky/src/java/se/llbit/chunky/model/EndPortalModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/EndPortalModel.java
similarity index 91%
rename from chunky/src/java/se/llbit/chunky/model/EndPortalModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/EndPortalModel.java
index e692933c5b..c37f211a5f 100644
--- a/chunky/src/java/se/llbit/chunky/model/EndPortalModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/EndPortalModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.BitmapImage;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
diff --git a/chunky/src/java/se/llbit/chunky/model/EndRodModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/EndRodModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/EndRodModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/EndRodModel.java
index 5676737878..5d76f7d6d9 100644
--- a/chunky/src/java/se/llbit/chunky/model/EndRodModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/EndRodModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2015 Jesper Öqvist
+/*
+ * Copyright (c) 2015-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/FenceGateModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/FenceGateModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/FenceGateModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/FenceGateModel.java
index 3b0efa9b46..a7bebc7740 100644
--- a/chunky/src/java/se/llbit/chunky/model/FenceGateModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/FenceGateModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/FenceModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/FenceModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/FenceModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/FenceModel.java
index 031f85355c..c727076b65 100644
--- a/chunky/src/java/se/llbit/chunky/model/FenceModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/FenceModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012-2015 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/FireModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/FireModel.java
similarity index 92%
rename from chunky/src/java/se/llbit/chunky/model/FireModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/FireModel.java
index a824e89513..cd8b70d113 100644
--- a/chunky/src/java/se/llbit/chunky/model/FireModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/FireModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2015 Jesper Öqvist
+/*
+ * Copyright (c) 2015-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AnimatedQuadModel;
import se.llbit.chunky.resources.AnimatedTexture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/FlowerPotModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/FlowerPotModel.java
similarity index 99%
rename from chunky/src/java/se/llbit/chunky/model/FlowerPotModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/FlowerPotModel.java
index 5963bcfb56..05762dbade 100644
--- a/chunky/src/java/se/llbit/chunky/model/FlowerPotModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/FlowerPotModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2013 Jesper Öqvist
+/*
+ * Copyright (c) 2013-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,11 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/Flowerbed.java b/chunky/src/java/se/llbit/chunky/model/minecraft/Flowerbed.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/Flowerbed.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/Flowerbed.java
index 00e7c480a0..4562b16492 100644
--- a/chunky/src/java/se/llbit/chunky/model/Flowerbed.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/Flowerbed.java
@@ -1,5 +1,26 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/minecraft/FrogspawnModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/FrogspawnModel.java
new file mode 100644
index 0000000000..f4d3db5729
--- /dev/null
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/FrogspawnModel.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
+import se.llbit.chunky.resources.Texture;
+import se.llbit.math.Quad;
+import se.llbit.math.Vector3;
+import se.llbit.math.Vector4;
+
+public class FrogspawnModel extends QuadModel {
+ private static final Quad[] quads = {
+ new Quad(new Vector3(0, 0.25 / 16, 0), new Vector3(1, 0.25 / 16, 0),
+ new Vector3(0, 0.25 / 16, 1), new Vector4(0, 1, 1, 0), true),
+ };
+
+ private static final Texture[] textures = {
+ Texture.frogspawn
+ };
+
+ @Override
+ public Quad[] getQuads() {
+ return quads;
+ }
+
+ @Override
+ public Texture[] getTextures() {
+ return textures;
+ }
+}
diff --git a/chunky/src/java/se/llbit/chunky/model/GlassPaneModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/GlassPaneModel.java
similarity index 96%
rename from chunky/src/java/se/llbit/chunky/model/GlassPaneModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/GlassPaneModel.java
index 90b9329404..70fb1ad887 100644
--- a/chunky/src/java/se/llbit/chunky/model/GlassPaneModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/GlassPaneModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012-2015 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.*;
diff --git a/chunky/src/java/se/llbit/chunky/model/GlowLichenModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/GlowLichenModel.java
similarity index 69%
rename from chunky/src/java/se/llbit/chunky/model/GlowLichenModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/GlowLichenModel.java
index ae5e6cf317..d6e9854823 100644
--- a/chunky/src/java/se/llbit/chunky/model/GlowLichenModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/GlowLichenModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/GrassBlockModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/GrassBlockModel.java
similarity index 57%
rename from chunky/src/java/se/llbit/chunky/model/GrassBlockModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/GrassBlockModel.java
index 5090af8936..22872581bc 100644
--- a/chunky/src/java/se/llbit/chunky/model/GrassBlockModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/GrassBlockModel.java
@@ -1,8 +1,28 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
import static se.llbit.chunky.model.Tint.BIOME_GRASS;
import static se.llbit.chunky.model.Tint.NONE;
+import se.llbit.chunky.model.AABBModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/GrassPathModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/GrassPathModel.java
similarity index 90%
rename from chunky/src/java/se/llbit/chunky/model/GrassPathModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/GrassPathModel.java
index 514d1904b4..0cc7187753 100644
--- a/chunky/src/java/se/llbit/chunky/model/GrassPathModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/GrassPathModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2015 Jesper Öqvist
+/*
+ * Copyright (c) 2015-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/GrindstoneModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/GrindstoneModel.java
similarity index 91%
rename from chunky/src/java/se/llbit/chunky/model/GrindstoneModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/GrindstoneModel.java
index cecfc2a8d4..21aaf10b60 100644
--- a/chunky/src/java/se/llbit/chunky/model/GrindstoneModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/GrindstoneModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/HoneyBlockModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/HoneyBlockModel.java
similarity index 87%
rename from chunky/src/java/se/llbit/chunky/model/HoneyBlockModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/HoneyBlockModel.java
index be893ea6d7..a3b647d1c6 100644
--- a/chunky/src/java/se/llbit/chunky/model/HoneyBlockModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/HoneyBlockModel.java
@@ -1,4 +1,22 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.*;
diff --git a/chunky/src/java/se/llbit/chunky/model/HopperModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/HopperModel.java
similarity index 99%
rename from chunky/src/java/se/llbit/chunky/model/HopperModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/HopperModel.java
index 983c5f7e98..3b3ab3e2e3 100644
--- a/chunky/src/java/se/llbit/chunky/model/HopperModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/HopperModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2013 Jesper Öqvist
+/*
+ * Copyright (c) 2013-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/IronBarsModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/IronBarsModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/IronBarsModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/IronBarsModel.java
index ae6d0e2577..86b6d9ec0f 100644
--- a/chunky/src/java/se/llbit/chunky/model/IronBarsModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/IronBarsModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012-2015 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/JigsawModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/JigsawModel.java
similarity index 84%
rename from chunky/src/java/se/llbit/chunky/model/JigsawModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/JigsawModel.java
index 038b21d8c7..cfc46cdf5d 100644
--- a/chunky/src/java/se/llbit/chunky/model/JigsawModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/JigsawModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/LadderModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/LadderModel.java
similarity index 93%
rename from chunky/src/java/se/llbit/chunky/model/LadderModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/LadderModel.java
index 4bfd93ac0d..86b10d268f 100644
--- a/chunky/src/java/se/llbit/chunky/model/LadderModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/LadderModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/LanternModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/LanternModel.java
similarity index 92%
rename from chunky/src/java/se/llbit/chunky/model/LanternModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/LanternModel.java
index c585aaf188..d5ef67a6c3 100644
--- a/chunky/src/java/se/llbit/chunky/model/LanternModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/LanternModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/LeafModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/LeafModel.java
similarity index 91%
rename from chunky/src/java/se/llbit/chunky/model/LeafModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/LeafModel.java
index 46d421f91d..ac7e9f82bb 100644
--- a/chunky/src/java/se/llbit/chunky/model/LeafModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/LeafModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/LeverModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/LeverModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/LeverModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/LeverModel.java
index 54db92e6c6..f38e8696dd 100644
--- a/chunky/src/java/se/llbit/chunky/model/LeverModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/LeverModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,12 +15,14 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
import static se.llbit.chunky.model.Model.rotateY;
import static se.llbit.chunky.model.Model.rotateZ;
import static se.llbit.chunky.model.Model.translate;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/LightBlockModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/LightBlockModel.java
similarity index 56%
rename from chunky/src/java/se/llbit/chunky/model/LightBlockModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/LightBlockModel.java
index 4810396ed0..4fbfad8d9b 100644
--- a/chunky/src/java/se/llbit/chunky/model/LightBlockModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/LightBlockModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/LightningRodModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/LightningRodModel.java
similarity index 84%
rename from chunky/src/java/se/llbit/chunky/model/LightningRodModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/LightningRodModel.java
index 9c6fec9938..cdeacfe9da 100644
--- a/chunky/src/java/se/llbit/chunky/model/LightningRodModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/LightningRodModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/LogModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/LogModel.java
similarity index 65%
rename from chunky/src/java/se/llbit/chunky/model/LogModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/LogModel.java
index 658db47447..ab5bad7eed 100644
--- a/chunky/src/java/se/llbit/chunky/model/LogModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/LogModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/MangrovePropaguleModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/MangrovePropaguleModel.java
similarity index 96%
rename from chunky/src/java/se/llbit/chunky/model/MangrovePropaguleModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/MangrovePropaguleModel.java
index 50936a51b5..e8c140aed8 100644
--- a/chunky/src/java/se/llbit/chunky/model/MangrovePropaguleModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/MangrovePropaguleModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/MangroveRootsModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/MangroveRootsModel.java
similarity index 84%
rename from chunky/src/java/se/llbit/chunky/model/MangroveRootsModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/MangroveRootsModel.java
index 3f7dc0ffc8..9f51224f5a 100644
--- a/chunky/src/java/se/llbit/chunky/model/MangroveRootsModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/MangroveRootsModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/NetherPortalModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/NetherPortalModel.java
similarity index 57%
rename from chunky/src/java/se/llbit/chunky/model/NetherPortalModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/NetherPortalModel.java
index 5d58878c7d..cf511ac5c2 100644
--- a/chunky/src/java/se/llbit/chunky/model/NetherPortalModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/NetherPortalModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/ObserverModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ObserverModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/ObserverModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ObserverModel.java
index cd5894596f..c6a001a472 100644
--- a/chunky/src/java/se/llbit/chunky/model/ObserverModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ObserverModel.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016 Jesper Öqvist
+ * Copyright (c) 2016-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -15,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/PistonExtensionModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/PistonExtensionModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/PistonExtensionModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/PistonExtensionModel.java
index 48d73113b2..931ea39ef1 100644
--- a/chunky/src/java/se/llbit/chunky/model/PistonExtensionModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/PistonExtensionModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/PistonModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/PistonModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/PistonModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/PistonModel.java
index 1239ae300f..10fc4a8dde 100644
--- a/chunky/src/java/se/llbit/chunky/model/PistonModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/PistonModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/PitcherCropBottomModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/PitcherCropBottomModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/PitcherCropBottomModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/PitcherCropBottomModel.java
index 79178b6574..0fee59ae6f 100644
--- a/chunky/src/java/se/llbit/chunky/model/PitcherCropBottomModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/PitcherCropBottomModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/PitcherCropTopModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/PitcherCropTopModel.java
similarity index 88%
rename from chunky/src/java/se/llbit/chunky/model/PitcherCropTopModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/PitcherCropTopModel.java
index ed8da40099..69e52f4fb2 100644
--- a/chunky/src/java/se/llbit/chunky/model/PitcherCropTopModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/PitcherCropTopModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/PitcherPlantBottomModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/PitcherPlantBottomModel.java
similarity index 88%
rename from chunky/src/java/se/llbit/chunky/model/PitcherPlantBottomModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/PitcherPlantBottomModel.java
index b616b94175..75e328aefc 100644
--- a/chunky/src/java/se/llbit/chunky/model/PitcherPlantBottomModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/PitcherPlantBottomModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/PitcherPlantTopModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/PitcherPlantTopModel.java
similarity index 80%
rename from chunky/src/java/se/llbit/chunky/model/PitcherPlantTopModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/PitcherPlantTopModel.java
index d6d548a466..e1d59f87e0 100644
--- a/chunky/src/java/se/llbit/chunky/model/PitcherPlantTopModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/PitcherPlantTopModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/PressurePlateModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/PressurePlateModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/PressurePlateModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/PressurePlateModel.java
index ee944798f2..e2edbcae90 100644
--- a/chunky/src/java/se/llbit/chunky/model/PressurePlateModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/PressurePlateModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/RailModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/RailModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/RailModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/RailModel.java
index 8a530f9106..3f3916a9e2 100644
--- a/chunky/src/java/se/llbit/chunky/model/RailModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/RailModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/RedstoneRepeaterModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/RedstoneRepeaterModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/RedstoneRepeaterModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/RedstoneRepeaterModel.java
index da5716744a..19adb5b804 100644
--- a/chunky/src/java/se/llbit/chunky/model/RedstoneRepeaterModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/RedstoneRepeaterModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/RedstoneWireModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/RedstoneWireModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/RedstoneWireModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/RedstoneWireModel.java
index 0fd8eaced6..ad0228a87a 100644
--- a/chunky/src/java/se/llbit/chunky/model/RedstoneWireModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/RedstoneWireModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.BlockData;
import se.llbit.math.ColorUtil;
diff --git a/chunky/src/java/se/llbit/chunky/model/ScaffoldingModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/ScaffoldingModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/ScaffoldingModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/ScaffoldingModel.java
index 974b0604cd..f81cb1712f 100644
--- a/chunky/src/java/se/llbit/chunky/model/ScaffoldingModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/ScaffoldingModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/SculkSensorModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SculkSensorModel.java
similarity index 86%
rename from chunky/src/java/se/llbit/chunky/model/SculkSensorModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SculkSensorModel.java
index 11d013f86c..2ffb4a8779 100644
--- a/chunky/src/java/se/llbit/chunky/model/SculkSensorModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SculkSensorModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/SculkShriekerModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SculkShriekerModel.java
similarity index 86%
rename from chunky/src/java/se/llbit/chunky/model/SculkShriekerModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SculkShriekerModel.java
index f242f7f436..f9af618fac 100644
--- a/chunky/src/java/se/llbit/chunky/model/SculkShriekerModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SculkShriekerModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/SculkVeinModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SculkVeinModel.java
similarity index 69%
rename from chunky/src/java/se/llbit/chunky/model/SculkVeinModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SculkVeinModel.java
index a3a90235bc..6f53fc5e96 100644
--- a/chunky/src/java/se/llbit/chunky/model/SculkVeinModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SculkVeinModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/SeaPickleModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SeaPickleModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/SeaPickleModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SeaPickleModel.java
index 28d5355973..11dc4ed014 100644
--- a/chunky/src/java/se/llbit/chunky/model/SeaPickleModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SeaPickleModel.java
@@ -1,6 +1,27 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
import java.util.Arrays;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Transform;
diff --git a/chunky/src/java/se/llbit/chunky/model/SlabModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SlabModel.java
similarity index 53%
rename from chunky/src/java/se/llbit/chunky/model/SlabModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SlabModel.java
index 0a3cf51b2c..01724f1484 100644
--- a/chunky/src/java/se/llbit/chunky/model/SlabModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SlabModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/SlimeBlockModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SlimeBlockModel.java
similarity index 87%
rename from chunky/src/java/se/llbit/chunky/model/SlimeBlockModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SlimeBlockModel.java
index a826ad1e23..d7873dd7c0 100644
--- a/chunky/src/java/se/llbit/chunky/model/SlimeBlockModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SlimeBlockModel.java
@@ -1,4 +1,22 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.*;
diff --git a/chunky/src/java/se/llbit/chunky/model/SmallDripleafModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SmallDripleafModel.java
similarity index 92%
rename from chunky/src/java/se/llbit/chunky/model/SmallDripleafModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SmallDripleafModel.java
index 774ba8c2dd..b247cfce76 100644
--- a/chunky/src/java/se/llbit/chunky/model/SmallDripleafModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SmallDripleafModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/SnifferEggModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SnifferEggModel.java
similarity index 78%
rename from chunky/src/java/se/llbit/chunky/model/SnifferEggModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SnifferEggModel.java
index abc9a4ae5f..496078ead7 100644
--- a/chunky/src/java/se/llbit/chunky/model/SnifferEggModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SnifferEggModel.java
@@ -1,5 +1,24 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.QuickMath;
diff --git a/chunky/src/java/se/llbit/chunky/model/SnowModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SnowModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/SnowModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SnowModel.java
index 8d369d1e13..659ac9ba8c 100644
--- a/chunky/src/java/se/llbit/chunky/model/SnowModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SnowModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.*;
diff --git a/chunky/src/java/se/llbit/chunky/model/SporeBlossomModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SporeBlossomModel.java
similarity index 83%
rename from chunky/src/java/se/llbit/chunky/model/SporeBlossomModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SporeBlossomModel.java
index d58e520d45..1dbb861b0d 100644
--- a/chunky/src/java/se/llbit/chunky/model/SporeBlossomModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SporeBlossomModel.java
@@ -1,7 +1,27 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
import java.util.Collection;
import java.util.LinkedList;
+
+import se.llbit.chunky.model.Model;
import se.llbit.chunky.resources.Texture;
import se.llbit.chunky.world.material.TextureMaterial;
import se.llbit.math.Quad;
diff --git a/chunky/src/java/se/llbit/chunky/model/SpriteModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SpriteModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/SpriteModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SpriteModel.java
index 36148fae44..0ad41c0903 100644
--- a/chunky/src/java/se/llbit/chunky/model/SpriteModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SpriteModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Ray;
diff --git a/chunky/src/java/se/llbit/chunky/model/StairModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/StairModel.java
similarity index 97%
rename from chunky/src/java/se/llbit/chunky/model/StairModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/StairModel.java
index 6c6f848fbc..700470923b 100644
--- a/chunky/src/java/se/llbit/chunky/model/StairModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/StairModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/StemModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/StemModel.java
similarity index 63%
rename from chunky/src/java/se/llbit/chunky/model/StemModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/StemModel.java
index 3e01026366..fa6452e4ea 100644
--- a/chunky/src/java/se/llbit/chunky/model/StemModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/StemModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.QuadModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/StonecutterModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/StonecutterModel.java
similarity index 80%
rename from chunky/src/java/se/llbit/chunky/model/StonecutterModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/StonecutterModel.java
index 685a30db28..dee04f21ab 100644
--- a/chunky/src/java/se/llbit/chunky/model/StonecutterModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/StonecutterModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/SunFlowerModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/SunFlowerModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/SunFlowerModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/SunFlowerModel.java
index 5aa75b9b12..0ff6a2ef6b 100644
--- a/chunky/src/java/se/llbit/chunky/model/SunFlowerModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/SunFlowerModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2013 Jesper Öqvist
+/*
+ * Copyright (c) 2013-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/TerracottaModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/TerracottaModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/TerracottaModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/TerracottaModel.java
index e600e50593..abdbe60310 100644
--- a/chunky/src/java/se/llbit/chunky/model/TerracottaModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/TerracottaModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2017 Jesper Öqvist
+/*
+ * Copyright (c) 2017-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/TorchModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/TorchModel.java
similarity index 96%
rename from chunky/src/java/se/llbit/chunky/model/TorchModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/TorchModel.java
index f010a91374..2b627b6154 100644
--- a/chunky/src/java/se/llbit/chunky/model/TorchModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/TorchModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,11 +15,12 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
-import se.llbit.math.Ray;
import se.llbit.math.Vector3;
import se.llbit.math.Vector4;
diff --git a/chunky/src/java/se/llbit/chunky/model/TrapdoorModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/TrapdoorModel.java
similarity index 98%
rename from chunky/src/java/se/llbit/chunky/model/TrapdoorModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/TrapdoorModel.java
index 9f80881c0f..7d473cd448 100644
--- a/chunky/src/java/se/llbit/chunky/model/TrapdoorModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/TrapdoorModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/TripwireHookModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/TripwireHookModel.java
similarity index 99%
rename from chunky/src/java/se/llbit/chunky/model/TripwireHookModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/TripwireHookModel.java
index f785f4bfed..9fd1d9d3c4 100644
--- a/chunky/src/java/se/llbit/chunky/model/TripwireHookModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/TripwireHookModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/TripwireModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/TripwireModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/TripwireModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/TripwireModel.java
index 7aed1033c1..041da06447 100644
--- a/chunky/src/java/se/llbit/chunky/model/TripwireModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/TripwireModel.java
@@ -1,4 +1,22 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+
+package se.llbit.chunky.model.minecraft;
import static se.llbit.chunky.world.BlockData.CONNECTED_EAST;
import static se.llbit.chunky.world.BlockData.CONNECTED_NORTH;
@@ -6,6 +24,9 @@
import static se.llbit.chunky.world.BlockData.CONNECTED_WEST;
import java.util.Arrays;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/TurtleEggModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/TurtleEggModel.java
similarity index 90%
rename from chunky/src/java/se/llbit/chunky/model/TurtleEggModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/TurtleEggModel.java
index ff5ead4dd6..14b099489d 100644
--- a/chunky/src/java/se/llbit/chunky/model/TurtleEggModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/TurtleEggModel.java
@@ -1,5 +1,25 @@
-package se.llbit.chunky.model;
+/*
+ * Copyright (c) 2023 Chunky contributors
+ *
+ * This file is part of Chunky.
+ *
+ * Chunky is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Chunky is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with Chunky. If not, see .
+ */
+package se.llbit.chunky.model.minecraft;
+
+import se.llbit.chunky.model.Model;
+import se.llbit.chunky.model.QuadModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/model/VineModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/VineModel.java
similarity index 95%
rename from chunky/src/java/se/llbit/chunky/model/VineModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/VineModel.java
index be1ce488fb..3bc0d6cc37 100644
--- a/chunky/src/java/se/llbit/chunky/model/VineModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/VineModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.QuadModel;
+import se.llbit.chunky.model.Tint;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
import se.llbit.math.Transform;
diff --git a/chunky/src/java/se/llbit/chunky/model/WallModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/WallModel.java
similarity index 94%
rename from chunky/src/java/se/llbit/chunky/model/WallModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/WallModel.java
index 38f3dbd973..6d80aa2138 100644
--- a/chunky/src/java/se/llbit/chunky/model/WallModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/WallModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,8 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
+import se.llbit.chunky.model.AABBModel;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.AABB;
diff --git a/chunky/src/java/se/llbit/chunky/model/WaterModel.java b/chunky/src/java/se/llbit/chunky/model/minecraft/WaterModel.java
similarity index 99%
rename from chunky/src/java/se/llbit/chunky/model/WaterModel.java
rename to chunky/src/java/se/llbit/chunky/model/minecraft/WaterModel.java
index 5c43d2c9d9..3d96c8edfd 100644
--- a/chunky/src/java/se/llbit/chunky/model/WaterModel.java
+++ b/chunky/src/java/se/llbit/chunky/model/minecraft/WaterModel.java
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012 Jesper Öqvist
+/*
+ * Copyright (c) 2012-2023 Chunky contributors
*
* This file is part of Chunky.
*
@@ -14,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with Chunky. If not, see .
*/
-package se.llbit.chunky.model;
+package se.llbit.chunky.model.minecraft;
import se.llbit.chunky.resources.Texture;
import se.llbit.math.Quad;
diff --git a/chunky/src/java/se/llbit/chunky/renderer/scene/LegacyWaterShader.java b/chunky/src/java/se/llbit/chunky/renderer/scene/LegacyWaterShader.java
index 699d51fb9a..83b4e42642 100644
--- a/chunky/src/java/se/llbit/chunky/renderer/scene/LegacyWaterShader.java
+++ b/chunky/src/java/se/llbit/chunky/renderer/scene/LegacyWaterShader.java
@@ -16,7 +16,7 @@
*/
package se.llbit.chunky.renderer.scene;
-import se.llbit.chunky.model.WaterModel;
+import se.llbit.chunky.model.minecraft.WaterModel;
import se.llbit.json.JsonObject;
import se.llbit.math.Ray;
diff --git a/chunky/src/java/se/llbit/chunky/renderer/scene/OctreeFinalizer.java b/chunky/src/java/se/llbit/chunky/renderer/scene/OctreeFinalizer.java
index 46544126f4..a910cd0366 100644
--- a/chunky/src/java/se/llbit/chunky/renderer/scene/OctreeFinalizer.java
+++ b/chunky/src/java/se/llbit/chunky/renderer/scene/OctreeFinalizer.java
@@ -16,10 +16,9 @@
*/
package se.llbit.chunky.renderer.scene;
-import se.llbit.chunky.block.Lava;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Lava;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.chunk.BlockPalette;
-import se.llbit.chunky.world.Chunk;
import se.llbit.chunky.world.ChunkPosition;
import se.llbit.chunky.world.Material;
import se.llbit.math.Octree;
diff --git a/chunky/src/java/se/llbit/chunky/renderer/scene/PathTracer.java b/chunky/src/java/se/llbit/chunky/renderer/scene/PathTracer.java
index ded7801cdb..7e80122b2f 100644
--- a/chunky/src/java/se/llbit/chunky/renderer/scene/PathTracer.java
+++ b/chunky/src/java/se/llbit/chunky/renderer/scene/PathTracer.java
@@ -18,8 +18,8 @@
package se.llbit.chunky.renderer.scene;
import org.apache.commons.math3.util.FastMath;
-import se.llbit.chunky.block.Air;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Air;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.renderer.EmitterSamplingStrategy;
import se.llbit.chunky.renderer.WorkerState;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/chunky/renderer/scene/PreviewRayTracer.java b/chunky/src/java/se/llbit/chunky/renderer/scene/PreviewRayTracer.java
index 264ec112df..c2446e9c23 100644
--- a/chunky/src/java/se/llbit/chunky/renderer/scene/PreviewRayTracer.java
+++ b/chunky/src/java/se/llbit/chunky/renderer/scene/PreviewRayTracer.java
@@ -17,9 +17,9 @@
*/
package se.llbit.chunky.renderer.scene;
-import se.llbit.chunky.block.Air;
+import se.llbit.chunky.block.minecraft.Air;
import se.llbit.chunky.block.MinecraftBlock;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.renderer.WorkerState;
import se.llbit.math.Ray;
import se.llbit.math.Vector3;
diff --git a/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java b/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java
index 245c67b531..96b0d8c97d 100644
--- a/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java
+++ b/chunky/src/java/se/llbit/chunky/renderer/scene/Scene.java
@@ -20,10 +20,10 @@
import it.unimi.dsi.fastutil.io.FastBufferedInputStream;
import it.unimi.dsi.fastutil.io.FastBufferedOutputStream;
import se.llbit.chunky.PersistentSettings;
-import se.llbit.chunky.block.Air;
+import se.llbit.chunky.block.minecraft.Air;
import se.llbit.chunky.block.Block;
-import se.llbit.chunky.block.Lava;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Lava;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.block.legacy.LegacyBlocksFinalizer;
import se.llbit.chunky.chunk.BlockPalette;
import se.llbit.chunky.chunk.ChunkData;
diff --git a/chunky/src/java/se/llbit/chunky/renderer/scene/Sky.java b/chunky/src/java/se/llbit/chunky/renderer/scene/Sky.java
index ea3f41c572..b3a1f0db6b 100644
--- a/chunky/src/java/se/llbit/chunky/renderer/scene/Sky.java
+++ b/chunky/src/java/se/llbit/chunky/renderer/scene/Sky.java
@@ -18,7 +18,7 @@
package se.llbit.chunky.renderer.scene;
import org.apache.commons.math3.util.FastMath;
-import se.llbit.chunky.block.Air;
+import se.llbit.chunky.block.minecraft.Air;
import se.llbit.chunky.resources.HDRTexture;
import se.llbit.chunky.resources.PFMTexture;
import se.llbit.chunky.resources.Texture;
diff --git a/chunky/src/java/se/llbit/chunky/resources/OctreeFileFormat.java b/chunky/src/java/se/llbit/chunky/resources/OctreeFileFormat.java
index ebb1f1fa47..4f0d707199 100644
--- a/chunky/src/java/se/llbit/chunky/resources/OctreeFileFormat.java
+++ b/chunky/src/java/se/llbit/chunky/resources/OctreeFileFormat.java
@@ -23,8 +23,8 @@
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import se.llbit.chunky.block.Block;
-import se.llbit.chunky.block.Lava;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Lava;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.chunk.BlockPalette;
import se.llbit.log.Log;
import se.llbit.math.Octree;
diff --git a/chunky/src/java/se/llbit/chunky/world/Chunk.java b/chunky/src/java/se/llbit/chunky/world/Chunk.java
index 34a81eec68..aae2e403f8 100644
--- a/chunky/src/java/se/llbit/chunky/world/Chunk.java
+++ b/chunky/src/java/se/llbit/chunky/world/Chunk.java
@@ -16,10 +16,10 @@
*/
package se.llbit.chunky.world;
-import se.llbit.chunky.block.Air;
+import se.llbit.chunky.block.minecraft.Air;
import se.llbit.chunky.block.Block;
-import se.llbit.chunky.block.Lava;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Lava;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.block.legacy.LegacyBlocks;
import se.llbit.chunky.chunk.BlockPalette;
import se.llbit.chunky.chunk.ChunkData;
diff --git a/chunky/src/java/se/llbit/chunky/world/ExtraMaterials.java b/chunky/src/java/se/llbit/chunky/world/ExtraMaterials.java
index 3db87402cc..f34613f649 100644
--- a/chunky/src/java/se/llbit/chunky/world/ExtraMaterials.java
+++ b/chunky/src/java/se/llbit/chunky/world/ExtraMaterials.java
@@ -16,7 +16,7 @@
*/
package se.llbit.chunky.world;
-import se.llbit.chunky.block.Candle;
+import se.llbit.chunky.block.minecraft.Candle;
import se.llbit.chunky.entity.CalibratedSculkSensorAmethyst;
import se.llbit.chunky.entity.Campfire;
import se.llbit.chunky.world.material.CloudMaterial;
diff --git a/chunky/src/java/se/llbit/math/BigPackedOctree.java b/chunky/src/java/se/llbit/math/BigPackedOctree.java
index 0075642350..ff02ea7b5a 100644
--- a/chunky/src/java/se/llbit/math/BigPackedOctree.java
+++ b/chunky/src/java/se/llbit/math/BigPackedOctree.java
@@ -16,9 +16,8 @@
*/
package se.llbit.math;
-import se.llbit.chunky.block.UnknownBlock;
+import se.llbit.chunky.block.minecraft.UnknownBlock;
import se.llbit.chunky.chunk.BlockPalette;
-import se.llbit.chunky.plugin.PluginApi;
import se.llbit.chunky.world.Material;
import java.io.DataInputStream;
diff --git a/chunky/src/java/se/llbit/math/NodeBasedOctree.java b/chunky/src/java/se/llbit/math/NodeBasedOctree.java
index 86f687de1e..6aa12e0419 100644
--- a/chunky/src/java/se/llbit/math/NodeBasedOctree.java
+++ b/chunky/src/java/se/llbit/math/NodeBasedOctree.java
@@ -1,8 +1,8 @@
package se.llbit.math;
import org.apache.commons.math3.util.FastMath;
-import se.llbit.chunky.block.Air;
-import se.llbit.chunky.block.UnknownBlock;
+import se.llbit.chunky.block.minecraft.Air;
+import se.llbit.chunky.block.minecraft.UnknownBlock;
import se.llbit.chunky.chunk.BlockPalette;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/math/Octree.java b/chunky/src/java/se/llbit/math/Octree.java
index 3243d9d725..6a90a3ad94 100644
--- a/chunky/src/java/se/llbit/math/Octree.java
+++ b/chunky/src/java/se/llbit/math/Octree.java
@@ -27,12 +27,12 @@
import it.unimi.dsi.fastutil.io.FastBufferedOutputStream;
import org.apache.commons.math3.util.FastMath;
-import se.llbit.chunky.block.Air;
+import se.llbit.chunky.block.minecraft.Air;
import se.llbit.chunky.block.Block;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.chunk.BlockPalette;
import se.llbit.chunky.model.TexturedBlockModel;
-import se.llbit.chunky.model.WaterModel;
+import se.llbit.chunky.model.minecraft.WaterModel;
import se.llbit.chunky.plugin.PluginApi;
import se.llbit.chunky.renderer.scene.Scene;
import se.llbit.chunky.world.Material;
diff --git a/chunky/src/java/se/llbit/math/PackedOctree.java b/chunky/src/java/se/llbit/math/PackedOctree.java
index 058f6d6e27..d220eb4ac1 100644
--- a/chunky/src/java/se/llbit/math/PackedOctree.java
+++ b/chunky/src/java/se/llbit/math/PackedOctree.java
@@ -17,11 +17,8 @@
package se.llbit.math;
import it.unimi.dsi.fastutil.ints.IntIntMutablePair;
-import it.unimi.dsi.fastutil.ints.IntObjectImmutablePair;
-import org.apache.commons.math3.util.Pair;
-import se.llbit.chunky.block.UnknownBlock;
+import se.llbit.chunky.block.minecraft.UnknownBlock;
import se.llbit.chunky.chunk.BlockPalette;
-import se.llbit.chunky.plugin.PluginApi;
import se.llbit.chunky.world.Material;
import java.io.DataInputStream;
diff --git a/chunky/src/java/se/llbit/math/Ray.java b/chunky/src/java/se/llbit/math/Ray.java
index 064efb6ed2..8539bb9ed7 100644
--- a/chunky/src/java/se/llbit/math/Ray.java
+++ b/chunky/src/java/se/llbit/math/Ray.java
@@ -17,11 +17,10 @@
package se.llbit.math;
import org.apache.commons.math3.util.FastMath;
-import se.llbit.chunky.block.Air;
-import se.llbit.chunky.block.Lava;
-import se.llbit.chunky.block.Water;
+import se.llbit.chunky.block.minecraft.Air;
+import se.llbit.chunky.block.minecraft.Lava;
+import se.llbit.chunky.block.minecraft.Water;
import se.llbit.chunky.renderer.scene.Scene;
-import se.llbit.chunky.world.BlockData;
import se.llbit.chunky.world.Material;
import java.util.Random;
diff --git a/chunky/src/test/se/llbit/chunky/block/SkullTextureTest.java b/chunky/src/test/se/llbit/chunky/block/SkullTextureTest.java
index 5f2f47b836..12e43fa1b8 100644
--- a/chunky/src/test/se/llbit/chunky/block/SkullTextureTest.java
+++ b/chunky/src/test/se/llbit/chunky/block/SkullTextureTest.java
@@ -7,6 +7,7 @@
import java.util.Base64;
import java.util.Collections;
import org.junit.Test;
+import se.llbit.chunky.block.minecraft.Head;
import se.llbit.chunky.renderer.scene.PlayerModel;
import se.llbit.nbt.CompoundTag;
import se.llbit.nbt.ListTag;