From 076e799016aaac3612df034c7f5da18bc45f6e92 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Thu, 18 Jul 2024 23:59:15 +0800 Subject: [PATCH] Fix particle on 1.20.5+ --- .../api/mechanic/MechanicType.java | 4 +- .../mechanic/config/BlockConfigParser.java | 2 +- .../api/mechanic/config/ConfigType.java | 4 +- .../mechanic/config/EntityConfigParser.java | 2 +- .../bukkit/config/BukkitConfigManager.java | 59 +++++-------------- .../bukkit/util/ParticleUtils.java | 33 +++++++++++ 6 files changed, 53 insertions(+), 51 deletions(-) create mode 100644 core/src/main/java/net/momirealms/customfishing/bukkit/util/ParticleUtils.java diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/MechanicType.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/MechanicType.java index fdbb5549..c2b28e97 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/MechanicType.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/MechanicType.java @@ -40,8 +40,6 @@ public class MechanicType { public static final MechanicType BAIT = of("bait"); public static final MechanicType HOOK = of("hook"); public static final MechanicType TOTEM = of("totem"); - public static final MechanicType ENTITY = of("entity"); - public static final MechanicType BLOCK = of("block"); public static final MechanicType ENCHANT = of("enchant"); private final String type; @@ -74,7 +72,7 @@ public class MechanicType { return new MechanicType(type); } - private static final MechanicType[] VALUES = new MechanicType[]{LOOT, ROD, UTIL, BAIT, HOOK, TOTEM, ENCHANT, ENTITY, BLOCK}; + private static final MechanicType[] VALUES = new MechanicType[]{LOOT, ROD, UTIL, BAIT, HOOK, TOTEM, ENCHANT}; /** * Retrieves an array of all predefined mechanic types. diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/BlockConfigParser.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/BlockConfigParser.java index fdebfe83..51e4cee3 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/BlockConfigParser.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/BlockConfigParser.java @@ -114,7 +114,7 @@ public class BlockConfigParser { public EventCarrier getEventCarrier() { EventCarrier.Builder builder = EventCarrier.builder() .id(id) - .type(MechanicType.BLOCK); + .type(MechanicType.LOOT); for (Consumer consumer : eventBuilderConsumers) { consumer.accept(builder); } diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigType.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigType.java index f2a9fadf..f9fef15f 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigType.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigType.java @@ -45,7 +45,7 @@ public class ConfigType { public static final ConfigType ENTITY = of( "entity", (id, section, functions) -> { - MechanicType.register(id, MechanicType.ENTITY); + MechanicType.register(id, MechanicType.LOOT); EntityConfigParser config = new EntityConfigParser(id, section, functions); BukkitCustomFishingPlugin.getInstance().getEntityManager().registerEntity(config.getEntity()); BukkitCustomFishingPlugin.getInstance().getLootManager().registerLoot(config.getLoot()); @@ -56,7 +56,7 @@ public class ConfigType { public static final ConfigType BLOCK = of( "block", (id, section, functions) -> { - MechanicType.register(id, MechanicType.BLOCK); + MechanicType.register(id, MechanicType.LOOT); BlockConfigParser config = new BlockConfigParser(id, section, functions); BukkitCustomFishingPlugin.getInstance().getBlockManager().registerBlock(config.getBlock()); BukkitCustomFishingPlugin.getInstance().getLootManager().registerLoot(config.getLoot()); diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/EntityConfigParser.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/EntityConfigParser.java index 2d2b8982..bd45a247 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/EntityConfigParser.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/EntityConfigParser.java @@ -114,7 +114,7 @@ public class EntityConfigParser { public EventCarrier getEventCarrier() { EventCarrier.Builder builder = EventCarrier.builder() .id(id) - .type(MechanicType.ENTITY); + .type(MechanicType.LOOT); for (Consumer consumer : eventBuilderConsumers) { consumer.accept(builder); } diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java index f6a66ceb..46454bb7 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java @@ -59,8 +59,10 @@ import net.momirealms.customfishing.bukkit.item.damage.CustomDurabilityItem; import net.momirealms.customfishing.bukkit.totem.particle.DustParticleSetting; import net.momirealms.customfishing.bukkit.totem.particle.ParticleSetting; import net.momirealms.customfishing.bukkit.util.ItemStackUtils; +import net.momirealms.customfishing.bukkit.util.ParticleUtils; import net.momirealms.customfishing.common.dependency.DependencyProperties; import net.momirealms.customfishing.common.helper.AdventureHelper; +import net.momirealms.customfishing.common.helper.VersionHelper; import net.momirealms.customfishing.common.item.AbstractItem; import net.momirealms.customfishing.common.item.Item; import net.momirealms.customfishing.common.util.*; @@ -84,6 +86,7 @@ import java.util.function.Function; public class BukkitConfigManager extends ConfigManager { private static YamlDocument MAIN_CONFIG; + private static Particle dustParticle; public static YamlDocument getMainConfig() { return MAIN_CONFIG; @@ -99,6 +102,7 @@ public class BukkitConfigManager extends ConfigManager { this.registerBuiltInEffectModifierParser(); this.registerBuiltInTotemParser(); this.registerBuiltInHookParser(); + dustParticle = VersionHelper.isVersionNewerThan1_20_5() ? Particle.valueOf("DUST") : Particle.valueOf("REDSTONE"); } @Override @@ -543,6 +547,9 @@ public class BukkitConfigManager extends ConfigManager { } private TriConsumer, Integer> parseEffect(Section section) { + if (!section.contains("type")) { + throw new RuntimeException(section.getRouteAsString()); + } switch (section.getString("type")) { case "lava-fishing" -> { return (((effect, context, phase) -> { @@ -934,7 +941,7 @@ public class BukkitConfigManager extends ConfigManager { } private ParticleSetting getParticleSetting(Section section) { - Particle particle = Particle.valueOf(section.getString("type","REDSTONE")); + Particle particle = ParticleUtils.getParticle(section.getString("type","REDSTONE").toUpperCase(Locale.ENGLISH)); String formulaHorizontal = section.getString("polar-coordinates-formula.horizontal"); String formulaVertical = section.getString("polar-coordinates-formula.vertical"); List> ranges = section.getStringList("theta.range") @@ -942,29 +949,15 @@ public class BukkitConfigManager extends ConfigManager { String[] split = it.split("~"); return Pair.of(Double.parseDouble(split[0]) * Math.PI / 180, Double.parseDouble(split[1]) * Math.PI / 180); }).toList(); - double interval = section.getDouble("theta.draw-interval", 3d); int delay = section.getInt("task.delay", 0); int period = section.getInt("task.period", 0); - if (particle == Particle.REDSTONE) { + if (particle == dustParticle) { String color = section.getString("options.color","0,0,0"); String[] colorSplit = color.split(","); return new DustParticleSetting( - formulaHorizontal, - formulaVertical, - particle, - interval, - ranges, - delay, - period, - new Particle.DustOptions( - Color.fromRGB( - Integer.parseInt(colorSplit[0]), - Integer.parseInt(colorSplit[1]), - Integer.parseInt(colorSplit[2]) - ), - section.getDouble("options.scale", 1.0).floatValue() - ) + formulaHorizontal, formulaVertical, particle, interval, ranges, delay, period, + new Particle.DustOptions(Color.fromRGB(Integer.parseInt(colorSplit[0]), Integer.parseInt(colorSplit[1]), Integer.parseInt(colorSplit[2])), section.getDouble("options.scale", 1.0).floatValue()) ); } else if (particle == Particle.DUST_COLOR_TRANSITION) { String color = section.getString("options.from","0,0,0"); @@ -972,37 +965,15 @@ public class BukkitConfigManager extends ConfigManager { String toColor = section.getString("options.to","255,255,255"); String[] toColorSplit = toColor.split(","); return new DustParticleSetting( - formulaHorizontal, - formulaVertical, - particle, - interval, - ranges, - delay, - period, + formulaHorizontal, formulaVertical, particle, interval, ranges, delay, period, new Particle.DustTransition( - Color.fromRGB( - Integer.parseInt(colorSplit[0]), - Integer.parseInt(colorSplit[1]), - Integer.parseInt(colorSplit[2]) - ), - Color.fromRGB( - Integer.parseInt(toColorSplit[0]), - Integer.parseInt(toColorSplit[1]), - Integer.parseInt(toColorSplit[2]) - ), + Color.fromRGB(Integer.parseInt(colorSplit[0]), Integer.parseInt(colorSplit[1]), Integer.parseInt(colorSplit[2])), + Color.fromRGB(Integer.parseInt(toColorSplit[0]), Integer.parseInt(toColorSplit[1]), Integer.parseInt(toColorSplit[2])), section.getDouble("options.scale", 1.0).floatValue() ) ); } else { - return new ParticleSetting( - formulaHorizontal, - formulaVertical, - particle, - interval, - ranges, - delay, - period - ); + return new ParticleSetting(formulaHorizontal, formulaVertical, particle, interval, ranges, delay, period); } } diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/util/ParticleUtils.java b/core/src/main/java/net/momirealms/customfishing/bukkit/util/ParticleUtils.java new file mode 100644 index 00000000..f8178ed0 --- /dev/null +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/util/ParticleUtils.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) <2024> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.momirealms.customfishing.bukkit.util; + +import net.momirealms.customfishing.common.helper.VersionHelper; +import org.bukkit.Particle; + +public class ParticleUtils { + + public static Particle getParticle(String particle) { + if (!VersionHelper.isVersionNewerThan1_20_5()) return Particle.valueOf(particle); + return switch (particle) { + case "REDSTONE" -> Particle.valueOf("DUST"); + case "VILLAGER_HAPPY" -> Particle.valueOf("HAPPY_VILLAGER"); + default -> Particle.valueOf(particle); + }; + } +}