feat: 添加MOD服兼容

Signed-off-by: 502647092 <admin@yumc.pw>
merge/1/MERGE
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) {
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);
static class Automatic extends ItemSerialize {
@ -44,13 +48,25 @@ public abstract class ItemSerialize {
public Automatic() throws ClassNotFoundException, NoSuchMethodException, SecurityException {
final Class<?> cis = getOBCClass("inventory.CraftItemStack");
asNMSCopyMethod = cis.getMethod("asNMSCopy", ItemStack.class);
final Class<?> nmsItemStack = getNMSClass("ItemStack");
nmsNBTTagCompound = getNMSClass("NBTTagCompound");
nmsSaveNBTMethod = nmsItemStack.getMethod("save", nmsNBTTagCompound);
final Class<?> nmsItemStack = asNMSCopyMethod.getReturnType();
for (final Method method : nmsItemStack.getMethods()) {
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 {
return Class.forName("net.minecraft.server." + ver + "." + cname);
@Override
public String getName() {
return "Automatic";
}
public Class<?> getOBCClass(final String cname) throws ClassNotFoundException {
@ -70,6 +86,11 @@ public abstract class ItemSerialize {
static class Manual extends ItemSerialize {
@Override
public String getName() {
return "Manual";
}
@Override
public String parse(final ItemStack item) {
return serialize(item);
@ -92,7 +113,7 @@ public abstract class ItemSerialize {
display.append("Lore:[");
int i = 0;
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++;
}
display.deleteCharAt(display.length() - 1);
@ -131,7 +152,6 @@ public abstract class ItemSerialize {
if (im.hasEnchants()) {
meta.append(String.format("ench:[%s],", getEnch(im.getEnchants().entrySet())));
}
im.getItemFlags();
if (im.hasDisplayName() || im.hasLore()) {
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.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@ -48,11 +47,6 @@ public class Tellraw {
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
*/