mirror of
https://github.com/TeamMidnightDust/Decorative.git
synced 2025-12-16 04:55:10 +01:00
We be slidin'
- Sliding doors will now actually animate sliding thanks to Polymer
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user