From a6561de5be9309448a523eccfbbb0dbe6aafc667 Mon Sep 17 00:00:00 2001 From: hexlocation Date: Sun, 16 Mar 2025 09:55:16 +0100 Subject: [PATCH] add: source code --- .classpath | 57 ++++++++++++ .factorypath | 49 ++++++++++ .project | 34 +++++++ .settings/org.eclipse.core.resources.prefs | 2 + .settings/org.eclipse.jdt.apt.core.prefs | 4 + .settings/org.eclipse.jdt.core.prefs | 9 ++ .settings/org.eclipse.m2e.core.prefs | 4 + pom.xml | 35 +++++++ src/main/java/dev/hex/silencer/Silencer.java | 88 ++++++++++++++++++ src/main/resources/config.yml | 7 ++ src/main/resources/paper-plugin.yml | 5 + src/main/resources/plugin.yml | 4 + target/classes/config.yml | 7 ++ .../classes/dev/hex/silencer/Silencer.class | Bin 0 -> 8299 bytes target/classes/paper-plugin.yml | 5 + target/classes/plugin.yml | 4 + target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 0 .../compile/default-compile/inputFiles.lst | 1 + target/silencer-1.0.0.jar | Bin 0 -> 5660 bytes 20 files changed, 318 insertions(+) create mode 100644 .classpath create mode 100644 .factorypath create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.apt.core.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 pom.xml create mode 100644 src/main/java/dev/hex/silencer/Silencer.java create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/paper-plugin.yml create mode 100644 src/main/resources/plugin.yml create mode 100644 target/classes/config.yml create mode 100644 target/classes/dev/hex/silencer/Silencer.class create mode 100644 target/classes/paper-plugin.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/silencer-1.0.0.jar diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..df66b20 --- /dev/null +++ b/.classpath @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.factorypath b/.factorypath new file mode 100644 index 0000000..a260be9 --- /dev/null +++ b/.factorypath @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..cee294f --- /dev/null +++ b/.project @@ -0,0 +1,34 @@ + + + silencer + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1742071841443 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..dfa4f3a --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..87f474b --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..cfe7866 --- /dev/null +++ b/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + dev.hex + silencer + 1.0.0 + + + UTF-8 + UTF-8 + 17 + 17 + + + + + paper + https://repo.papermc.io/repository/maven-public/ + + + + + + io.papermc.paper + paper-api + 1.21.4-R0.1-SNAPSHOT + provided + + + + + diff --git a/src/main/java/dev/hex/silencer/Silencer.java b/src/main/java/dev/hex/silencer/Silencer.java new file mode 100644 index 0000000..7ab0e0d --- /dev/null +++ b/src/main/java/dev/hex/silencer/Silencer.java @@ -0,0 +1,88 @@ +package dev.hex.silencer; + +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; +import org.bukkit.plugin.java.JavaPlugin; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.tree.LiteralCommandNode; + +import io.papermc.paper.command.brigadier.CommandSourceStack; +import io.papermc.paper.command.brigadier.Commands; +import io.papermc.paper.command.brigadier.argument.ArgumentTypes; +import io.papermc.paper.command.brigadier.argument.resolvers.selector.PlayerSelectorArgumentResolver; +import io.papermc.paper.event.player.AsyncChatEvent; +import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; + +public class Silencer extends JavaPlugin implements Listener { + + private LiteralCommandNode muteCommand() { + return Commands.literal("mute") + .then(Commands.argument("targets", ArgumentTypes.players()) + .executes(ctx -> { + final PlayerSelectorArgumentResolver targetResolver = ctx.getArgument("targets", + PlayerSelectorArgumentResolver.class); + final List targets = targetResolver.resolve(ctx.getSource()); + final CommandSender commandExecutor = ctx.getSource().getSender(); + + for (final Player target : targets) { + NamespacedKey key = new NamespacedKey(this, "isMuted"); + PersistentDataContainer pdc = target.getPersistentDataContainer(); + + boolean isMuted = false; + + if (pdc.has(key)) + isMuted = pdc.get(key, PersistentDataType.BOOLEAN); + + pdc.set(key, PersistentDataType.BOOLEAN, !isMuted); + + final Component component = MiniMessage.miniMessage().deserialize( + String.format(getConfig().getString(isMuted ? "messages.UNMUTE_CMD_RESPONSE" + : "messages.MUTE_CMD_RESPONSE"), target.getName())); + + commandExecutor.sendMessage(component); + } + + return Command.SINGLE_SUCCESS; + })) + .build(); + } + + @Override + public void onEnable() { + saveResource("config.yml", false); + saveDefaultConfig(); + + Bukkit.getLogger().info("Seems like we are ready to go!"); + + getServer().getPluginManager().registerEvents(this, this); + + getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, commands -> { + commands.registrar().register(muteCommand()); + }); + } + + @EventHandler + public void onPlayerChat(AsyncChatEvent ev) { + + PersistentDataContainer pdc = ev.getPlayer().getPersistentDataContainer(); + NamespacedKey pKey = new NamespacedKey(this, "isMuted"); + + if (pdc.has(pKey, PersistentDataType.BOOLEAN) && pdc.get(pKey, PersistentDataType.BOOLEAN)) { + ev.getPlayer().sendMessage( + MiniMessage.miniMessage().deserialize(getConfig().getString("messages.MUTE_OFFENDER_RESPONSE"))); + ev.setCancelled(true); + } + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..44c9b80 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,7 @@ +# Silencer configuration file. + +messages: + MUTE_CMD_RESPONSE: "%s has been muted." + UNMUTE_CMD_RESPONSE: "%s has been unmuted." + MUTE_OFFENDER_RESPONSE: "You have been muted!" + diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..0f2507c --- /dev/null +++ b/src/main/resources/paper-plugin.yml @@ -0,0 +1,5 @@ +name: Silencer +version: '1.0' +main: dev.hex.silencer.Silencer +description: A simple mute plugin. +api-version: '1.21.4' diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..56c10c7 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: Silencer +author: hex +main: dev.hex.silencer.Silencer +version: 1.0.0 diff --git a/target/classes/config.yml b/target/classes/config.yml new file mode 100644 index 0000000..c783139 --- /dev/null +++ b/target/classes/config.yml @@ -0,0 +1,7 @@ +# Silencer configuration file. + +messages: + MUTE_CMD_RESPONSE: "%p has been muted." + UNMUTE_CMD_RESPONSE: "%p has been unmuted." + MUTE_OFFENDER_RESPONSE: "You have been muted!" + diff --git a/target/classes/dev/hex/silencer/Silencer.class b/target/classes/dev/hex/silencer/Silencer.class new file mode 100644 index 0000000000000000000000000000000000000000..707dc6a874193a82f4dc4766f67c44ca7e5eed2c GIT binary patch literal 8299 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 literal 0 HcmV?d00001