refactor: rewrite KaboomCheck
This commit is contained in:
parent
94085378a3
commit
c5ead7d843
4 changed files with 24 additions and 77 deletions
src/main/java/land/chipmunk/chipmunkmod
|
@ -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)");
|
||||
|
|
|
@ -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 () {}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue