From 3da97a98e63dffb9e6a103a979e04837ebf8c3ad Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Tue, 14 Jan 2025 03:27:29 -0800 Subject: [PATCH 1/3] O0oOoo0 --- .../asw/bukkit/service/ListenerService.java | 2 + .../listener/paper/PaperChunkLoadListener.kt | 55 +++++++++++++++++++ .../kotlin/io/wdsj/asw/bukkit/util/Utils.kt | 10 ++++ 3 files changed, 67 insertions(+) create mode 100644 bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt diff --git a/bukkit/src/main/java/io/wdsj/asw/bukkit/service/ListenerService.java b/bukkit/src/main/java/io/wdsj/asw/bukkit/service/ListenerService.java index fff600b..a1e2379 100644 --- a/bukkit/src/main/java/io/wdsj/asw/bukkit/service/ListenerService.java +++ b/bukkit/src/main/java/io/wdsj/asw/bukkit/service/ListenerService.java @@ -6,6 +6,7 @@ import io.wdsj.asw.bukkit.listener.*; import io.wdsj.asw.bukkit.listener.packet.ASWBookPacketListener; import io.wdsj.asw.bukkit.listener.packet.ASWChatPacketListener; +import io.wdsj.asw.bukkit.listener.paper.PaperChunkLoadListener; import io.wdsj.asw.bukkit.listener.paper.PaperFakeMessageExecutor; import io.wdsj.asw.bukkit.listener.paper.PaperItemSpawnListener; import io.wdsj.asw.bukkit.setting.PluginSettings; @@ -88,6 +89,7 @@ public void registerListeners() { if (settingsManager.getProperty(PluginSettings.CHECK_FOR_UPDATE)) { registerEventListener(JoinUpdateNotifier.class); } + registerEventListener(PaperChunkLoadListener.class); } public void unregisterListeners() { diff --git a/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt b/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt new file mode 100644 index 0000000..e677c2e --- /dev/null +++ b/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt @@ -0,0 +1,55 @@ +package io.wdsj.asw.bukkit.listener.paper + +import io.wdsj.asw.bukkit.AdvancedSensitiveWords.LOGGER +import io.wdsj.asw.bukkit.annotation.PaperEventHandler +import io.wdsj.asw.bukkit.util.Utils +import org.bukkit.block.Sign +import org.bukkit.block.sign.Side +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.Listener +import org.bukkit.event.world.ChunkLoadEvent +import java.util.concurrent.CompletableFuture + +@PaperEventHandler +class PaperChunkLoadListener : Listener { + + @EventHandler(priority = EventPriority.MONITOR) + fun onChunkLoad(event: ChunkLoadEvent) { + val snapshot = event.chunk.chunkSnapshot + + val potentialSignPositions = ArrayList>() + val minY = event.chunk.world.minHeight + val maxY = event.chunk.world.maxHeight + CompletableFuture.runAsync({ + for (x in 0 until 16) { + for (z in 0 until 16) { + for (y in minY until maxY) { + val blockData = snapshot.getBlockData(x, y, z) + + if (blockData.material.toString().contains("SIGN", true)) { + potentialSignPositions.add(Triple(x, y, z)) + } + } + } + } + + }, Utils.commonWorker) + .thenRun { + if (potentialSignPositions.isNotEmpty()) { + LOGGER.warning("Found signs in chunk ${event.chunk.x}, ${event.chunk.z}") + LOGGER.warning("Signs found: ${potentialSignPositions.size}") + LOGGER.warning("Signs found at: $potentialSignPositions") + for (triple in potentialSignPositions) { + val block = event.chunk.getBlock(triple.first, triple.second, triple.third) + val state = block.state + if (state is Sign) { + val lines = state.getSide(Side.FRONT) + + LOGGER.info("Sign at (${triple.first}, ${triple.second}, ${triple.third}) contains: $lines") + } + } + } + } + } +} \ No newline at end of file diff --git a/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/util/Utils.kt b/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/util/Utils.kt index a506a2f..6131ecd 100644 --- a/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/util/Utils.kt +++ b/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/util/Utils.kt @@ -1,17 +1,27 @@ package io.wdsj.asw.bukkit.util import com.github.houbb.heaven.util.lang.StringUtil +import com.google.common.util.concurrent.ThreadFactoryBuilder import io.wdsj.asw.bukkit.AdvancedSensitiveWords import io.wdsj.asw.bukkit.setting.PluginSettings import org.bukkit.Bukkit import org.bukkit.entity.Player import java.util.* +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors import java.util.concurrent.atomic.AtomicLong object Utils { @JvmField val messagesFilteredNum: AtomicLong = AtomicLong(0) + val commonWorker: ExecutorService = Executors.newCachedThreadPool( + ThreadFactoryBuilder() + .setNameFormat("ASW Common Worker-%d") + .setPriority(Thread.NORM_PRIORITY - 1) + .build() + ) + @JvmStatic fun getPlayerIp(player: Player): String { val address = player.address From c9cf7ddbf3190d65fa23ce90d1976c43c9a3d83d Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Tue, 14 Jan 2025 05:27:22 -0800 Subject: [PATCH 2/3] O0oOoo0 --- .../wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt b/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt index e677c2e..5608e83 100644 --- a/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt +++ b/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt @@ -21,7 +21,7 @@ class PaperChunkLoadListener : Listener { val potentialSignPositions = ArrayList>() val minY = event.chunk.world.minHeight val maxY = event.chunk.world.maxHeight - CompletableFuture.runAsync({ + CompletableFuture.supplyAsync({ for (x in 0 until 16) { for (z in 0 until 16) { for (y in minY until maxY) { @@ -33,7 +33,6 @@ class PaperChunkLoadListener : Listener { } } } - }, Utils.commonWorker) .thenRun { if (potentialSignPositions.isNotEmpty()) { @@ -42,7 +41,9 @@ class PaperChunkLoadListener : Listener { LOGGER.warning("Signs found at: $potentialSignPositions") for (triple in potentialSignPositions) { val block = event.chunk.getBlock(triple.first, triple.second, triple.third) + LOGGER.info("Sign at (${triple.first}, ${triple.second}, ${triple.third}), ${block.state}") val state = block.state + LOGGER.info(state.toString()) if (state is Sign) { val lines = state.getSide(Side.FRONT) From ac4356e2ec15575677aab0471982bdc65ae1492e Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Tue, 14 Jan 2025 10:14:38 -0800 Subject: [PATCH 3/3] todo --- .../io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt b/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt index 5608e83..af88d76 100644 --- a/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt +++ b/bukkit/src/main/kotlin/io/wdsj/asw/bukkit/listener/paper/PaperChunkLoadListener.kt @@ -43,6 +43,7 @@ class PaperChunkLoadListener : Listener { val block = event.chunk.getBlock(triple.first, triple.second, triple.third) LOGGER.info("Sign at (${triple.first}, ${triple.second}, ${triple.third}), ${block.state}") val state = block.state + // TODO: Implement actual logic here LOGGER.info(state.toString()) if (state is Sign) { val lines = state.getSide(Side.FRONT)