diff --git a/src/main/java/org/betterx/bclib/client/render/BoatRenderer.java b/src/main/java/org/betterx/bclib/client/render/BoatRenderer.java index 7327caea..ca8dd84c 100644 --- a/src/main/java/org/betterx/bclib/client/render/BoatRenderer.java +++ b/src/main/java/org/betterx/bclib/client/render/BoatRenderer.java @@ -6,7 +6,8 @@ import org.betterx.bclib.items.boat.CustomBoatTypeOverride; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; -import net.minecraft.client.model.BoatModel; +import net.minecraft.client.model.ListModel; +import net.minecraft.client.model.WaterPatchModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -54,7 +55,7 @@ public class BoatRenderer { )); } ResourceLocation resourceLocation = hasChest ? type.chestBoatTexture : type.boatTexture; - BoatModel boatModel = type.getBoatModel(hasChest); + ListModel boatModel = type.getBoatModel(hasChest); poseStack.scale(-1.0f, -1.0f, 1.0f); poseStack.mulPose(Axis.YP.rotationDegrees(90.0f)); boatModel.setupAnim(boat, g, 0.0f, -0.1f, 0.0f, 0.0f); @@ -66,7 +67,9 @@ public class BoatRenderer { ); if (!boat.isUnderWater()) { VertexConsumer vertexConsumer2 = multiBufferSource.getBuffer(RenderType.waterMask()); - boatModel.waterPatch().render(poseStack, vertexConsumer2, i, OverlayTexture.NO_OVERLAY); + if (boatModel instanceof WaterPatchModel waterPatchModel) { + waterPatchModel.waterPatch().render(poseStack, vertexConsumer2, i, OverlayTexture.NO_OVERLAY); + } } poseStack.popPose(); diff --git a/src/main/java/org/betterx/bclib/complexmaterials/WoodenComplexMaterial.java b/src/main/java/org/betterx/bclib/complexmaterials/WoodenComplexMaterial.java index 7446ee57..b9cdd2b5 100644 --- a/src/main/java/org/betterx/bclib/complexmaterials/WoodenComplexMaterial.java +++ b/src/main/java/org/betterx/bclib/complexmaterials/WoodenComplexMaterial.java @@ -49,7 +49,7 @@ public class WoodenComplexMaterial extends ComplexMaterialSet boatModel, chestBoatModel; private BoatItem boat, chestBoat; + public final boolean isRaft; BoatTypeOverride(String modID, String name, Block planks) { + this(modID, name, planks, false); + } + + BoatTypeOverride(String modID, String name, Block planks, boolean isRaft) { this.id = new ResourceLocation(modID, name); this.name = name; this.planks = planks; @@ -47,6 +52,7 @@ public final class BoatTypeOverride { if (nr >= 0 && nr <= 1000) nr += 1000; } this.ordinal = nr; + this.isRaft = isRaft; if (BCLib.isClient()) { this.boatModelName = createBoatModelName(id.getNamespace(), id.getPath()); this.chestBoatModelName = createChestBoatModelName(id.getNamespace(), id.getPath()); @@ -63,15 +69,20 @@ public final class BoatTypeOverride { } @Environment(value = EnvType.CLIENT) - public BoatModel getBoatModel(boolean chest) { + public ListModel getBoatModel(boolean chest) { return chest ? chestBoatModel : boatModel; } @Environment(value = EnvType.CLIENT) public void createBoatModels(EntityRendererProvider.Context context) { if (BCLib.isClient() && boatModel == null) { - boatModel = new BoatModel(context.bakeLayer(boatModelName)); - chestBoatModel = new ChestBoatModel(context.bakeLayer(chestBoatModelName)); + if (isRaft) { + boatModel = new RaftModel(context.bakeLayer(boatModelName)); + chestBoatModel = new ChestRaftModel(context.bakeLayer(chestBoatModelName)); + } else { + boatModel = new BoatModel(context.bakeLayer(boatModelName)); + chestBoatModel = new ChestBoatModel(context.bakeLayer(chestBoatModelName)); + } } } @@ -115,7 +126,11 @@ public final class BoatTypeOverride { } public static BoatTypeOverride create(String modID, String name, Block planks) { - BoatTypeOverride t = new BoatTypeOverride(modID, name, planks); + return create(modID, name, planks, false); + } + + public static BoatTypeOverride create(String modID, String name, Block planks, boolean isRaft) { + BoatTypeOverride t = new BoatTypeOverride(modID, name, planks, isRaft); return t; } diff --git a/src/main/java/org/betterx/bclib/registry/BaseBlockEntityRenders.java b/src/main/java/org/betterx/bclib/registry/BaseBlockEntityRenders.java index 0b904c35..a9e20a83 100644 --- a/src/main/java/org/betterx/bclib/registry/BaseBlockEntityRenders.java +++ b/src/main/java/org/betterx/bclib/registry/BaseBlockEntityRenders.java @@ -5,6 +5,8 @@ import org.betterx.bclib.items.boat.BoatTypeOverride; import net.minecraft.client.model.BoatModel; import net.minecraft.client.model.ChestBoatModel; +import net.minecraft.client.model.ChestRaftModel; +import net.minecraft.client.model.RaftModel; import net.minecraft.client.model.geom.builders.LayerDefinition; import net.fabricmc.api.EnvType; @@ -19,10 +21,15 @@ public class BaseBlockEntityRenders { LayerDefinition boatModel = BoatModel.createBodyModel(); LayerDefinition chestBoatModel = ChestBoatModel.createBodyModel(); + LayerDefinition raftModel = RaftModel.createBodyModel(); + LayerDefinition chestRaftModel = ChestRaftModel.createBodyModel(); BoatTypeOverride.values().forEach(type -> { - EntityModelLayerRegistry.registerModelLayer(type.boatModelName, () -> boatModel); - EntityModelLayerRegistry.registerModelLayer(type.chestBoatModelName, () -> chestBoatModel); + EntityModelLayerRegistry.registerModelLayer(type.boatModelName, () -> type.isRaft ? raftModel : boatModel); + EntityModelLayerRegistry.registerModelLayer( + type.chestBoatModelName, + () -> type.isRaft ? chestRaftModel : chestBoatModel + ); }); } }