diff --git a/src/main/java/io/github/sakurawald/common/structure/GameProfileCacheEx.java b/src/main/java/io/github/sakurawald/common/GameProfileCacheEx.java similarity index 100% rename from src/main/java/io/github/sakurawald/common/structure/GameProfileCacheEx.java rename to src/main/java/io/github/sakurawald/common/GameProfileCacheEx.java diff --git a/src/main/java/io/github/sakurawald/common/structure/Position.java b/src/main/java/io/github/sakurawald/common/Position.java similarity index 97% rename from src/main/java/io/github/sakurawald/common/structure/Position.java rename to src/main/java/io/github/sakurawald/common/Position.java index 469001e40..81025b15b 100644 --- a/src/main/java/io/github/sakurawald/common/structure/Position.java +++ b/src/main/java/io/github/sakurawald/common/Position.java @@ -1,4 +1,4 @@ -package io.github.sakurawald.common.structure; +package io.github.sakurawald.common; import io.github.sakurawald.Fuji; import io.github.sakurawald.util.MessageUtil; diff --git a/src/main/java/io/github/sakurawald/common/event/PreCommandExecuteEvent.java b/src/main/java/io/github/sakurawald/common/event/PreCommandExecuteEvent.java deleted file mode 100644 index 07bf04276..000000000 --- a/src/main/java/io/github/sakurawald/common/event/PreCommandExecuteEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.github.sakurawald.common.event; - -import com.mojang.brigadier.ParseResults; -import com.mojang.brigadier.context.CommandContext; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.util.ActionResult; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -public interface PreCommandExecuteEvent { - Event EVENT = EventFactory.createArrayBacked(PreCommandExecuteEvent.class, - (listeners) -> (parseResults, string) -> { - for (PreCommandExecuteEvent listener : listeners) { - ActionResult result = listener.interact(parseResults, string); - if (result != ActionResult.PASS) { - return result; - } - } - return ActionResult.PASS; - }); - - ActionResult interact(ParseResults parseResults, String string); -} diff --git a/src/main/java/io/github/sakurawald/config/model/HomeModel.java b/src/main/java/io/github/sakurawald/config/model/HomeModel.java index a981791a9..289988acf 100644 --- a/src/main/java/io/github/sakurawald/config/model/HomeModel.java +++ b/src/main/java/io/github/sakurawald/config/model/HomeModel.java @@ -1,6 +1,6 @@ package io.github.sakurawald.config.model; -import io.github.sakurawald.common.structure.Position; +import io.github.sakurawald.common.Position; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/io/github/sakurawald/module/initializer/back/BackModule.java b/src/main/java/io/github/sakurawald/module/initializer/back/BackModule.java index a936d1196..550534dd0 100644 --- a/src/main/java/io/github/sakurawald/module/initializer/back/BackModule.java +++ b/src/main/java/io/github/sakurawald/module/initializer/back/BackModule.java @@ -6,7 +6,7 @@ import io.github.sakurawald.common.event.PrePlayerDeathEvent; import io.github.sakurawald.config.Configs; import io.github.sakurawald.module.initializer.ModuleInitializer; -import io.github.sakurawald.common.structure.Position; +import io.github.sakurawald.common.Position; import io.github.sakurawald.util.CommandUtil; import io.github.sakurawald.util.MessageUtil; import lombok.Getter; diff --git a/src/main/java/io/github/sakurawald/module/initializer/command_cooldown/CommandCooldownModule.java b/src/main/java/io/github/sakurawald/module/initializer/command_cooldown/CommandCooldownModule.java index 281d69b37..3c4516076 100644 --- a/src/main/java/io/github/sakurawald/module/initializer/command_cooldown/CommandCooldownModule.java +++ b/src/main/java/io/github/sakurawald/module/initializer/command_cooldown/CommandCooldownModule.java @@ -1,34 +1,15 @@ package io.github.sakurawald.module.initializer.command_cooldown; -import io.github.sakurawald.common.event.PreCommandExecuteEvent; import io.github.sakurawald.config.Configs; import io.github.sakurawald.module.initializer.ModuleInitializer; import java.util.HashMap; import java.util.Map; - -import io.github.sakurawald.util.MessageUtil; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.ActionResult; public class CommandCooldownModule extends ModuleInitializer { private final HashMap> map = new HashMap<>(); - @Override - public void onInitialize() { - PreCommandExecuteEvent.EVENT.register((parseResults, string) -> { - ServerPlayerEntity player = parseResults.getContext().getSource().getPlayer(); - if (player == null) return ActionResult.PASS; - - long cooldown = this.calculateCommandCooldown(player, string); - if (cooldown > 0) { - MessageUtil.sendActionBar(player, "command_cooldown.cooldown", cooldown / 1000); - return ActionResult.FAIL; - } - - return ActionResult.PASS; - }); - } public long calculateCommandCooldown(ServerPlayerEntity player, String commandLine) { diff --git a/src/main/java/io/github/sakurawald/module/initializer/command_spy/CommandSpyModule.java b/src/main/java/io/github/sakurawald/module/initializer/command_spy/CommandSpyModule.java deleted file mode 100644 index e1d81435f..000000000 --- a/src/main/java/io/github/sakurawald/module/initializer/command_spy/CommandSpyModule.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.github.sakurawald.module.initializer.command_spy; - -import io.github.sakurawald.Fuji; -import io.github.sakurawald.common.event.PreCommandExecuteEvent; -import io.github.sakurawald.module.initializer.ModuleInitializer; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.ActionResult; - -public class CommandSpyModule extends ModuleInitializer { - @Override - public void onInitialize() { - PreCommandExecuteEvent.EVENT.register((parseResults, string) -> { - ServerPlayerEntity player = parseResults.getContext().getSource().getPlayer(); - if (player == null) return ActionResult.PASS; - - // fix: fabric console will not log the command issue - Fuji.LOGGER.info("{} issued server command: {}", player.getGameProfile().getName(), string); - - return ActionResult.PASS; - }); - } -} diff --git a/src/main/java/io/github/sakurawald/module/initializer/home/HomeModule.java b/src/main/java/io/github/sakurawald/module/initializer/home/HomeModule.java index cedf64a5e..9509bc341 100644 --- a/src/main/java/io/github/sakurawald/module/initializer/home/HomeModule.java +++ b/src/main/java/io/github/sakurawald/module/initializer/home/HomeModule.java @@ -10,7 +10,7 @@ import io.github.sakurawald.config.handler.ObjectConfigHandler; import io.github.sakurawald.config.model.HomeModel; import io.github.sakurawald.module.initializer.ModuleInitializer; -import io.github.sakurawald.common.structure.Position; +import io.github.sakurawald.common.Position; import io.github.sakurawald.util.CommandUtil; import io.github.sakurawald.util.MessageUtil; import io.github.sakurawald.util.ScheduleUtil; diff --git a/src/main/java/io/github/sakurawald/module/initializer/reply/ReplyModule.java b/src/main/java/io/github/sakurawald/module/initializer/reply/ReplyModule.java index 0bd1eb07b..d34a6bc3e 100644 --- a/src/main/java/io/github/sakurawald/module/initializer/reply/ReplyModule.java +++ b/src/main/java/io/github/sakurawald/module/initializer/reply/ReplyModule.java @@ -6,7 +6,6 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import io.github.sakurawald.Fuji; -import io.github.sakurawald.common.event.PreCommandExecuteEvent; import io.github.sakurawald.module.initializer.ModuleInitializer; import io.github.sakurawald.util.CommandUtil; import io.github.sakurawald.util.MessageUtil; @@ -14,7 +13,6 @@ import net.minecraft.command.CommandRegistryAccess; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; import static net.minecraft.server.command.CommandManager.argument; diff --git a/src/main/java/io/github/sakurawald/module/initializer/resource_world/ResourceWorldManager.java b/src/main/java/io/github/sakurawald/module/initializer/resource_world/ResourceWorldManager.java index 1c29ae1ae..14403605f 100644 --- a/src/main/java/io/github/sakurawald/module/initializer/resource_world/ResourceWorldManager.java +++ b/src/main/java/io/github/sakurawald/module/initializer/resource_world/ResourceWorldManager.java @@ -2,7 +2,7 @@ import io.github.sakurawald.module.ModuleManager; import io.github.sakurawald.module.initializer.resource_world.interfaces.SimpleRegistryMixinInterface; -import io.github.sakurawald.common.structure.Position; +import io.github.sakurawald.common.Position; import io.github.sakurawald.module.initializer.teleport_warmup.TeleportTicket; import io.github.sakurawald.module.initializer.teleport_warmup.TeleportWarmupModule; import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; diff --git a/src/main/java/io/github/sakurawald/module/initializer/teleport_warmup/TeleportTicket.java b/src/main/java/io/github/sakurawald/module/initializer/teleport_warmup/TeleportTicket.java index fc09c43fd..5331fa508 100644 --- a/src/main/java/io/github/sakurawald/module/initializer/teleport_warmup/TeleportTicket.java +++ b/src/main/java/io/github/sakurawald/module/initializer/teleport_warmup/TeleportTicket.java @@ -1,6 +1,6 @@ package io.github.sakurawald.module.initializer.teleport_warmup; -import io.github.sakurawald.common.structure.Position; +import io.github.sakurawald.common.Position; import io.github.sakurawald.util.MessageUtil; import net.kyori.adventure.bossbar.BossBar; import net.minecraft.server.network.ServerPlayerEntity; diff --git a/src/main/java/io/github/sakurawald/module/mixin/command_cooldown/CommandsMixin.java b/src/main/java/io/github/sakurawald/module/mixin/command_cooldown/CommandsMixin.java new file mode 100644 index 000000000..5baa240ee --- /dev/null +++ b/src/main/java/io/github/sakurawald/module/mixin/command_cooldown/CommandsMixin.java @@ -0,0 +1,36 @@ +package io.github.sakurawald.module.mixin.command_cooldown; + +import com.mojang.brigadier.ParseResults; +import io.github.sakurawald.module.ModuleManager; +import io.github.sakurawald.module.initializer.command_cooldown.CommandCooldownModule; +import io.github.sakurawald.util.MessageUtil; +import net.minecraft.server.command.CommandManager; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(CommandManager.class) + +public class CommandsMixin { + + @Unique + private static final CommandCooldownModule module = ModuleManager.getInitializer(CommandCooldownModule.class); + + // If you issue "///abcdefg", then commandLine = "//abcdefg" + @Inject(method = "execute", at = @At("HEAD"), cancellable = true) + public void $execute(ParseResults parseResults, String string, CallbackInfo ci) { + ServerPlayerEntity player = parseResults.getContext().getSource().getPlayer(); + if (player == null) return; + + long cooldown = module.calculateCommandCooldown(player, string); + if (cooldown > 0) { + MessageUtil.sendActionBar(player, "command_cooldown.cooldown", cooldown / 1000); + ci.cancel(); + } + } +} diff --git a/src/main/java/io/github/sakurawald/module/mixin/command_spy/CommandsMixin.java b/src/main/java/io/github/sakurawald/module/mixin/command_spy/CommandsMixin.java new file mode 100644 index 000000000..81536628e --- /dev/null +++ b/src/main/java/io/github/sakurawald/module/mixin/command_spy/CommandsMixin.java @@ -0,0 +1,26 @@ +package io.github.sakurawald.module.mixin.command_spy; + +import com.mojang.brigadier.ParseResults; +import io.github.sakurawald.Fuji; +import net.minecraft.server.command.CommandManager; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(CommandManager.class) +public class CommandsMixin { + + // If you issue "///abcdefg", then commandLine = "//abcdefg" + @Inject(method = "execute", at = @At("HEAD")) + public void $execute(ParseResults parseResults, String string, CallbackInfo ci) { + ServerPlayerEntity player = parseResults.getContext().getSource().getPlayer(); + if (player == null) return; + + // fix: fabric console will not log the command issue + Fuji.LOGGER.info("{} issued server command: {}", player.getGameProfile().getName(), string); + } +} diff --git a/src/main/java/io/github/sakurawald/module/mixin/teleport_warmup/ServerPlayerMixin.java b/src/main/java/io/github/sakurawald/module/mixin/teleport_warmup/ServerPlayerMixin.java index 3d58e7183..ef29b9cda 100644 --- a/src/main/java/io/github/sakurawald/module/mixin/teleport_warmup/ServerPlayerMixin.java +++ b/src/main/java/io/github/sakurawald/module/mixin/teleport_warmup/ServerPlayerMixin.java @@ -2,7 +2,7 @@ import io.github.sakurawald.module.ModuleManager; import io.github.sakurawald.module.initializer.back.BackModule; -import io.github.sakurawald.common.structure.Position; +import io.github.sakurawald.common.Position; import io.github.sakurawald.module.initializer.teleport_warmup.ServerPlayerCombatStateAccessor; import io.github.sakurawald.module.initializer.teleport_warmup.TeleportTicket; import io.github.sakurawald.module.initializer.teleport_warmup.TeleportWarmupModule; diff --git a/src/main/resources/fuji.mixins.json b/src/main/resources/fuji.mixins.json index 8f53030ab..22a6dfe30 100755 --- a/src/main/resources/fuji.mixins.json +++ b/src/main/resources/fuji.mixins.json @@ -4,6 +4,8 @@ "compatibilityLevel": "JAVA_17", "plugin": "io.github.sakurawald.module.mixin.ModuleMixinConfigPlugin", "mixins": [ + "_internal.event.PlayerManagerMixin", + "_internal.event.ServerPlayerEntityMixin", "_internal.event.ServerPlayNetworkHandlerMixin", "_internal.server_instance.MinecraftServerMixin", "afk.PlayerListMixin", @@ -22,6 +24,7 @@ "command_cooldown.CommandsMixin", "command_interactive.SignBlockMixin", "command_permission.CommandNodeAccessor", + "command_spy.CommandsMixin", "command_rewrite.ServerPlayNetworkHandlerMixin", "enchantment.EnchantmentScreenHandlerMixin", "fake_player_manager.PlayerCommandMixin",