9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-30 20:39:10 +00:00

修复encodeJava

This commit is contained in:
XiaoMoMi
2025-04-05 18:39:34 +08:00
parent 51dad2f602
commit d26fe2c6d7
3 changed files with 56 additions and 6 deletions

View File

@@ -1,5 +1,7 @@
package net.momirealms.craftengine.bukkit.item.factory;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.saicone.rtag.data.ComponentType;
import com.saicone.rtag.tag.TagList;
import com.saicone.rtag.util.ChatComponent;
@@ -7,6 +9,7 @@ import net.momirealms.craftengine.bukkit.util.ComponentUtils;
import net.momirealms.craftengine.core.item.ComponentKeys;
import net.momirealms.craftengine.core.item.ItemWrapper;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.util.GsonHelper;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
@@ -32,7 +35,7 @@ public class ComponentItemFactory1_21_5 extends ComponentItemFactory1_21_4 {
@Override
protected Optional<String> customName(ItemWrapper<ItemStack> item) {
if (!item.hasComponent(ComponentKeys.CUSTOM_NAME)) return Optional.empty();
return ComponentType.encodeJava(ComponentKeys.CUSTOM_NAME, item.getComponent(ComponentKeys.ITEM_NAME)).map(ChatComponent::fromTag).map(ComponentUtils::minecraftToJson);
return ComponentType.encodeJson(ComponentKeys.CUSTOM_NAME, item.getComponent(ComponentKeys.CUSTOM_NAME)).map(jsonElement -> GsonHelper.get().toJson(jsonElement));
}
@Override
@@ -47,20 +50,19 @@ public class ComponentItemFactory1_21_5 extends ComponentItemFactory1_21_4 {
@Override
protected Optional<String> itemName(ItemWrapper<ItemStack> item) {
if (!item.hasComponent(ComponentKeys.ITEM_NAME)) return Optional.empty();
return ComponentType.encodeJava(ComponentKeys.ITEM_NAME, item.getComponent(ComponentKeys.ITEM_NAME)).map(ChatComponent::fromTag).map(ComponentUtils::minecraftToJson);
return ComponentType.encodeJson(ComponentKeys.ITEM_NAME, item.getComponent(ComponentKeys.ITEM_NAME)).map(jsonElement -> GsonHelper.get().toJson(jsonElement));
}
@Override
protected Optional<List<String>> lore(ItemWrapper<ItemStack> item) {
if (!item.hasComponent(ComponentKeys.LORE)) return Optional.empty();
return ComponentType.encodeJava(
return ComponentType.encodeJson(
ComponentKeys.LORE,
item.getComponent(ComponentKeys.LORE)
).map(list -> {
List<String> lore = new ArrayList<>();
List<Object> tagList = TagList.getValue(list);
for (Object o : tagList) {
lore.add(ComponentUtils.minecraftToJson(ChatComponent.fromTag(o)));
for (JsonElement jsonElement : (JsonArray) list) {
lore.add(GsonHelper.get().toJson(jsonElement));
}
return lore;
});

View File

@@ -643,6 +643,39 @@ public class RecipeEventListener implements Listener {
}
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
public void onAnvilRenameItem(PrepareAnvilEvent event) {
AnvilInventory inventory = event.getInventory();
ItemStack first = inventory.getFirstItem();
if (ItemUtils.isEmpty(first)) {
return;
}
if (event.getResult() == null) {
return;
}
Item<ItemStack> wrappedFirst = BukkitItemManager.instance().wrap(first);
wrappedFirst.getCustomItem().ifPresent(item -> {
if (!item.settings().renameable()) {
String renameText;
if (VersionHelper.isVersionNewerThan1_21_2()) {
AnvilView anvilView = event.getView();
renameText = anvilView.getRenameText();
} else {
renameText = LegacyInventoryUtils.getRenameText(inventory);
}
System.out.println(wrappedFirst.itemName().get());
System.out.println(wrappedFirst.lore().get());
try {
if (!renameText.equals(Reflections.method$Component$getString.invoke(ComponentUtils.jsonToMinecraft(wrappedFirst.hoverName().orElse(AdventureHelper.EMPTY_COMPONENT))))) {
event.setResult(null);
}
} catch (Exception e) {
this.plugin.logger().warn("Failed to get hover name", e);
}
}
});
}
public static int calculateIncreasedRepairCost(int cost) {
return (int) Math.min((long) cost * 2L + 1L, 2147483647L);
}