mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-30 20:39:10 +00:00
修复bug
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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()));
|
||||
|
||||
Reference in New Issue
Block a user