We be slidin'

- Sliding doors will now actually animate sliding thanks to Polymer
This commit is contained in:
Martin Prokoph
2024-07-30 18:14:14 +02:00
parent 200d3dacc3
commit 8b799bbc5b

View File

@@ -13,6 +13,7 @@ import net.minecraft.block.enums.DoorHinge;
import net.minecraft.block.enums.DoubleBlockHalf; import net.minecraft.block.enums.DoubleBlockHalf;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.RotationAxis; import net.minecraft.util.math.RotationAxis;
import net.minecraft.util.math.Vec3d;
import org.joml.Vector3f; import org.joml.Vector3f;
import static eu.midnightdust.motschen.decorative.DecorativeMain.id; import static eu.midnightdust.motschen.decorative.DecorativeMain.id;
@@ -21,14 +22,10 @@ public class ItemDisplaySlidingDoorModel extends BlockModel {
private final ItemDisplayElement main; private final ItemDisplayElement main;
private static ItemStack DOOR_BOTTOM; private static ItemStack DOOR_BOTTOM;
private static ItemStack DOOR_TOP; private static ItemStack DOOR_TOP;
private static ItemStack DOOR_BOTTOM_OPEN;
private static ItemStack DOOR_TOP_OPEN;
public static void initModels() { public static void initModels() {
DOOR_BOTTOM = BaseItemProvider.requestModel(id("block/sliding_door_bottom")); DOOR_BOTTOM = BaseItemProvider.requestModel(id("block/sliding_door_bottom"));
DOOR_TOP = BaseItemProvider.requestModel(id("block/sliding_door_top")); DOOR_TOP = BaseItemProvider.requestModel(id("block/sliding_door_top"));
DOOR_BOTTOM_OPEN = BaseItemProvider.requestModel(id("block/sliding_door_bottom_open"));
DOOR_TOP_OPEN = BaseItemProvider.requestModel(id("block/sliding_door_top_open"));
} }
public ItemDisplaySlidingDoorModel(BlockState state) { public ItemDisplaySlidingDoorModel(BlockState state) {
@@ -37,6 +34,8 @@ public class ItemDisplaySlidingDoorModel extends BlockModel {
this.main.setScale(new Vector3f(2)); this.main.setScale(new Vector3f(2));
this.main.setRightRotation(RotationAxis.POSITIVE_Y.rotationDegrees(getRotation(state))); this.main.setRightRotation(RotationAxis.POSITIVE_Y.rotationDegrees(getRotation(state)));
this.main.setViewRange(DecorativeConfig.viewDistance / 100f); this.main.setViewRange(DecorativeConfig.viewDistance / 100f);
handleSliding(state);
this.main.setTeleportDuration(10);
this.addElement(this.main); this.addElement(this.main);
} }
@@ -46,13 +45,22 @@ public class ItemDisplaySlidingDoorModel extends BlockModel {
var state = this.blockState(); var state = this.blockState();
this.main.setItem(getModel(state)); this.main.setItem(getModel(state));
this.main.setRightRotation(RotationAxis.POSITIVE_Y.rotationDegrees(getRotation(state))); this.main.setRightRotation(RotationAxis.POSITIVE_Y.rotationDegrees(getRotation(state)));
handleSliding(state);
this.tick(); this.tick();
} }
} }
public void handleSliding(BlockState state) {
if (state.get(SlidingDoor.OPEN)) {
var slidingDirection = state.get(SlidingDoor.HINGE) == DoorHinge.RIGHT ?
state.get(SlidingDoor.FACING).rotateYClockwise() :
state.get(SlidingDoor.FACING).rotateYCounterclockwise();
this.main.setOffset(Vec3d.of(slidingDirection.getVector()));
}
else this.main.setOffset(Vec3d.ZERO);
}
public ItemStack getModel(BlockState state) { public ItemStack getModel(BlockState state) {
if (state.get(SlidingDoor.HALF) == DoubleBlockHalf.LOWER) return state.get(SlidingDoor.OPEN) ? DOOR_BOTTOM_OPEN : DOOR_BOTTOM; return (state.get(SlidingDoor.HALF) == DoubleBlockHalf.LOWER) ? DOOR_BOTTOM : DOOR_TOP;
else return state.get(SlidingDoor.OPEN) ? DOOR_TOP_OPEN : DOOR_TOP;
} }
public float getRotation(BlockState state) { public float getRotation(BlockState state) {
return state.get(SlidingDoor.FACING).getHorizontal() * -90 + (state.get(SlidingDoor.HINGE) == DoorHinge.RIGHT ? 90 : -90); return state.get(SlidingDoor.FACING).getHorizontal() * -90 + (state.get(SlidingDoor.HINGE) == DoorHinge.RIGHT ? 90 : -90);