前排:onDisable()里写了Bukkit.resetRecipes();和其他常规后续处理,可排除因基础操作不当导致的问题。
问题如下:
使用以下代码复制代码则服务器的所有配方将被清空,后续实例添加的新有序配方,虽然返回值为true,但没有正常生效。而改为
复制代码去掉了Bukkit.clearRecipes();则所有配方没有被清空。后续实例添加的新有序配方也生效,判断为Bukkit.clearRecipes();存在问题。
通过nms直接调用底层代码(因猜测jdk特性原实现的Map.clear()会导致后续插入为null,所以改为了新实例化对象),代码如下
复制代码效果与贴内代码块1效果相同。请求验证该问题是由此插件代码问题还是SPIGOT自身实现原因?该如何处理?
叠甲:此插件不由本人开发,而是翻公司历史记录翻出来不知何年何月的贵物,由于本人出门一段时间不方便nms看SPIGOT底层实现,故发个悬赏
问题如下:
使用以下代码
- //代码块1
- //代码块2
通过nms直接调用底层代码(因猜测jdk特性原实现的Map.clear()会导致后续插入为null,所以改为了新实例化对象),代码如下
- //代码块3
叠甲:此插件不由本人开发,而是翻公司历史记录翻出来不知何年何月的贵物,由于本人出门一段时间不方便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();
+ }
+ 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()