9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-31 21:06:31 +00:00

修复bug

This commit is contained in:
XiaoMoMi
2025-05-24 17:37:00 +08:00
parent d9d64ce758
commit 539dcd7d8f
14 changed files with 76 additions and 18 deletions

View File

@@ -10,6 +10,7 @@ public class BukkitItemBehaviors extends ItemBehaviors {
public static final Key FURNITURE_ITEM = Key.from("craftengine:furniture_item");
public static final Key WATER_BUCKET_ITEM = Key.from("craftengine:water_bucket_item");
public static final Key BUCKET_ITEM = Key.from("craftengine:bucket_item");
public static final Key HAT_ITEM = Key.from("craftengine:hat_item");
public static void init() {
register(EMPTY, EmptyItemBehavior.FACTORY);

View File

@@ -1,14 +1,23 @@
package net.momirealms.craftengine.bukkit.util;
import net.momirealms.craftengine.bukkit.nms.FastNMS;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.context.Context;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.VersionHelper;
import net.momirealms.craftengine.core.world.particle.*;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.bukkit.Vibration;
import org.bukkit.World;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
public final class ParticleUtils {
private static final Map<Key, Particle> CACHE = new HashMap<>();
private ParticleUtils() {}
public static Particle getParticle(String particle) {
@@ -24,6 +33,20 @@ public final class ParticleUtils {
}
}
@Nullable
public static Particle getParticle(Key particle) {
return CACHE.computeIfAbsent(particle, k -> {
try {
Object nmsParticle = Reflections.method$Registry$get.invoke(Reflections.instance$BuiltInRegistries$PARTICLE_TYPE, KeyUtils.toResourceLocation(particle));
if (nmsParticle == null) return null;
return FastNMS.INSTANCE.method$CraftParticle$toBukkit(nmsParticle);
} catch (ReflectiveOperationException e) {
CraftEngine.instance().logger().warn("Failed to get particle: " + particle, e);
return null;
}
});
}
public static final Particle HAPPY_VILLAGER = getParticle("HAPPY_VILLAGER");
public static final Particle BUBBLE = getParticle("BUBBLE");

View File

@@ -105,7 +105,7 @@ public class BukkitWorld implements World {
@Override
public void spawnParticle(Position location, Key particle, int count, double xOffset, double yOffset, double zOffset, double speed, @Nullable ParticleData extraData, @NotNull Context context) {
Particle particleType = Registry.PARTICLE_TYPE.get(KeyUtils.toNamespacedKey(particle));
Particle particleType = ParticleUtils.getParticle(particle);
if (particleType == null) return;
org.bukkit.World platformWorld = platformWorld();
platformWorld.spawnParticle(particleType, location.x(), location.y(), location.z(), count, xOffset, yOffset, zOffset, speed, extraData == null ? null : ParticleUtils.toBukkitParticleData(extraData, context, platformWorld, location.x(), location.y(), location.z()));