1
0
mirror of https://e.coding.net/circlecloud/YumCore.git synced 2024-11-22 01:48:50 +00:00

feat: 添加MOD服兼容

Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
502647092 2016-09-12 16:11:11 +08:00
parent aaf3fa1e08
commit b3c0a31cbf
2 changed files with 28 additions and 14 deletions

View File

@ -30,9 +30,13 @@ public abstract class ItemSerialize {
} }
public static String $(final ItemStack item) { public static String $(final ItemStack item) {
return itemSerialize.parse(item); final String result = itemSerialize.parse(item);
Log.debug(String.format("%s物品序列化结果: %s", itemSerialize.getName(), result));
return result;
} }
public abstract String getName();
public abstract String parse(final ItemStack item); public abstract String parse(final ItemStack item);
static class Automatic extends ItemSerialize { static class Automatic extends ItemSerialize {
@ -44,13 +48,25 @@ public abstract class ItemSerialize {
public Automatic() throws ClassNotFoundException, NoSuchMethodException, SecurityException { public Automatic() throws ClassNotFoundException, NoSuchMethodException, SecurityException {
final Class<?> cis = getOBCClass("inventory.CraftItemStack"); final Class<?> cis = getOBCClass("inventory.CraftItemStack");
asNMSCopyMethod = cis.getMethod("asNMSCopy", ItemStack.class); asNMSCopyMethod = cis.getMethod("asNMSCopy", ItemStack.class);
final Class<?> nmsItemStack = getNMSClass("ItemStack"); final Class<?> nmsItemStack = asNMSCopyMethod.getReturnType();
nmsNBTTagCompound = getNMSClass("NBTTagCompound"); for (final Method method : nmsItemStack.getMethods()) {
nmsSaveNBTMethod = nmsItemStack.getMethod("save", nmsNBTTagCompound); final Class<?> rt = method.getReturnType();
if (method.getParameterTypes().length == 0 && rt.getSimpleName().equals("NBTTagCompound")) {
nmsNBTTagCompound = rt;
}
}
for (final Method method : nmsItemStack.getMethods()) {
final Class<?>[] paras = method.getParameterTypes();
final Class<?> rt = method.getReturnType();
if (paras.length == 1 && paras[0].getSimpleName().equals("NBTTagCompound") && rt.getSimpleName().equals("NBTTagCompound")) {
nmsSaveNBTMethod = method;
}
}
} }
public Class<?> getNMSClass(final String cname) throws ClassNotFoundException { @Override
return Class.forName("net.minecraft.server." + ver + "." + cname); public String getName() {
return "Automatic";
} }
public Class<?> getOBCClass(final String cname) throws ClassNotFoundException { public Class<?> getOBCClass(final String cname) throws ClassNotFoundException {
@ -70,6 +86,11 @@ public abstract class ItemSerialize {
static class Manual extends ItemSerialize { static class Manual extends ItemSerialize {
@Override
public String getName() {
return "Manual";
}
@Override @Override
public String parse(final ItemStack item) { public String parse(final ItemStack item) {
return serialize(item); return serialize(item);
@ -92,7 +113,7 @@ public abstract class ItemSerialize {
display.append("Lore:["); display.append("Lore:[");
int i = 0; int i = 0;
for (final String line : im.getLore()) { for (final String line : im.getLore()) {
display.append(String.format("%s:%s,", i, new JsonBuilder(line).toString())); display.append(String.format("%s:\"%s\",", i, new JsonBuilder(line).toString()));
i++; i++;
} }
display.deleteCharAt(display.length() - 1); display.deleteCharAt(display.length() - 1);
@ -131,7 +152,6 @@ public abstract class ItemSerialize {
if (im.hasEnchants()) { if (im.hasEnchants()) {
meta.append(String.format("ench:[%s],", getEnch(im.getEnchants().entrySet()))); meta.append(String.format("ench:[%s],", getEnch(im.getEnchants().entrySet())));
} }
im.getItemFlags();
if (im.hasDisplayName() || im.hasLore()) { if (im.hasDisplayName() || im.hasLore()) {
meta.append(String.format("display:%s,", getDisplay(im))); meta.append(String.format("display:%s,", getDisplay(im)));
} }

View File

@ -6,7 +6,6 @@ import java.util.List;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -48,11 +47,6 @@ public class Tellraw {
return new Tellraw(text); return new Tellraw(text);
} }
public static void main(final String[] args) {
final ItemStack item = new ItemStack(Material.DIAMOND_SWORD);
System.out.println(Tellraw.create("命令").command("yum list").item(item).toJsonString());
}
/** /**
* 发送Tellraw公告 * 发送Tellraw公告
*/ */