版本更新至:3.76
调整:开发框架改为 Gradle 新增:Language2 工具新增 [book] 类型
This commit is contained in:
149
src/main/java/me/skymc/taboolib/sign/SignUtils.java
Normal file
149
src/main/java/me/skymc/taboolib/sign/SignUtils.java
Normal file
@@ -0,0 +1,149 @@
|
||||
package me.skymc.taboolib.sign;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
||||
import org.bukkit.event.block.SignChangeEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
|
||||
import me.skymc.taboolib.Main;
|
||||
import me.skymc.taboolib.location.LocationUtils;
|
||||
import me.skymc.taboolib.message.MsgUtils;
|
||||
import me.skymc.taboolib.methods.MethodsUtils;
|
||||
import me.skymc.taboolib.nms.NMSUtils;
|
||||
|
||||
@Deprecated
|
||||
public class SignUtils implements Listener {
|
||||
|
||||
public static HashMap<String, Block> signs = new HashMap<>();
|
||||
|
||||
public static void openSign(Player p, Block b) {
|
||||
|
||||
if (!(b.getType().equals(Material.WALL_SIGN) || b.getType().equals(Material.SIGN_POST))) {
|
||||
return;
|
||||
}
|
||||
|
||||
b.setMetadata("TabooLib-Sign-Editing", new FixedMetadataValue(Main.getInst(), true));
|
||||
|
||||
try {
|
||||
Object world = b.getWorld().getClass().getMethod("getHandle").invoke(b.getWorld());
|
||||
Object blockPos = NMSUtils.getNMSClass("BlockPosition").getConstructor(int.class, int.class, int.class).newInstance(b.getX(), b.getY(), b.getZ());
|
||||
Object sign = world.getClass().getMethod("getTileEntity", NMSUtils.getNMSClass("BlockPosition")).invoke(world, blockPos);
|
||||
|
||||
Object player = p.getClass().getMethod("getHandle").invoke(p);
|
||||
|
||||
player.getClass().getMethod("openSign", NMSUtils.getNMSClass("TileEntitySign")).invoke(player, sign);
|
||||
}
|
||||
catch (Exception e) {
|
||||
MsgUtils.send(p, "&4操作失败 &8(SIGN OPENED ERROR.1)");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void openSign(Player p, String[] lines, String signid)
|
||||
{
|
||||
if (!MethodsUtils.checkUser(new String(new byte[] { 'm', 'e', '.', 's', 'k', 'y', 'm', 'c' }), new Exception().getStackTrace()[1].getClassName()))
|
||||
{
|
||||
throw new Error("未经允许的方法调用");
|
||||
}
|
||||
|
||||
Block b = LocationUtils.findBlockByLocation(p.getLocation());
|
||||
if(b == null) {
|
||||
MsgUtils.send(p, "&4所在位置无法进行该操作 &8(NOT FOUND AIR BY SIGN)");
|
||||
return;
|
||||
}
|
||||
|
||||
b.setData((byte) 0);
|
||||
b.setType(Material.WALL_SIGN);
|
||||
|
||||
b.setMetadata("TabooLib-Sign", new FixedMetadataValue(Main.getInst(), true));
|
||||
b.setMetadata("TabooLib-Sign-UUID", new FixedMetadataValue(Main.getInst(), signid));
|
||||
|
||||
try {
|
||||
Object world = b.getWorld().getClass().getMethod("getHandle").invoke(b.getWorld());
|
||||
Object blockPos = NMSUtils.getNMSClass("BlockPosition").getConstructor(int.class, int.class, int.class).newInstance(b.getX(), b.getY(), b.getZ());
|
||||
Object sign = world.getClass().getMethod("getTileEntity", NMSUtils.getNMSClass("BlockPosition")).invoke(world, blockPos);
|
||||
|
||||
Object[] _lines = (Object[]) sign.getClass().getField("lines").get(sign);
|
||||
|
||||
for (int i = 0; i < lines.length ; i++) {
|
||||
Object object = NMSUtils.getNMSClass("ChatComponentText").getConstructor(String.class).newInstance(lines[i]);
|
||||
_lines[i] = object;
|
||||
}
|
||||
|
||||
Object player = p.getClass().getMethod("getHandle").invoke(p);
|
||||
|
||||
Bukkit.getScheduler().runTaskLater(Main.getInst(), () -> {
|
||||
if (p.isOnline()) {
|
||||
try {
|
||||
player.getClass().getMethod("openSign", NMSUtils.getNMSClass("TileEntitySign")).invoke(player, sign);
|
||||
signs.put(p.getName(), b);
|
||||
}
|
||||
catch (IllegalAccessException|SecurityException|NoSuchMethodException|InvocationTargetException|IllegalArgumentException e) {
|
||||
MsgUtils.send(p, "&4操作失败 &8(SIGN OPENED ERROR.2)");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}, 3);
|
||||
}
|
||||
catch (Exception e) {
|
||||
MsgUtils.send(p, "&4操作失败 &8(SIGN OPENED ERROR.1)");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler (priority = EventPriority.LOWEST)
|
||||
public void signChange(SignChangeEvent e) {
|
||||
Block block = e.getBlock();
|
||||
if (block.hasMetadata("TabooLib-Sign")) {
|
||||
signs.remove(e.getPlayer().getName());
|
||||
|
||||
String signid = String.valueOf(block.getMetadata("TabooLib-Sign-UUID").get(0).value());
|
||||
Bukkit.getPluginManager().callEvent(new TabooSignChangeEvent(e.getPlayer(), block, e.getLines(), signid));
|
||||
|
||||
block.removeMetadata("TabooLib-Sign", Main.getInst());
|
||||
block.removeMetadata("TabooLib-Sign-UUID", Main.getInst());
|
||||
block.setType(Material.AIR);
|
||||
block.setData((byte) 0);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void quit(PlayerQuitEvent e) {
|
||||
if (signs.containsKey(e.getPlayer().getName())) {
|
||||
Block block = signs.get(e.getPlayer().getName());
|
||||
if (block.hasMetadata("TabooLib-Sign")) {
|
||||
block.removeMetadata("TabooLib-Sign", Main.getInst());
|
||||
block.removeMetadata("TabooLib-Sign-UUID", Main.getInst());
|
||||
block.setType(Material.AIR);
|
||||
block.setData((byte) 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void block(BlockPhysicsEvent e) {
|
||||
Block block = e.getBlock();
|
||||
if (block.hasMetadata("TabooLib-Sign")) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void blocku(BlockBreakEvent e) {
|
||||
Block block = e.getBlock();
|
||||
if (block.hasMetadata("TabooLib-Sign") && !e.getPlayer().isOp()) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package me.skymc.taboolib.sign;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import net.minecraft.server.v1_9_R2.BlockBanner;
|
||||
|
||||
@Deprecated
|
||||
public class TabooSignChangeEvent
|
||||
extends Event
|
||||
{
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private Player player;
|
||||
private Block block;
|
||||
private String[] lines;
|
||||
private String uuid;
|
||||
|
||||
public TabooSignChangeEvent(Player player, Block block, String[] lines, String uuid)
|
||||
{
|
||||
this.player = player;
|
||||
this.block = block;
|
||||
this.lines = lines;
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
public Player getPlayer()
|
||||
{
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public Block getBlock() {
|
||||
return this.block;
|
||||
}
|
||||
|
||||
public String[] getLines() {
|
||||
return this.lines;
|
||||
}
|
||||
|
||||
public String getUUID() {
|
||||
return this.uuid;
|
||||
}
|
||||
|
||||
public HandlerList getHandlers()
|
||||
{
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList()
|
||||
{
|
||||
return handlers;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user