神奈时雨
前排:onDisable()里写了Bukkit.resetRecipes();和其他常规后续处理,可排除因基础操作不当导致的问题。

问题如下:
使用以下代码
  1. //代码块1
复制代码
则服务器的所有配方将被清空,后续实例添加的新有序配方,虽然返回值为true,但没有正常生效。而改为
  1. //代码块2
复制代码
去掉了Bukkit.clearRecipes();则所有配方没有被清空。后续实例添加的新有序配方也生效,判断为Bukkit.clearRecipes();存在问题。
通过nms直接调用底层代码(因猜测jdk特性原实现的Map.clear()会导致后续插入为null,所以改为了新实例化对象),代码如下
  1. //代码块3
复制代码
效果与贴内代码块1效果相同。请求验证该问题是由此插件代码问题还是SPIGOT自身实现原因?该如何处理?

叠甲:此插件不由本人开发,而是翻公司历史记录翻出来不知何年何月的贵物,由于本人出门一段时间不方便nms看SPIGOT底层实现,故发个悬赏

青蛙的名单
+    public void clearRecipes() {
+        this.recipes = Maps.newHashMap();
+
+        for (Recipes<?> recipeType : BuiltInRegistries.RECIPE_TYPE) {
+            this.recipes.put(recipeType, new Object2ObjectLinkedOpenHashMap<>());
+        }
+
+        this.byName = Maps.newHashMap();
+    }

神奈时雨
青蛙的名单 发表于 2024-1-15 17:42
+    public void clearRecipes() {
+        this.recipes = Maps.newHashMap();
+



或许为版本问题?经朋友检查实际上nms底层写的就是Map.clear()


青蛙的名单
神奈时雨 发表于 2024-1-15 17:56
或许为版本问题?经朋友检查实际上nms底层写的就是Map.clear()

是的,参考
https://hub.spigotmc.org/jira/browse/SPIGOT-5097
https://hub.spigotmc.org/stash/p ... aftingManager.patch

神奈时雨
青蛙的名单 发表于 2024-1-15 17:58
是的,参考
https://hub.spigotmc.org/jira/browse/SPIGOT-5097
https://hub.spigotmc.org/stash/project ...

也就是说就是SPIGOT的实现在低版本有问题呗,然后1.14修了(你给的hub是1.14的

第一页 上一页 下一页 最后一页