尝试ASM失败,还是反射简单...

This commit is contained in:
坏黑
2018-05-11 01:02:30 +08:00
parent 863dc35e56
commit 4cc3ce4fc8
12 changed files with 230 additions and 279 deletions

View File

@@ -38,7 +38,6 @@ import me.skymc.taboolib.update.UpdateTask;
import me.skymc.tlm.TLM;
import me.skymc.tlm.command.TLMCommands;
import me.skymc.tlm.module.TabooLibraryModule;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.Listener;
@@ -49,12 +48,14 @@ import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
import java.util.Random;
@SuppressWarnings("deprecation")
/**
* @author sky
*/
public class Main extends JavaPlugin implements Listener {
private static Plugin inst;
private static Economy Economy;
private static net.milkbowl.vault.economy.Economy Economy;
private static File playerDataFolder;

View File

@@ -0,0 +1,80 @@
package me.skymc.taboolib.anvil;
import com.ilummc.tlib.util.asm.AsmClassTransformer;
import me.skymc.taboolib.nms.NMSUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
/**
* @author sky
*/
public class AnvilContainer {
// private static IAnvilContainer instance;
private static Class<?> ChatMessage = NMSUtils.getNMSClass("ChatMessage");
private static Class<?> PacketPlayOutOpenWindow = NMSUtils.getNMSClass("PacketPlayOutOpenWindow");
private static Class<?> IChatBaseComponent = NMSUtils.getNMSClass("IChatBaseComponent");
private static Class<?> Packet = NMSUtils.getNMSClass("Packet");
// public static IAnvilContainer getInstance() {
// return instance;
// }
//
// static {
// /*
// * 玩不懂玩不懂... 似乎不会更改父类的包名?
// */
// instance = (IAnvilContainer) AsmClassTransformer.builder()
// .from(AnvilContainerImpl.class)
// .fromVersion("v1_12_R1")
// .toVersion(Bukkit.getServer().getClass().getName().split("\\.")[3])
// .build()
// .transform();
// }
public static void openAnvil(Player p) {
try {
Object player = p.getClass().getMethod("getHandle").invoke(p);
int c = (int) player.getClass().getMethod("nextContainerCounter").invoke(player);
Object chatMessage = ChatMessage.getConstructor(String.class, Object[].class).newInstance("Repairing", new Object[0]);
Object packetPlayOutOpenWindow = PacketPlayOutOpenWindow.getConstructor(Integer.TYPE, String.class, IChatBaseComponent, Integer.TYPE).newInstance(c, "minecraft:anvil", chatMessage, 0);
Object playerConnection = player.getClass().getDeclaredField("playerConnection").get(player);
playerConnection.getClass().getMethod("sendPacket", Packet).invoke(playerConnection, packetPlayOutOpenWindow);
} catch (Exception ignored) {
}
}
}
//interface IAnvilContainer {
//
// /**
// * 打开铁砧界面
// *
// * @param player 玩家
// */
// void openAnvil(Player player);
//}
//
//class AnvilContainerImpl extends net.minecraft.server.v1_12_R1.ContainerAnvil implements IAnvilContainer {
//
// public AnvilContainerImpl(net.minecraft.server.v1_12_R1.EntityHuman player) {
// super(player.inventory, player.world, new net.minecraft.server.v1_12_R1.BlockPosition(0, 0, 0), player);
// }
//
// @Override
// public void openAnvil(Player p) {
// net.minecraft.server.v1_12_R1.EntityPlayer player = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer) p).getHandle();
// AnvilContainerImpl container = new AnvilContainerImpl(player);
// int c = player.nextContainerCounter();
// player.playerConnection.sendPacket(new net.minecraft.server.v1_12_R1.PacketPlayOutOpenWindow(c, "minecraft:anvil", new net.minecraft.server.v1_12_R1.ChatMessage("Repairing"), 0));
// player.activeContainer = container;
// player.activeContainer.windowId = c;
// player.activeContainer.addSlotListener(player);
// }
//
// @Override
// public boolean a(net.minecraft.server.v1_12_R1.EntityHuman player) {
// return true;
// }
//}

View File

@@ -1,6 +1,6 @@
package me.skymc.taboolib.anvil;
import me.skymc.taboolib.anvil.versions.AnvilContainer_V1_9_4;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
@@ -19,6 +19,9 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* @author sky
*/
public class AnvilContainerAPI implements Listener {
public static List<String> list = new ArrayList<>();
@@ -29,14 +32,12 @@ public class AnvilContainerAPI implements Listener {
public static void send(Player p, String type, String str, List<String> lorelist) {
isOpen.put(p.getName(), type);
AnvilContainer_V1_9_4.openAnvil(p);
AnvilContainer.openAnvil(p);
ItemMeta meta = item.getItemMeta();
list.clear();
if (lorelist == null) {
list.add("");
list.add("§7在上方文本框内输入信息");
list.add("§7随后点击右侧输出物品");
list.addAll(TLocale.asStringList("ANVIL-CONTAINER.LORE-NORMAL"));
} else {
list = lorelist;
}
@@ -91,7 +92,7 @@ public class AnvilContainerAPI implements Listener {
if ("/anvilexample".equals(e.getMessage())) {
if (e.getPlayer().hasPermission("taboolib.admin")) {
e.setCancelled(true);
AnvilContainerAPI.send(e.getPlayer(), "EXAMPLE", "在这里输入文本", null);
AnvilContainerAPI.send(e.getPlayer(), "EXAMPLE", TLocale.asString("ANVIL-CONTAINER.NAME-EXAMPLE"), null);
}
}
}

View File

@@ -1,32 +0,0 @@
package me.skymc.taboolib.anvil.versions;
import net.minecraft.server.v1_11_R1.*;
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class AnvilContainer_V1_11_R1 extends ContainerAnvil {
public AnvilContainer_V1_11_R1(EntityHuman player) {
super(player.inventory, player.world, new BlockPosition(0, 0, 0), player);
}
/**
* @deprecated 方法已过期,已有新的方法
*/
@Deprecated
public static void openAnvil(Player p) {
EntityPlayer player = ((CraftPlayer) p).getHandle();
AnvilContainer_V1_11_R1 container = new AnvilContainer_V1_11_R1(player);
int c = player.nextContainerCounter();
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c, "minecraft:anvil", new ChatMessage("Repairing"), 0));
player.activeContainer = container;
player.activeContainer.windowId = c;
player.activeContainer.addSlotListener(player);
}
@Override
public boolean a(EntityHuman player) {
return true;
}
}

View File

@@ -1,32 +0,0 @@
package me.skymc.taboolib.anvil.versions;
import net.minecraft.server.v1_8_R3.*;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class AnvilContainer_V1_8_R3 extends ContainerAnvil {
public AnvilContainer_V1_8_R3(EntityHuman player) {
super(player.inventory, player.world, new BlockPosition(0, 0, 0), player);
}
/**
* @deprecated 方法已过期,已有新的方法
*/
@Deprecated
public static void openAnvil(Player p) {
EntityPlayer player = ((CraftPlayer) p).getHandle();
AnvilContainer_V1_8_R3 container = new AnvilContainer_V1_8_R3(player);
int c = player.nextContainerCounter();
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c, "minecraft:anvil", new ChatMessage("Repairing"), 0));
player.activeContainer = container;
player.activeContainer.windowId = c;
player.activeContainer.addSlotListener(player);
}
@Override
public boolean a(EntityHuman player) {
return true;
}
}

View File

@@ -1,32 +0,0 @@
package me.skymc.taboolib.anvil.versions;
import net.minecraft.server.v1_9_R2.*;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class AnvilContainer_V1_9_4 extends ContainerAnvil {
public AnvilContainer_V1_9_4(EntityHuman player) {
super(player.inventory, player.world, new BlockPosition(0, 0, 0), player);
}
/**
* @deprecated 方法已过期,已有新的方法
*/
@Deprecated
public static void openAnvil(Player p) {
EntityPlayer player = ((CraftPlayer) p).getHandle();
AnvilContainer_V1_9_4 container = new AnvilContainer_V1_9_4(player);
int c = player.nextContainerCounter();
player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c, "minecraft:anvil", new ChatMessage("Repairing"), 0));
player.activeContainer = container;
player.activeContainer.windowId = c;
player.activeContainer.addSlotListener(player);
}
@Override
public boolean a(EntityHuman player) {
return true;
}
}

View File

@@ -8,6 +8,9 @@ import me.skymc.tlm.module.sub.ModuleKits;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
/**
* @author sky
*/
public class SupportPlaceholder extends EZPlaceholderHook {
public SupportPlaceholder(Plugin plugin, String identifier) {

View File

@@ -132,7 +132,7 @@ public class TagAPI implements Listener {
builtUUID.append(sent.getId());
}
AsyncPlayerReceiveNameTagEvent newEvent = new AsyncPlayerReceiveNameTagEvent(destinationPlayer, namedPlayer, oldEvent.getTag(), UUID.fromString(builtUUID.toString()));
AsyncPlayerReceiveNameTagEvent newEvent = new AsyncPlayerReceiveNameTagEvent(destinationPlayer, namedPlayer, getPlayerDisplayName(namedPlayer), UUID.fromString(builtUUID.toString()));
Bukkit.getServer().getPluginManager().callEvent(newEvent);
return new WrappedGameProfile(newEvent.getUUID(), newEvent.getTag().substring(0, Math.min(newEvent.getTag().length(), 16)));