Merge pull request 'Rewrite KaboomCheck' () from amy/chomens-chipmunkmod:1.20.1 into 1.20.1

Reviewed-on: 
This commit is contained in:
Chayapak 2025-01-25 21:21:27 -05:00
commit a4a9fcf0b4
4 changed files with 24 additions and 77 deletions
src/main/java/land/chipmunk/chipmunkmod

View file

@ -2,7 +2,6 @@ package land.chipmunk.chipmunkmod;
import land.chipmunk.chipmunkmod.config.ChipmunkModMigrations;
import land.chipmunk.chipmunkmod.config.Configuration;
import land.chipmunk.chipmunkmod.modules.KaboomCheck;
import land.chipmunk.chipmunkmod.modules.SelfCare;
import land.chipmunk.chipmunkmod.util.configurate.ConfigurateUtilities;
import net.fabricmc.api.ModInitializer;
@ -40,7 +39,6 @@ public class ChipmunkMod implements ModInitializer {
throw new RuntimeException("Could not load the config", exception);
}
KaboomCheck.INSTANCE.init();
SelfCare.INSTANCE.init();
LOGGER.info("Loaded ChipmunkMod (chayapak's fork)");

View file

@ -4,13 +4,10 @@ import net.minecraft.network.packet.Packet;
import net.minecraft.text.Text;
public interface Listener {
default void chatMessageReceived (Text message) {}
default void packetReceived (Packet<?> packet) {}
default void chatMessageReceived (Text message) {}
default void packetSent (Packet<?> packet) {}
default void coreReady () {}
default void coreMoved () {}
}

View file

@ -1,5 +1,6 @@
package land.chipmunk.chipmunkmod.mixin;
import com.mojang.brigadier.CommandDispatcher;
import land.chipmunk.chipmunkmod.ChipmunkMod;
import land.chipmunk.chipmunkmod.command.CommandManager;
import land.chipmunk.chipmunkmod.listeners.Listener;
@ -8,12 +9,14 @@ import land.chipmunk.chipmunkmod.modules.*;
import land.chipmunk.chipmunkmod.modules.custom_chat.CustomChat;
import net.minecraft.client.MinecraftClient;
import net.minecraft.command.CommandRegistryAccess;
import net.minecraft.command.CommandSource;
import net.minecraft.network.encryption.NetworkEncryptionUtils;
import net.minecraft.network.message.LastSeenMessagesCollector;
import net.minecraft.network.message.MessageBody;
import net.minecraft.network.message.MessageChain;
import net.minecraft.network.message.MessageSignatureData;
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket;
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket;
import net.minecraft.registry.DynamicRegistryManager;
@ -38,6 +41,7 @@ public class ClientPlayNetworkHandlerMixin {
@Shadow private DynamicRegistryManager.Immutable combinedDynamicRegistries;
@Shadow private LastSeenMessagesCollector lastSeenMessagesCollector;
@Shadow private MessageChain.Packer messagePacker;
@Shadow private CommandDispatcher<CommandSource> commandDispatcher;
@Inject(method = "onGameJoin", at = @At("TAIL"))
private void onGameJoin (GameJoinS2CPacket packet, CallbackInfo ci) {
@ -54,6 +58,11 @@ public class ClientPlayNetworkHandlerMixin {
CustomChat.INSTANCE.init();
}
@Inject(method = "onCommandTree", at = @At("TAIL"))
private void onCommandTree(final CommandTreeS2CPacket packet, final CallbackInfo ci) {
KaboomCheck.INSTANCE.onCommandTree(this.commandDispatcher);
}
@Inject(method = "onGameMessage", at = @At("HEAD"), cancellable = true)
private void onGameMessage (GameMessageS2CPacket packet, CallbackInfo ci) {
final Text message = packet.content();

View file

@ -1,83 +1,26 @@
package land.chipmunk.chipmunkmod.modules;
import com.mojang.brigadier.suggestion.Suggestion;
import com.mojang.brigadier.suggestion.Suggestions;
import land.chipmunk.chipmunkmod.listeners.Listener;
import land.chipmunk.chipmunkmod.listeners.ListenerManager;
import com.mojang.brigadier.CommandDispatcher;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.packet.s2c.play.CommandSuggestionsS2CPacket;
import net.minecraft.command.CommandSource;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.CompletableFuture;
public class KaboomCheck {
private static final String CHECKED_COMMAND_OP = "extras:prefix"; // Added circa 2018
private static final String CHECKED_COMMAND = "minecraft:op"; // It'd be a bit weird for non-Kaboom servers to allow /op without OP...
public static final KaboomCheck INSTANCE = new KaboomCheck();
public class KaboomCheck implements Listener {
private final MinecraftClient client = MinecraftClient.getInstance();
public boolean isKaboom = false;
private Timer timer = null;
private final MinecraftClient client;
public static final KaboomCheck INSTANCE = new KaboomCheck(MinecraftClient.getInstance());
public KaboomCheck (MinecraftClient client) {
this.client = client;
ListenerManager.addListener(this);
public void onJoin() {
this.isKaboom = false;
}
public void init () {}
public void onCommandTree(final CommandDispatcher<CommandSource> dispatcher) {
assert client.player != null; // We can only receive this packet while in a server
final String checkedCommand = client.player.getPermissionLevel() == 4
? CHECKED_COMMAND_OP : CHECKED_COMMAND;
public void onJoin () {
final TimerTask task = new TimerTask() {
public void run () {
tick();
}
};
if (timer != null) cleanup();
timer = new Timer();
timer.schedule(task, 50, 50);
check();
this.isKaboom = dispatcher.getRoot().getChild(checkedCommand) != null;
}
private void tick () {
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
if (networkHandler == null) cleanup();
}
private void check () {
final CompletableFuture<CommandSuggestionsS2CPacket> future = TabComplete.INSTANCE.complete("/ver ");
future.thenApply((packet) -> {
final Suggestions suggestions = packet.getSuggestions();
for (int i = 0; i < suggestions.getList().size(); i++) {
final Suggestion suggestion = suggestions.getList().get(i);
if (suggestion.getText().equals("Extras")) {
isKaboom = true;
break;
}
}
return true;
});
}
private void cleanup () {
if (timer == null) return;
isKaboom = false;
timer.purge();
timer.cancel();
}
}