From a6e0e72fb6d8c230664307796870dc0c950f3597 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Mon, 12 Jun 2023 05:54:46 +0200 Subject: [PATCH] cleanup sign logging --- .../java/de/diddiz/LogBlock/Consumer.java | 23 ------------------- src/main/java/de/diddiz/LogBlock/Updater.java | 3 ++- .../blockstate/BlockStateCodecSign.java | 13 ++++++++--- .../LogBlock/blockstate/BlockStateCodecs.java | 2 +- .../LogBlock/listeners/SignChangeLogging.java | 12 +++++++++- 5 files changed, 24 insertions(+), 29 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/Consumer.java b/src/main/java/de/diddiz/LogBlock/Consumer.java index 91a8abf..67e1e2c 100644 --- a/src/main/java/de/diddiz/LogBlock/Consumer.java +++ b/src/main/java/de/diddiz/LogBlock/Consumer.java @@ -36,7 +36,6 @@ import org.bukkit.World; import org.bukkit.block.BlockState; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.Waterlogged; -import org.bukkit.block.sign.Side; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -48,7 +47,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.projectiles.ProjectileSource; import de.diddiz.LogBlock.EntityChange.EntityChangeType; -import de.diddiz.LogBlock.blockstate.BlockStateCodecSign; import de.diddiz.LogBlock.blockstate.BlockStateCodecs; import de.diddiz.LogBlock.config.Config; import de.diddiz.LogBlock.events.BlockChangePreLogEvent; @@ -332,27 +330,6 @@ public class Consumer extends Thread { addQueueLast(new KillRow(location, killer == null ? null : killer, victim, weapon == null ? 0 : MaterialConverter.getOrAddMaterialId(weapon.getType()))); } - /** - * Logs an actor placing a sign along with its contents - * - * @param actor - * Actor placing the sign - * @param loc - * Location of the placed sign - * @param type - * BlockData of the sign - * @param side - * @param lines - * The four lines on the sign. - */ - public void queueSignChange(Actor actor, Location loc, BlockState state, Side side, String[] lines) { - BlockData type = state.getBlockData(); - if (!BukkitUtils.isSign(type.getMaterial())) { - return; - } - queueBlock(actor, loc, type, type, null, BlockStateCodecSign.INSTANCE.serialize(state, side, lines), null); - } - public void queueChat(Actor player, String message) { if (!Config.ignoredChat.isEmpty()) { String lowerCaseMessage = message.toLowerCase(); diff --git a/src/main/java/de/diddiz/LogBlock/Updater.java b/src/main/java/de/diddiz/LogBlock/Updater.java index a134893..8cf3897 100644 --- a/src/main/java/de/diddiz/LogBlock/Updater.java +++ b/src/main/java/de/diddiz/LogBlock/Updater.java @@ -638,6 +638,7 @@ class Updater { if (configVersion.compareTo(new ComparableVersion("1.13.1")) < 0) { logblock.getLogger().info("Updating tables to 1.13.1 ..."); + BlockStateCodecSign signCodec = new BlockStateCodecSign(); try (Connection conn = logblock.getConnection()) { conn.setAutoCommit(false); final Statement st = conn.createStatement(); @@ -675,7 +676,7 @@ class Updater { if (!nullBlock && signText != null) { String[] lines = signText.split("\0", 4); - byte[] bytes = Utils.serializeYamlConfiguration(BlockStateCodecSign.INSTANCE.serialize(null, Side.FRONT, lines)); + byte[] bytes = Utils.serializeYamlConfiguration(signCodec.serialize(null, Side.FRONT, lines)); Material replacedMaterial = MaterialConverter.getBlockData(replaced, -1).getMaterial(); Material typeMaterial = MaterialConverter.getBlockData(type, -1).getMaterial(); diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSign.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSign.java index f97a30b..64c2570 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSign.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSign.java @@ -19,9 +19,6 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; public class BlockStateCodecSign implements BlockStateCodec { - - public static final BlockStateCodecSign INSTANCE = new BlockStateCodecSign(); - @Override public Material[] getApplicableMaterials() { return BukkitUtils.getAllSignMaterials().toArray(new Material[BukkitUtils.getAllSignMaterials().size()]); @@ -122,6 +119,16 @@ public class BlockStateCodecSign implements BlockStateCodec { signSide.setColor(signColor); signSide.setGlowingText(glowing); } + } else { + sign.setEditable(true); + for (Side side : Side.values()) { + SignSide signSide = sign.getSide(side); + for (int i = 0; i < 4; i++) { + signSide.setLine(i, ""); + } + signSide.setColor(DyeColor.BLACK); + signSide.setGlowingText(false); + } } } } diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecs.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecs.java index b2be20f..4f1ed7c 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecs.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecs.java @@ -21,7 +21,7 @@ public class BlockStateCodecs { } static { - registerCodec(BlockStateCodecSign.INSTANCE); + registerCodec(new BlockStateCodecSign()); registerCodec(new BlockStateCodecSkull()); registerCodec(new BlockStateCodecBanner()); registerCodec(new BlockStateCodecSpawner()); diff --git a/src/main/java/de/diddiz/LogBlock/listeners/SignChangeLogging.java b/src/main/java/de/diddiz/LogBlock/listeners/SignChangeLogging.java index fe42178..ce84676 100644 --- a/src/main/java/de/diddiz/LogBlock/listeners/SignChangeLogging.java +++ b/src/main/java/de/diddiz/LogBlock/listeners/SignChangeLogging.java @@ -3,6 +3,9 @@ package de.diddiz.LogBlock.listeners; import de.diddiz.LogBlock.Actor; import de.diddiz.LogBlock.LogBlock; import de.diddiz.LogBlock.Logging; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; +import org.bukkit.block.sign.SignSide; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.SignChangeEvent; @@ -17,7 +20,14 @@ public class SignChangeLogging extends LoggingListener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onSignChange(SignChangeEvent event) { if (isLogging(event.getBlock().getWorld(), Logging.SIGNTEXT)) { - consumer.queueSignChange(Actor.actorFromEntity(event.getPlayer()), event.getBlock().getLocation(), event.getBlock().getState(), event.getSide(), event.getLines()); + BlockState newState = event.getBlock().getState(); + if (newState instanceof Sign sign) { + SignSide signSide = sign.getSide(event.getSide()); + for (int i = 0; i < 4; i++) { + signSide.setLine(i, event.getLine(i)); + } + consumer.queueBlockReplace(Actor.actorFromEntity(event.getPlayer()), event.getBlock().getState(), newState); + } } } }