From da5b937e78c949ecea743cf607fb3d31249b48e6 Mon Sep 17 00:00:00 2001 From: gnembon <41132274+gnembon@users.noreply.github.com> Date: Tue, 11 Mar 2025 23:13:02 +0100 Subject: [PATCH] fix broken particle parsing --- docs/scarpet/api/Auxiliary.md | 2 +- gradle.properties | 2 +- src/main/java/carpet/helpers/ParticleDisplay.java | 8 +------- .../logging/logHelpers/PathfindingVisualizer.java | 7 +++++-- src/main/java/carpet/mixins/Villager_aiMixin.java | 3 ++- src/main/java/carpet/script/utils/ShapeDispatcher.java | 10 +++++----- src/main/resources/assets/carpet/scripts/camera.sc | 5 +++-- 7 files changed, 18 insertions(+), 19 deletions(-) diff --git a/docs/scarpet/api/Auxiliary.md b/docs/scarpet/api/Auxiliary.md index 5a3915fb..59d4cb12 100644 --- a/docs/scarpet/api/Auxiliary.md +++ b/docs/scarpet/api/Auxiliary.md @@ -22,7 +22,7 @@ clients will actually be able to receive (they may have more available via resou Renders a cloud of particles `name` centered around `pos` position, by default `count` 10 of them, default `speed` of 0, and to all players nearby, but these options can be changed via optional arguments. Follow vanilla `/particle` command on details on those options. Valid particle names are -for example `'angry_villager', 'item diamond', 'block stone', 'dust 0.8 0.1 0.1 4'`. +for example `'angry_villager', 'item diamond', 'block stone', 'dust{"scale": 4, "color": [0.8, 0.1, 0.1]}'`. Used with no arguments, return the list of available particle names. Note that some of the names do not correspond to a valid particle that can be fed to `particle(...)` function due to a fact that some particles need more configuration diff --git a/gradle.properties b/gradle.properties index 0f2850de..8e6146a6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check https://fabricmc.net/develop/ - minecraft_version=25w09a + minecraft_version=1.21.5-pre1 loader_version=0.16.10 jsr305_version=3.0.2 fabric_version=0.110.5+1.21.4 diff --git a/src/main/java/carpet/helpers/ParticleDisplay.java b/src/main/java/carpet/helpers/ParticleDisplay.java index 733c06ac..67ec012e 100644 --- a/src/main/java/carpet/helpers/ParticleDisplay.java +++ b/src/main/java/carpet/helpers/ParticleDisplay.java @@ -1,19 +1,13 @@ package carpet.helpers; -import carpet.script.utils.ParticleParser; -import net.minecraft.core.HolderLookup; import net.minecraft.core.particles.ParticleOptions; -import net.minecraft.core.particles.ParticleType; -import net.minecraft.core.registries.Registries; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.phys.Vec3; public class ParticleDisplay { - public static void drawParticleLine(ServerPlayer player, Vec3 from, Vec3 to, String main, String accent, int count, double spread) + public static void drawParticleLine(ServerPlayer player, Vec3 from, Vec3 to, ParticleOptions mainParticle, ParticleOptions accentParticle, int count, double spread) { - ParticleOptions accentParticle = ParticleParser.getEffect(accent, player.server.registryAccess()); - ParticleOptions mainParticle = ParticleParser.getEffect(main, player.server.registryAccess()); if (accentParticle != null) player.serverLevel().sendParticles( player, diff --git a/src/main/java/carpet/logging/logHelpers/PathfindingVisualizer.java b/src/main/java/carpet/logging/logHelpers/PathfindingVisualizer.java index ff66ee3c..987af8d5 100644 --- a/src/main/java/carpet/logging/logHelpers/PathfindingVisualizer.java +++ b/src/main/java/carpet/logging/logHelpers/PathfindingVisualizer.java @@ -2,6 +2,9 @@ package carpet.logging.logHelpers; import carpet.helpers.ParticleDisplay; import carpet.logging.LoggerRegistry; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; @@ -31,8 +34,8 @@ public class PathfindingVisualizer if (minDuration < 1) minDuration = 1; - String accent = successful ? "happy_villager" : "angry_villager"; - String color = (miliseconds/minDuration < 2)? "dust 1 1 0 1" : ((miliseconds/minDuration < 4)?"dust 1 0.5 0 1":"dust 1 0 0 1"); + ParticleOptions accent = successful ? ParticleTypes.HAPPY_VILLAGER : ParticleTypes.ANGRY_VILLAGER; + ParticleOptions color = (miliseconds/minDuration < 2)? new DustParticleOptions(0xffffff00, 1) : ((miliseconds/minDuration < 4)?new DustParticleOptions(0xFFFF7700, 1): new DustParticleOptions(0xFFFF0000, 1)); ParticleDisplay.drawParticleLine((ServerPlayer) player, entity.position(), target, color, accent, 5, 0.5); return null; }); diff --git a/src/main/java/carpet/mixins/Villager_aiMixin.java b/src/main/java/carpet/mixins/Villager_aiMixin.java index 359fbcf6..ea0a0b1e 100644 --- a/src/main/java/carpet/mixins/Villager_aiMixin.java +++ b/src/main/java/carpet/mixins/Villager_aiMixin.java @@ -3,6 +3,7 @@ package carpet.mixins; import carpet.helpers.ParticleDisplay; import carpet.utils.Messenger; import carpet.utils.MobAI; +import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.world.entity.ai.village.poi.PoiTypes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -131,7 +132,7 @@ public abstract class Villager_aiMixin extends AbstractVillager else { - ParticleDisplay.drawParticleLine((ServerPlayer) playerEntity_1, position(), Vec3.atCenterOf(bedPos.pos()), "dust 0 0 0 1", "happy_villager", 100, 0.2); // pos+0.5v + ParticleDisplay.drawParticleLine((ServerPlayer) playerEntity_1, position(), Vec3.atCenterOf(bedPos.pos()), new DustParticleOptions(0xff000000, 1), ParticleTypes.HAPPY_VILLAGER, 100, 0.2); // pos+0.5v } } else if (itemStack_1.getItem() == Items.ROTTEN_FLESH) diff --git a/src/main/java/carpet/script/utils/ShapeDispatcher.java b/src/main/java/carpet/script/utils/ShapeDispatcher.java index 12babace..1251a4e0 100644 --- a/src/main/java/carpet/script/utils/ShapeDispatcher.java +++ b/src/main/java/carpet/script/utils/ShapeDispatcher.java @@ -26,6 +26,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; +import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.ByteTag; @@ -46,6 +47,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.ARGB; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.Entity; @@ -435,10 +437,8 @@ public class ShapeDispatcher protected ParticleOptions replacementParticle(RegistryAccess regs) { - String particleName = fa == 0 ? - String.format(Locale.ROOT, "dust %.1f %.1f %.1f 1.0", r, g, b) : - String.format(Locale.ROOT, "dust %.1f %.1f %.1f 1.0", fr, fg, fb); - return getParticleData(particleName, regs); + boolean bg = fa == 0; + return new DustParticleOptions(ARGB.colorFromFloat(1.0f, (bg ?r:fr), (bg ?r:fr), (bg ?r:fr)), 1); } @@ -1069,7 +1069,7 @@ public class ShapeDispatcher } if (fa > 0.0f) { - ParticleOptions locparticledata = getParticleData(String.format(Locale.ROOT, "dust %.1f %.1f %.1f %.1f", fr, fg, fb, fa), p.level().registryAccess()); + ParticleOptions locparticledata = new DustParticleOptions(ARGB.colorFromFloat(1.0f, fr, fg, fb), 1); for (Vec3 v : getAlterPoint(p)) { p.serverLevel().sendParticles(p, locparticledata, true, true, diff --git a/src/main/resources/assets/carpet/scripts/camera.sc b/src/main/resources/assets/carpet/scripts/camera.sc index 63cc6c46..f0bfdb96 100644 --- a/src/main/resources/assets/carpet/scripts/camera.sc +++ b/src/main/resources/assets/carpet/scripts/camera.sc @@ -127,8 +127,9 @@ _start_with(points_supplier) -> global_dimension = p~'dimension'; code = abs(hash_code(str(p))-123456); - global_color_a = str('dust %.1f %.1f %.1f 1',(code%10)/10,(((code/10)%10)/10), (((code/100)%10)/10) ); // 'dust 0.1 0.9 0.1 1', - global_color_b = str('dust %.1f %.1f %.1f 1',(((code/1000)%10)/10),(((code/10000)%10)/10), (((code/100000)%10)/10) );// 'dust 0.6 0.6 0.6 1' + + global_color_a = str('dust{"scale": 1, "color": [%.1f, %.1f, %.1f]}',(code%10)/10,(((code/10)%10)/10), (((code/100)%10)/10) ); // 'dust 0.1 0.9 0.1 1', + global_color_b = str('dust{"scale": 1, "color": [%.1f, %.1f, %.1f]}',(((code/1000)%10)/10),(((code/10000)%10)/10), (((code/100000)%10)/10) );// 'dust 0.6 0.6 0.6 1' global_points = call(points_supplier); global_selected_point = null;