From a033558345fb930f888b5d9c18d8eb21177f8871 Mon Sep 17 00:00:00 2001 From: Koboo Date: Sun, 13 Sep 2026 15:43:22 +0200 Subject: [PATCH 1/5] Add methods to RideableBone --- .../model_bones/bone_types/RideableBone.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/main/java/net/worldseed/multipart/model_bones/bone_types/RideableBone.java b/src/main/java/net/worldseed/multipart/model_bones/bone_types/RideableBone.java index b7bdd123..a43d1ca1 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/bone_types/RideableBone.java +++ b/src/main/java/net/worldseed/multipart/model_bones/bone_types/RideableBone.java @@ -6,7 +6,29 @@ import java.util.List; public interface RideableBone extends ModelBone { + /** + * Allows to set the seat rotation independent of the model rotation. + * @param rotateWithModel if the seat should rotate with the model + */ + void setRotateWithModel(boolean rotateWithModel); + + /** + * @return if the seat is rotating independently of the model. + */ + boolean isRotateWithModel(); + + /** + * Delegator of {@link Entity#addPassenger(Entity)} + */ void addPassenger(Entity entity); + + /** + * Delegator of {@link Entity#addPassenger(Entity)} + */ void removePassenger(Entity entity); + + /** + * Delegator of {@link Entity#addPassenger(Entity)} + */ List getPassengers(); } From b4392b750f3d795799a595e97fe1f960393a37b6 Mon Sep 17 00:00:00 2001 From: Koboo Date: Sun, 13 Sep 2026 15:44:01 +0200 Subject: [PATCH 2/5] Implement boolean value rotateWithModel in ModelBoneSeat --- .../model_bones/misc/ModelBoneSeat.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java index c683c7af..945bab3b 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java +++ b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java @@ -22,6 +22,8 @@ public class ModelBoneSeat extends ModelBoneImpl implements RideableBone { + private boolean rotateWithModel = false; + public ModelBoneSeat(Point pivot, String name, Point rotation, GenericModel model, float scale) { super(pivot, name, rotation, model, scale); @@ -137,11 +139,26 @@ public void draw() { this.children.forEach(ModelBone::draw); if (this.offset == null) return; - Pos found = calculatePosition(); + Pos target = calculatePosition(); + if(!rotateWithModel) { + Pos standPos = stand.getPosition(); + stand.teleport(new Pos( + target.x(), target.y(), target.z(), + standPos.yaw(), standPos.pitch() + )); + return; + } + stand.teleport(target); + } - // TODO: needed by minestom? - stand.setView(found.yaw(), found.pitch()); - stand.teleport(found); + @Override + public void setRotateWithModel(boolean rotateWithModel) { + this.rotateWithModel = rotateWithModel; + } + + @Override + public boolean isRotateWithModel() { + return rotateWithModel; } @Override From 4078b0933f5f93f7688c7d18dbcbd17ec94e584b Mon Sep 17 00:00:00 2001 From: Koboo Date: Sun, 13 Sep 2026 15:47:10 +0200 Subject: [PATCH 3/5] Rename boolean to better describe behavior --- .../model_bones/bone_types/RideableBone.java | 6 +++--- .../multipart/model_bones/misc/ModelBoneSeat.java | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/worldseed/multipart/model_bones/bone_types/RideableBone.java b/src/main/java/net/worldseed/multipart/model_bones/bone_types/RideableBone.java index a43d1ca1..6cc8f96a 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/bone_types/RideableBone.java +++ b/src/main/java/net/worldseed/multipart/model_bones/bone_types/RideableBone.java @@ -8,14 +8,14 @@ public interface RideableBone extends ModelBone { /** * Allows to set the seat rotation independent of the model rotation. - * @param rotateWithModel if the seat should rotate with the model + * @param followModelRotation if the seat should rotate with the model */ - void setRotateWithModel(boolean rotateWithModel); + void setFollowModelRotation(boolean followModelRotation); /** * @return if the seat is rotating independently of the model. */ - boolean isRotateWithModel(); + boolean isFollowModelRotation(); /** * Delegator of {@link Entity#addPassenger(Entity)} diff --git a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java index 945bab3b..52f8f01c 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java +++ b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java @@ -22,7 +22,7 @@ public class ModelBoneSeat extends ModelBoneImpl implements RideableBone { - private boolean rotateWithModel = false; + private boolean followModelRotation = false; public ModelBoneSeat(Point pivot, String name, Point rotation, GenericModel model, float scale) { super(pivot, name, rotation, model, scale); @@ -140,7 +140,7 @@ public void draw() { if (this.offset == null) return; Pos target = calculatePosition(); - if(!rotateWithModel) { + if(!followModelRotation) { Pos standPos = stand.getPosition(); stand.teleport(new Pos( target.x(), target.y(), target.z(), @@ -152,13 +152,13 @@ public void draw() { } @Override - public void setRotateWithModel(boolean rotateWithModel) { - this.rotateWithModel = rotateWithModel; + public void setFollowModelRotation(boolean followModelRotation) { + this.followModelRotation = followModelRotation; } @Override - public boolean isRotateWithModel() { - return rotateWithModel; + public boolean isFollowModelRotation() { + return followModelRotation; } @Override From fe9e9aea29142d4192447f5151e5f1616c3cfc52 Mon Sep 17 00:00:00 2001 From: Koboo Date: Sun, 13 Sep 2026 15:47:34 +0200 Subject: [PATCH 4/5] Set default value of followModelRotation to true --- .../net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java index 52f8f01c..5d010564 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java +++ b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java @@ -22,7 +22,7 @@ public class ModelBoneSeat extends ModelBoneImpl implements RideableBone { - private boolean followModelRotation = false; + private boolean followModelRotation = true; public ModelBoneSeat(Point pivot, String name, Point rotation, GenericModel model, float scale) { super(pivot, name, rotation, model, scale); From 20fe6a2dbcfae8b1378a0239ec29a15409390aba Mon Sep 17 00:00:00 2001 From: Koboo Date: Sun, 13 Sep 2026 15:52:55 +0200 Subject: [PATCH 5/5] Cleanup code and reuse target variable to avoid multiple teleport calls --- .../worldseed/multipart/model_bones/misc/ModelBoneSeat.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java index 5d010564..c8f3ac1d 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java +++ b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java @@ -142,11 +142,10 @@ public void draw() { Pos target = calculatePosition(); if(!followModelRotation) { Pos standPos = stand.getPosition(); - stand.teleport(new Pos( + target = new Pos( target.x(), target.y(), target.z(), standPos.yaw(), standPos.pitch() - )); - return; + ); } stand.teleport(target); }