diff --git a/BauSystem_Main/pom.xml b/BauSystem_Main/pom.xml
index 3aa54e7..cb63fc7 100644
--- a/BauSystem_Main/pom.xml
+++ b/BauSystem_Main/pom.xml
@@ -79,5 +79,12 @@
system
${main.basedir}/lib/WorldEdit-1.15.jar
+
+ steamwar
+ ProtocolLib
+ 4.5.0
+ system
+ ${main.basedir}/lib/ProtocolLib.jar
+
diff --git a/BauSystem_Main/src/de/steamwar/bausystem/world/RegionListener.java b/BauSystem_Main/src/de/steamwar/bausystem/world/RegionListener.java
index 0719a4f..a7641e7 100644
--- a/BauSystem_Main/src/de/steamwar/bausystem/world/RegionListener.java
+++ b/BauSystem_Main/src/de/steamwar/bausystem/world/RegionListener.java
@@ -20,18 +20,33 @@
package de.steamwar.bausystem.world;
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.events.PacketAdapter;
+import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.events.PacketEvent;
+import com.comphenix.protocol.wrappers.BlockPosition;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.core.Core;
+import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
+import com.comphenix.protocol.ProtocolLibrary;
+import org.bukkit.block.Block;
+import org.bukkit.block.Sign;
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.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
+import org.bukkit.event.player.PlayerInteractEvent;
+
+import java.util.logging.Level;
+
+import java.lang.reflect.InvocationTargetException;
public class RegionListener implements Listener {
@@ -98,4 +113,53 @@ public class RegionListener implements Listener {
event.setLine(i, line);
}
}
+
+ @EventHandler
+ public void editSign(PlayerInteractEvent event) {
+ if(event.getAction() != Action.RIGHT_CLICK_BLOCK ||
+ !event.getClickedBlock().getType().name().contains("_SIGN") ||
+ !event.getPlayer().isSneaking())
+ return;
+ Player player = event.getPlayer();
+ Sign sign = (Sign) event.getClickedBlock().getState();
+ String[] lines = sign.getLines();
+ for (int i = 0; i < lines.length; i++) {
+ sign.setLine(i, lines[i].replace('ยง', '&'));
+ }
+ sign.update();
+ PacketContainer signOpen = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.OPEN_SIGN_EDITOR);
+ signOpen.getBlockPositionModifier().write(0, new BlockPosition(event.getClickedBlock().getLocation().toVector()));
+ try {
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, signOpen);
+ } catch (InvocationTargetException e) {
+ Bukkit.getLogger().log(Level.SEVERE, "Invocation target exception", e);
+ }
+
+ ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(BauSystem.getPlugin(), PacketType.Play.Client.UPDATE_SIGN) {
+ @Override
+ public void onPacketReceiving(PacketEvent event) {
+ if(!event.getPlayer().equals(player))
+ return;
+ event.setCancelled(true);
+ Bukkit.getScheduler().runTask(BauSystem.getPlugin(), () -> {
+ PacketContainer packetContainer = event.getPacket();
+ BlockPosition position = packetContainer.getBlockPositionModifier().read(0);
+ String[] lines = packetContainer.getStringArrays().read(0);
+
+ Block signLoc = position.toLocation(player.getWorld()).getBlock();
+ if(!signLoc.getType().name().contains("_SIGN"))
+ return;
+
+ Sign sign = ((Sign) signLoc.getState());
+ sign.setEditable(true);
+ for (int i = 0; i < lines.length; i++) {
+ sign.setLine(i, ChatColor.translateAlternateColorCodes('&', lines[i]));
+ }
+ sign.update();
+
+ ProtocolLibrary.getProtocolManager().removePacketListener(this);
+ });
+ }
+ });
+ }
}
diff --git a/BauSystem_Main/src/plugin.yml b/BauSystem_Main/src/plugin.yml
index bc85fb9..5460f05 100644
--- a/BauSystem_Main/src/plugin.yml
+++ b/BauSystem_Main/src/plugin.yml
@@ -1,7 +1,7 @@
name: BauSystem
author: Lixfel
version: "1.0"
-depend: [WorldEdit, SpigotCore]
+depend: [WorldEdit, SpigotCore, ProtocolLib]
load: POSTWORLD
main: de.steamwar.bausystem.BauSystem
api-version: "1.13"