From fb098a016e4e35b92a4f4ebc44a195ab468de100 Mon Sep 17 00:00:00 2001 From: Goby56 <60710855+Goby56@users.noreply.github.com> Date: Fri, 23 Aug 2024 17:51:45 +0200 Subject: [PATCH] okay now its height is correct --- .../com/goby56/wakes/debug/DebugCommand.java | 1 - .../com/goby56/wakes/duck/ProducesWake.java | 4 ++-- .../goby56/wakes/mixin/LilyPadFallMixin.java | 3 ++- .../goby56/wakes/mixin/WakeSpawnerMixin.java | 13 ++++++------ .../particle/custom/SplashCloudParticle.java | 4 ++-- .../particle/custom/SplashPlaneParticle.java | 3 +-- .../com/goby56/wakes/simulation/WakeNode.java | 2 -- .../com/goby56/wakes/utils/WakesUtils.java | 20 ++----------------- 8 files changed, 15 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/goby56/wakes/debug/DebugCommand.java b/src/main/java/com/goby56/wakes/debug/DebugCommand.java index 077855c..2562524 100644 --- a/src/main/java/com/goby56/wakes/debug/DebugCommand.java +++ b/src/main/java/com/goby56/wakes/debug/DebugCommand.java @@ -42,7 +42,6 @@ public static int spawnWakeNode(CommandContext cmdCtx if (!cmdCtx.getSource().getWorld().getFluidState(new BlockPos((int) pos.x, (int) Math.floor(pos.y), (int) pos.z)).isIn(FluidTags.WATER)) return 0; WakeNode node = new WakeNode(result.getPos(), 100); node.floodLevel = cmdCtx.getArgument("flood_level", Integer.class); - node.spawner = "Command"; WakeHandler.getInstance().insert(node); return 1; } diff --git a/src/main/java/com/goby56/wakes/duck/ProducesWake.java b/src/main/java/com/goby56/wakes/duck/ProducesWake.java index b3d5e0e..b3921f3 100644 --- a/src/main/java/com/goby56/wakes/duck/ProducesWake.java +++ b/src/main/java/com/goby56/wakes/duck/ProducesWake.java @@ -5,8 +5,8 @@ public interface ProducesWake { boolean onWaterSurface(); - Integer producingWaterLevel(); - void setProducingHeight(int y); + Float producingWaterLevel(); + void setProducingHeight(float h); Vec3d getPrevPos(); void setPrevPos(Vec3d pos); Vec3d getNumericalVelocity(); diff --git a/src/main/java/com/goby56/wakes/mixin/LilyPadFallMixin.java b/src/main/java/com/goby56/wakes/mixin/LilyPadFallMixin.java index 9ff8929..680a84a 100644 --- a/src/main/java/com/goby56/wakes/mixin/LilyPadFallMixin.java +++ b/src/main/java/com/goby56/wakes/mixin/LilyPadFallMixin.java @@ -3,6 +3,7 @@ import com.goby56.wakes.WakesClient; import com.goby56.wakes.config.enums.EffectSpawningRule; import com.goby56.wakes.duck.ProducesWake; +import com.goby56.wakes.simulation.WakeNode; import com.goby56.wakes.utils.WakesUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -27,7 +28,7 @@ public void onLandedUpon(World world, BlockState state, BlockPos pos, Entity ent EffectSpawningRule rule = WakesUtils.getEffectRuleFromSource(entity); ProducesWake wakeProducer = (ProducesWake) entity; if (rule.simulateWakes) { - wakeProducer.setProducingHeight(pos.getY()); + wakeProducer.setProducingHeight(pos.getY() + WakeNode.WATER_OFFSET); WakesUtils.placeFallSplash(entity); } } diff --git a/src/main/java/com/goby56/wakes/mixin/WakeSpawnerMixin.java b/src/main/java/com/goby56/wakes/mixin/WakeSpawnerMixin.java index b3e42fb..76ee3b0 100644 --- a/src/main/java/com/goby56/wakes/mixin/WakeSpawnerMixin.java +++ b/src/main/java/com/goby56/wakes/mixin/WakeSpawnerMixin.java @@ -34,7 +34,7 @@ public abstract class WakeSpawnerMixin implements ProducesWake { @Unique private Vec3d numericalVelocity = Vec3d.ZERO; @Unique private double horizontalNumericalVelocity = 0; @Unique private double verticalNumericalVelocity = 0; - @Unique private Integer producingWaterLevel = null; + @Unique private Float producingWaterLevel = null; @Unique private SplashPlaneParticle splashPlane; @Unique private boolean hasRecentlyTeleported = false; @@ -68,13 +68,13 @@ public void setPrevPos(Vec3d pos) { } @Override - public Integer producingWaterLevel() { + public Float producingWaterLevel() { return this.producingWaterLevel; } @Override - public void setProducingHeight(int y) { - this.producingWaterLevel = y; + public void setProducingHeight(float h) { + this.producingWaterLevel = h; } @Override @@ -113,8 +113,7 @@ private void tick(CallbackInfo info) { } if (this.onWaterSurface && !this.hasRecentlyTeleported) { - if (this.producingWaterLevel == null) - this.producingWaterLevel = (int) Math.floor(WakesUtils.getWaterLevel(this.world, thisEntity)); + this.producingWaterLevel = WakesUtils.getWaterLevel(this.world, thisEntity); Vec3d currPos = new Vec3d(thisEntity.getX(), this.producingWaterLevel, thisEntity.getZ()); @@ -138,7 +137,7 @@ private void onSwimmingStart(CallbackInfo ci) { EffectSpawningRule rule = WakesUtils.getEffectRuleFromSource(thisEntity); if (rule.simulateWakes) { if (this.producingWaterLevel == null) - this.producingWaterLevel = (int) Math.floor(WakesUtils.getWaterLevel(this.world, thisEntity)); + this.producingWaterLevel = WakesUtils.getWaterLevel(this.world, thisEntity); WakesUtils.placeFallSplash(((Entity) (Object) this)); } // TODO ADD WAKE WHEN GETTING OUT OF WATER diff --git a/src/main/java/com/goby56/wakes/particle/custom/SplashCloudParticle.java b/src/main/java/com/goby56/wakes/particle/custom/SplashCloudParticle.java index f63245a..20aa944 100644 --- a/src/main/java/com/goby56/wakes/particle/custom/SplashCloudParticle.java +++ b/src/main/java/com/goby56/wakes/particle/custom/SplashCloudParticle.java @@ -44,7 +44,7 @@ public void tick() { if (this.owner instanceof ProducesWake wake) { SplashPlaneParticle splashPlane = wake.getSplashPlane(); - if (splashPlane == null || wake.producingWaterLevel() == null) { + if (splashPlane == null) { this.markDead(); return; } @@ -55,7 +55,7 @@ public void tick() { Vec3d particleOffset = new Vec3d(-splashPlane.direction.z, 0f, splashPlane.direction.x).multiply(this.offset * this.owner.getWidth() / 2f); Vec3d pos = splashPlane.getPos().add(particleOffset).add(splashPlane.direction.multiply(-0.2f)); - this.setPos(pos.x, wake.producingWaterLevel(), pos.z); + this.setPos(pos.x, pos.y, pos.z); } } diff --git a/src/main/java/com/goby56/wakes/particle/custom/SplashPlaneParticle.java b/src/main/java/com/goby56/wakes/particle/custom/SplashPlaneParticle.java index 13a47c8..c87d554 100644 --- a/src/main/java/com/goby56/wakes/particle/custom/SplashPlaneParticle.java +++ b/src/main/java/com/goby56/wakes/particle/custom/SplashPlaneParticle.java @@ -5,6 +5,7 @@ import com.goby56.wakes.particle.ModParticles; import com.goby56.wakes.particle.WithOwnerParticleType; import com.goby56.wakes.render.SplashPlaneRenderer; +import com.goby56.wakes.simulation.WakeNode; import com.goby56.wakes.utils.WakesUtils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -28,7 +29,6 @@ public class SplashPlaneParticle extends Particle { Entity owner; float yaw; float prevYaw; - int ticksSinceSplash = 0; Vec3d direction = Vec3d.ZERO; @@ -68,7 +68,6 @@ public void tick() { } private void aliveTick(ProducesWake wakeProducer) { - this.ticksSinceSplash++; if (this.owner instanceof BoatEntity) { this.yaw = -this.owner.getYaw(); } else { diff --git a/src/main/java/com/goby56/wakes/simulation/WakeNode.java b/src/main/java/com/goby56/wakes/simulation/WakeNode.java index 05db054..4867c81 100644 --- a/src/main/java/com/goby56/wakes/simulation/WakeNode.java +++ b/src/main/java/com/goby56/wakes/simulation/WakeNode.java @@ -40,8 +40,6 @@ public class WakeNode { public float t = 0; public int floodLevel; - public String spawner = "Self"; - //TODO MORE GENERALIZED CONSTRUCTOR public WakeNode(Vec3d position, int initialStrength) { this.initValues(); diff --git a/src/main/java/com/goby56/wakes/utils/WakesUtils.java b/src/main/java/com/goby56/wakes/utils/WakesUtils.java index 79160fb..fd7a8d4 100644 --- a/src/main/java/com/goby56/wakes/utils/WakesUtils.java +++ b/src/main/java/com/goby56/wakes/utils/WakesUtils.java @@ -38,8 +38,7 @@ public static void placeFallSplash(Entity entity) { return; } - for (WakeNode node : WakeNode.Factory.splashNodes(entity, ((ProducesWake) entity).producingWaterLevel())) { - node.spawner = entity.getName().toString(); + for (WakeNode node : WakeNode.Factory.splashNodes(entity, (int) Math.floor(((ProducesWake) entity).producingWaterLevel()))) { instance.insert(node); } } @@ -73,11 +72,10 @@ public static void placeWakeTrail(Entity entity) { } ProducesWake producer = (ProducesWake) entity; double velocity = producer.getHorizontalVelocity(); - int y = producer.producingWaterLevel(); + int y = (int) Math.floor(producer.producingWaterLevel()); if (entity instanceof BoatEntity boat) { for (WakeNode node : WakeNode.Factory.rowingNodes(boat, y)) { - node.spawner = entity.getName().toString(); wakeHandler.insert(node); } if (WakesClient.CONFIG_INSTANCE.spawnParticles) { @@ -94,7 +92,6 @@ public static void placeWakeTrail(Entity entity) { return; } for (WakeNode node : WakeNode.Factory.thickNodeTrail(prevPos.x, prevPos.z, entity.getX(), entity.getZ(), y, WakesClient.CONFIG_INSTANCE.initialStrength, velocity, entity.getWidth())) { - node.spawner = entity.getName().toString(); wakeHandler.insert(node); } } @@ -230,10 +227,6 @@ public static int rgbaArr2abgrInt(int[] arr) { return n; } - public static BlockPos vecToBlockPos(Vec3d v) { - return new BlockPos((int) Math.floor(v.x), (int) Math.floor(v.y), (int) Math.floor(v.z)); - } - public static float getWaterLevel(World world, Entity entityInWater) { Box box = entityInWater.getBoundingBox(); return getWaterLevel(world, @@ -272,13 +265,4 @@ private static float getWaterLevel(World world, int minX, int maxX, int minY, in return maxY + 1; } - - public static boolean validNodePos(World world, BlockPos pos) { - FluidState fluidState = world.getFluidState(pos); - FluidState fluidStateAbove = world.getFluidState(pos.up()); - if (fluidState.isOf(Fluids.WATER) && fluidStateAbove.isEmpty()) { - return fluidState.isStill(); - } - return false; - } }