diff --git a/build.gradle b/build.gradle index 21863e3..5309b13 100644 --- a/build.gradle +++ b/build.gradle @@ -133,9 +133,9 @@ repositories { // If you have mod jar dependencies in ./libs, you can declare them as a repository like so. // See https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver - // flatDir { - // dir 'libs' - // } + flatDir { + dir 'libs' + } maven { url "https://cursemaven.com" } @@ -165,12 +165,14 @@ dependencies { // http://www.gradle.org/docs/current/userguide/dependency_management.html annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' - compileOnly fg.deobf("curse.maven:touhou-little-maid-355044:6596061") +// compileOnly fg.deobf("curse.maven:touhou-little-maid-355044:6596061") +// runtimeOnly fg.deobf("curse.maven:touhou-little-maid-355044:6596061") + compileOnly fg.deobf("libs:touhoulittlemaid-${minecraft_version}-release:1.3.7") + runtimeOnly fg.deobf("libs:touhoulittlemaid-${minecraft_version}-release:1.3.7") compileOnly fg.deobf("curse.maven:playerrevive-266890:6048921") compileOnly fg.deobf("curse.maven:creativecore-257814:6383884") compileOnly fg.deobf("curse.maven:natures-compass-252848:4712189") compileOnly fg.deobf("curse.maven:explorers-compass-491794:4712194") - runtimeOnly fg.deobf("curse.maven:touhou-little-maid-355044:6596061") runtimeOnly fg.deobf("curse.maven:maid-storage-manager-1210244:6455832") runtimeOnly fg.deobf("curse.maven:playerrevive-266890:6048921") runtimeOnly fg.deobf("curse.maven:creativecore-257814:6383884") diff --git a/src/main/java/studio/fantasyit/maid_useful_task/UsefulTaskExtension.java b/src/main/java/studio/fantasyit/maid_useful_task/UsefulTaskExtension.java index 057f8e7..3c750bb 100644 --- a/src/main/java/studio/fantasyit/maid_useful_task/UsefulTaskExtension.java +++ b/src/main/java/studio/fantasyit/maid_useful_task/UsefulTaskExtension.java @@ -5,6 +5,7 @@ import com.github.tartaricacid.touhoulittlemaid.api.LittleMaidExtension; import com.github.tartaricacid.touhoulittlemaid.api.entity.ai.IExtraMaidBrain; import com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.ExtraMaidBrainManager; import com.github.tartaricacid.touhoulittlemaid.entity.data.TaskDataRegister; +import com.github.tartaricacid.touhoulittlemaid.entity.item.control.BroomControlManager; import com.github.tartaricacid.touhoulittlemaid.entity.task.TaskManager; import net.minecraft.world.entity.ai.memory.MemoryModuleType; import studio.fantasyit.maid_useful_task.compat.PlayerRevive; @@ -15,6 +16,7 @@ import studio.fantasyit.maid_useful_task.registry.MemoryModuleRegistry; import studio.fantasyit.maid_useful_task.task.MaidLocateTask; import studio.fantasyit.maid_useful_task.task.MaidRevivePlayerTask; import studio.fantasyit.maid_useful_task.task.MaidTreeTask; +import studio.fantasyit.maid_useful_task.vehicle.broom.BroomController; import java.util.List; @@ -60,4 +62,9 @@ public class UsefulTaskExtension implements ILittleMaid { MaidReviveConfig.KEY = register.register(new MaidReviveConfig()), MaidReviveConfig.Data::getDefault); } + + @Override + public void registerBroomControl(BroomControlManager register) { + register.register(BroomController::new); + } } diff --git a/src/main/java/studio/fantasyit/maid_useful_task/behavior/common/DestoryBlockMoveBehavior.java b/src/main/java/studio/fantasyit/maid_useful_task/behavior/common/DestoryBlockMoveBehavior.java index 0df32dc..0e2b71c 100644 --- a/src/main/java/studio/fantasyit/maid_useful_task/behavior/common/DestoryBlockMoveBehavior.java +++ b/src/main/java/studio/fantasyit/maid_useful_task/behavior/common/DestoryBlockMoveBehavior.java @@ -81,9 +81,9 @@ public class DestoryBlockMoveBehavior extends MaidCenterMoveToBlockTask { protected @NotNull MaidPathFindingBFS getOrCreateArrivalMap(@NotNull ServerLevel worldIn, @NotNull EntityMaid maid) { if (this.pathfindingBFS == null) if (maid.hasRestriction()) - this.pathfindingBFS = new MaidPathFindingBFS(maid.getNavigation().getNodeEvaluator(), worldIn, maid, 14, (int) maid.getRestrictRadius()); + this.pathfindingBFS = new MaidPathFindingBFS(maid.getNavigation().getNodeEvaluator(), worldIn, maid, (int) maid.getRestrictRadius(), 7); else - this.pathfindingBFS = new MaidPathFindingBFS(maid.getNavigation().getNodeEvaluator(), worldIn, maid, 14); + this.pathfindingBFS = new MaidPathFindingBFS(maid.getNavigation().getNodeEvaluator(), worldIn, maid, 7, 7); return this.pathfindingBFS; } diff --git a/src/main/java/studio/fantasyit/maid_useful_task/behavior/common/PlaceBlockMoveBehavior.java b/src/main/java/studio/fantasyit/maid_useful_task/behavior/common/PlaceBlockMoveBehavior.java index 4b519e6..e465c6d 100644 --- a/src/main/java/studio/fantasyit/maid_useful_task/behavior/common/PlaceBlockMoveBehavior.java +++ b/src/main/java/studio/fantasyit/maid_useful_task/behavior/common/PlaceBlockMoveBehavior.java @@ -89,9 +89,9 @@ public class PlaceBlockMoveBehavior extends MaidCenterMoveToBlockTask { protected @NotNull MaidPathFindingBFS getOrCreateArrivalMap(@NotNull ServerLevel worldIn, @NotNull EntityMaid maid) { if (this.pathfindingBFS == null) if (maid.hasRestriction()) - this.pathfindingBFS = new MaidPathFindingBFS(maid.getNavigation().getNodeEvaluator(), worldIn, maid, 14, (int) maid.getRestrictRadius()); + this.pathfindingBFS = new MaidPathFindingBFS(maid.getNavigation().getNodeEvaluator(), worldIn, maid, (int) maid.getRestrictRadius(), 7); else - this.pathfindingBFS = new MaidPathFindingBFS(maid.getNavigation().getNodeEvaluator(), worldIn, maid, 14); + this.pathfindingBFS = new MaidPathFindingBFS(maid.getNavigation().getNodeEvaluator(), worldIn, maid, 7, 7); return this.pathfindingBFS; } diff --git a/src/main/java/studio/fantasyit/maid_useful_task/mixin/VehicleBroomMixin.java b/src/main/java/studio/fantasyit/maid_useful_task/mixin/VehicleBroomMixin.java deleted file mode 100644 index 9e4dac4..0000000 --- a/src/main/java/studio/fantasyit/maid_useful_task/mixin/VehicleBroomMixin.java +++ /dev/null @@ -1,103 +0,0 @@ -package studio.fantasyit.maid_useful_task.mixin; - -import com.github.tartaricacid.touhoulittlemaid.entity.item.AbstractEntityFromItem; -import com.github.tartaricacid.touhoulittlemaid.entity.item.EntityBroom; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.level.Level; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import studio.fantasyit.maid_useful_task.vehicle.IVirtualControl; -import studio.fantasyit.maid_useful_task.vehicle.MaidVehicleControlType; - -@Mixin(EntityBroom.class) -abstract public class VehicleBroomMixin extends AbstractEntityFromItem implements IVirtualControl { - public VehicleBroomMixin(EntityType type, Level worldIn) { - super(type, worldIn); - } - - @Unique - public MaidVehicleControlType maid_useful_tasks$vc_type = MaidVehicleControlType.NONE; - @Unique - public float maid_useful_tasks$vc_xRot; - @Unique - public float maid_useful_tasks$vc_yRot; - @Unique - public float maid_useful_tasks$vc_speed; - - @Override - public void maid_useful_tasks$setControlParam(float xRot, float yRot, float speed, MaidVehicleControlType type) { - this.maid_useful_tasks$vc_xRot = xRot; - this.maid_useful_tasks$vc_yRot = yRot; - this.maid_useful_tasks$vc_speed = speed; - this.maid_useful_tasks$vc_type = type; - } - - @Override - public CompoundTag maid_useful_tasks$getControlParam() { - CompoundTag result = new CompoundTag(); - result.putFloat("xRot", maid_useful_tasks$vc_xRot); - result.putFloat("yRot", maid_useful_tasks$vc_yRot); - result.putFloat("speed", maid_useful_tasks$vc_speed); - result.putString("type", maid_useful_tasks$vc_type.name()); - return result; - } - - @Override - public void maid_useful_tasks$setControlParam(CompoundTag target) { - if (target.contains("type")) { - this.maid_useful_tasks$vc_type = MaidVehicleControlType.valueOf(target.getString("type")); - } - if (target.contains("xRot")) { - this.maid_useful_tasks$vc_xRot = target.getFloat("xRot"); - } - if (target.contains("yRot")) { - this.maid_useful_tasks$vc_yRot = target.getFloat("yRot"); - } - if (target.contains("speed")) { - this.maid_useful_tasks$vc_speed = target.getFloat("speed"); - } - } - - @Override - public void maid_useful_tasks$stopControl() { - this.maid_useful_tasks$vc_type = MaidVehicleControlType.NONE; - } - - @Inject(method = "tickRidden", at = @At(value = "TAIL")) - public void maid_useful_tasks$tickRidden(CallbackInfo ci) { - if (maid_useful_tasks$vc_type == MaidVehicleControlType.NONE) { - return; - } - this.setRot(maid_useful_tasks$vc_yRot, maid_useful_tasks$vc_xRot); - } - - @ModifyVariable(method = "travel", at = @At(value = "STORE"), name = "strafe") - float maid_useful_tasks$travel_s(float strafe) { - if (maid_useful_tasks$vc_type != MaidVehicleControlType.FULL) { - return strafe; - } - return 0; - } - - @ModifyVariable(method = "travel", at = @At(value = "STORE"), name = "vertical") - float maid_useful_tasks$travel_v(float vertical) { - if (maid_useful_tasks$vc_type != MaidVehicleControlType.FULL) { - return vertical; - } - return -(maid_useful_tasks$vc_xRot - 10.0F) / 22.5F; - } - - @ModifyVariable(method = "travel", at = @At(value = "STORE"), name = "forward") - float maid_useful_tasks$travel_f(float forward) { - if (maid_useful_tasks$vc_type != MaidVehicleControlType.FULL) { - return forward; - } - return maid_useful_tasks$vc_speed; - } -} diff --git a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/IVirtualControl.java b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/IVirtualControl.java index 7602a30..1da74ed 100644 --- a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/IVirtualControl.java +++ b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/IVirtualControl.java @@ -3,8 +3,11 @@ package studio.fantasyit.maid_useful_task.vehicle; import net.minecraft.nbt.CompoundTag; public interface IVirtualControl { - void maid_useful_tasks$setControlParam(float xRot, float yRot, float speed,MaidVehicleControlType type); + void maid_useful_tasks$setControlParam(float xRot, float yRot, float speed, MaidVehicleControlType type); + void maid_useful_tasks$stopControl(); + CompoundTag maid_useful_tasks$getControlParam(); + void maid_useful_tasks$setControlParam(CompoundTag target); } diff --git a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/MaidVehicleManager.java b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/MaidVehicleManager.java index 230cbec..d8a9147 100644 --- a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/MaidVehicleManager.java +++ b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/MaidVehicleManager.java @@ -1,12 +1,11 @@ package studio.fantasyit.maid_useful_task.vehicle; import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; -import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraftforge.network.PacketDistributor; import studio.fantasyit.maid_useful_task.network.MaidSyncVehiclePacket; import studio.fantasyit.maid_useful_task.network.Network; -import studio.fantasyit.maid_useful_task.util.MemoryUtil; +import studio.fantasyit.maid_useful_task.vehicle.broom.VehicleBroom; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/VehicleBroom.java b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/VehicleBroom.java deleted file mode 100644 index cdb8770..0000000 --- a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/VehicleBroom.java +++ /dev/null @@ -1,60 +0,0 @@ -package studio.fantasyit.maid_useful_task.vehicle; - -import com.github.tartaricacid.touhoulittlemaid.entity.item.EntityBroom; -import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Rotations; -import net.minecraft.nbt.CompoundTag; -import org.jetbrains.annotations.Nullable; -import studio.fantasyit.maid_useful_task.util.RotUtil; - -public class VehicleBroom extends AbstractMaidControllableVehicle { - @Override - public boolean isMaidOnThisVehicle(EntityMaid maid) { - return maid.getVehicle() instanceof EntityBroom; - } - - @Override - public void maidControlVehicle(EntityMaid maid, MaidVehicleControlType type, BlockPos target) { - if (maid.level().isClientSide) return; - if (maid.getVehicle() instanceof EntityBroom vehicle) { - if (type == MaidVehicleControlType.NONE) { - ((IVirtualControl) vehicle).maid_useful_tasks$setControlParam(0, 0, 0, type); - return; - } - double xzDistance = maid.distanceToSqr(target.getX(), maid.getY(), target.getZ()); - double finalXRot = vehicle.getXRot(); - double finalYRot = vehicle.getYRot(); - double finalSpeed = 0; - if (vehicle.isInWater()) { - finalXRot = -10; - } else if (xzDistance < Math.pow(maid.getY() - maid.level().getSeaLevel(), 2)) { - if (maid.getY() - maid.level().getSeaLevel() < 50 || vehicle.onGround()) - finalXRot = 15; - else - finalXRot = 60; - } else if (maid.getY() < 100) { - finalXRot = -50; - } else if (maid.getY() > 160) { - finalXRot = 15; - } else { - finalXRot = 0; - } - - finalYRot = RotUtil.getYRot(maid.position(), target.getCenter()); - - finalSpeed = type == MaidVehicleControlType.FULL ? 3.0 : 0; - if (xzDistance < 5 * 5 && (vehicle.onGround() || vehicle.isInWater())) - finalSpeed = 0; - - ((IVirtualControl) vehicle).maid_useful_tasks$setControlParam((float) finalXRot, (float) finalYRot, (float) finalSpeed, type); - } - } - - @Override - public void maidStopControlVehicle(EntityMaid maid) { - EntityBroom vehicle = (EntityBroom) maid.getVehicle(); - if (vehicle instanceof IVirtualControl ivc) - ivc.maid_useful_tasks$stopControl(); - } -} diff --git a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/BroomControlParamStore.java b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/BroomControlParamStore.java new file mode 100644 index 0000000..9b07e48 --- /dev/null +++ b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/BroomControlParamStore.java @@ -0,0 +1,52 @@ +package studio.fantasyit.maid_useful_task.vehicle.broom; + +import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; +import net.minecraft.nbt.CompoundTag; +import studio.fantasyit.maid_useful_task.vehicle.MaidVehicleControlType; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class BroomControlParamStore { + public record BroomControlParam(float xRot, float yRot, float vertical, float forward, + MaidVehicleControlType type) { + public static BroomControlParam fromNbt(CompoundTag tag) { + return new BroomControlParam( + tag.getFloat("xRot"), + tag.getFloat("yRot"), + tag.getFloat("vertical"), + tag.getFloat("forward"), + MaidVehicleControlType.valueOf(tag.getString("type")) + ); + } + + public CompoundTag toNbt() { + CompoundTag tag = new CompoundTag(); + tag.putFloat("xRot", xRot); + tag.putFloat("yRot", yRot); + tag.putFloat("vertical", vertical); + tag.putFloat("forward", forward); + tag.putString("type", type.name()); + return tag; + } + } + + private static final BroomControlParam NONE = new BroomControlParam(0, 0, 0, 0, MaidVehicleControlType.NONE); + + private static final Map store = new HashMap<>(); + + public static void setControlParam(EntityMaid maid, BroomControlParam param) { + store.put(maid.getUUID(), param); + } + + public static BroomControlParam getControlParam(EntityMaid maid) { + if (!store.containsKey(maid.getUUID())) + return NONE; + return store.get(maid.getUUID()); + } + + public static void removeControlParam(EntityMaid maid) { + store.remove(maid.getUUID()); + } +} diff --git a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/BroomController.java b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/BroomController.java new file mode 100644 index 0000000..590424a --- /dev/null +++ b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/BroomController.java @@ -0,0 +1,70 @@ +package studio.fantasyit.maid_useful_task.vehicle.broom; + +import com.github.tartaricacid.touhoulittlemaid.api.entity.IBroomControl; +import com.github.tartaricacid.touhoulittlemaid.entity.item.EntityBroom; +import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; +import studio.fantasyit.maid_useful_task.vehicle.MaidVehicleControlType; + +public class BroomController implements IBroomControl { + private final EntityBroom broom; + + public BroomController(EntityBroom broom) { + this.broom = broom; + } + + @Override + public int getPriority() { + return 10; + } + + @Override + public boolean inControl(Player player, EntityMaid entityMaid) { + return BroomControlParamStore.getControlParam(entityMaid).type() != MaidVehicleControlType.NONE; + } + + @Override + public void travel(Player player, EntityMaid entityMaid) { + BroomControlParamStore.BroomControlParam param = BroomControlParamStore.getControlParam(entityMaid); + + float forward = 0; + float strafe = 0; + float vertical = param.vertical(); + if (param.type() == MaidVehicleControlType.FULL) { + forward = param.forward() / 15.0f; + } else { + boolean keyForward = player.zza > 0; + boolean keyBack = player.zza < 0; + boolean keyLeft = player.xxa > 0; + boolean keyRight = player.xxa < 0; + + if (keyForward || keyBack || keyLeft || keyRight) { + strafe = keyLeft ? 0.2f : (keyRight ? -0.2f : 0); + forward = keyForward ? 0.375f : (keyBack ? -0.2f : 0); + } else { + vertical = 0; + } + } + //来自PlayerBroomControl + double playerSpeed = player.getAttributeValue(Attributes.MOVEMENT_SPEED); + double speed = Math.max(playerSpeed - 0.1, 0) * 2.5 + 0.1; + Vec3 targetMotion = new Vec3(strafe, vertical, forward).scale(speed * 20); + targetMotion = targetMotion.yRot((float) (-broom.getYRot() * Math.PI / 180.0)); + + // 插值到目标速度,而不是直接累加 + Vec3 currentMotion = broom.getDeltaMovement(); + Vec3 newMotion = currentMotion.lerp(targetMotion, 0.25f); + broom.setDeltaMovement(newMotion); + } + + + @Override + public void tickRot(Player player, EntityMaid entityMaid) { + BroomControlParamStore.BroomControlParam param = BroomControlParamStore.getControlParam(entityMaid); + + broom.yRotO = broom.yBodyRot = broom.yHeadRot = broom.getYRot(); + broom.setRot(param.yRot(), param.xRot()); + } +} diff --git a/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/VehicleBroom.java b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/VehicleBroom.java new file mode 100644 index 0000000..f9f83d0 --- /dev/null +++ b/src/main/java/studio/fantasyit/maid_useful_task/vehicle/broom/VehicleBroom.java @@ -0,0 +1,79 @@ +package studio.fantasyit.maid_useful_task.vehicle.broom; + +import com.github.tartaricacid.touhoulittlemaid.entity.item.EntityBroom; +import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import org.jetbrains.annotations.Nullable; +import studio.fantasyit.maid_useful_task.util.RotUtil; +import studio.fantasyit.maid_useful_task.vehicle.AbstractMaidControllableVehicle; +import studio.fantasyit.maid_useful_task.vehicle.MaidVehicleControlType; + +public class VehicleBroom extends AbstractMaidControllableVehicle { + @Override + public boolean isMaidOnThisVehicle(EntityMaid maid) { + return maid.getVehicle() instanceof EntityBroom; + } + + @Override + public void maidControlVehicle(EntityMaid maid, MaidVehicleControlType type, BlockPos target) { + if (maid.level().isClientSide) return; + if (maid.getVehicle() instanceof EntityBroom vehicle) { + if (type == MaidVehicleControlType.NONE) { + BroomControlParamStore.removeControlParam(maid); + return; + } + double xzDistance = maid.distanceToSqr(target.getX(), maid.getY(), target.getZ()); + double finalXRot = vehicle.getXRot(); + double finalYRot = vehicle.getYRot(); + double finalVertical = 0; + double finalForward; + if (vehicle.isInWater()) { + finalXRot = 0; + finalVertical = 0.1; + } else if (xzDistance < Math.pow(maid.getY() - maid.level().getSeaLevel(), 2)) { + finalXRot = 0; + if (maid.getY() - maid.level().getSeaLevel() < 50 || vehicle.onGround()) { + finalXRot = 5; + finalVertical = -0.2; + } else { + finalXRot = 50; + finalVertical = -0.35; + } + } else if (maid.getY() < 100) { + finalXRot = -50; + finalVertical = 0.2; + } else if (maid.getY() > 160) { + finalXRot = 0; + finalVertical = -0.1; + } else { + finalXRot = 0; + finalVertical = 0.05; + } + + finalYRot = RotUtil.getYRot(maid.position(), target.getCenter()); + + finalForward = type == MaidVehicleControlType.FULL ? 3.0 : 0; + if (xzDistance < 5 * 5) + finalForward = 0; + + BroomControlParamStore.setControlParam(maid, new BroomControlParamStore.BroomControlParam((float) finalXRot, (float) finalYRot, (float) finalVertical, (float) finalForward, type)); + } + } + + @Override + public void maidStopControlVehicle(EntityMaid maid) { + BroomControlParamStore.removeControlParam(maid); + } + + @Override + public void syncVehicleParameter(EntityMaid maid, CompoundTag tag) { + BroomControlParamStore.BroomControlParam broomControlParam = BroomControlParamStore.BroomControlParam.fromNbt(tag); + BroomControlParamStore.setControlParam(maid, broomControlParam); + } + + @Override + public @Nullable CompoundTag getSyncVehicleParameter(EntityMaid maid) { + return BroomControlParamStore.getControlParam(maid).toNbt(); + } +} diff --git a/src/main/resources/maid_useful_task.mixins.json b/src/main/resources/maid_useful_task.mixins.json index fa14687..9977e89 100644 --- a/src/main/resources/maid_useful_task.mixins.json +++ b/src/main/resources/maid_useful_task.mixins.json @@ -8,8 +8,7 @@ "FollowMaidMixin", "MaidCheckPickupItem", "MaidMoveControlMixin", - "MaidRunOneMixin", - "VehicleBroomMixin" + "MaidRunOneMixin" ], "client": [ ],