mirror of
https://code.chipmunk.land/ChomeNS/chipmunkmod.git
synced 2025-11-13 18:46:15 +00:00
refactor: use Wrap* for mixins
refactor: remove TransactionManager since it's unused refactor: fix some warnings about ClientPlayNetworkHandler being nullable and some more stuff i might have forgor to put here more stuff coming in the next commits !!!
This commit is contained in:
parent
bb8bb88489
commit
1afb5583b4
13 changed files with 158 additions and 125 deletions
|
|
@ -52,6 +52,8 @@ public class ChatInputSuggestorMixin {
|
||||||
public void refresh(CallbackInfo ci) {
|
public void refresh(CallbackInfo ci) {
|
||||||
final CommandManager commandManager = CommandManager.INSTANCE;
|
final CommandManager commandManager = CommandManager.INSTANCE;
|
||||||
|
|
||||||
|
if (this.textField == null) return;
|
||||||
|
|
||||||
final String text = this.textField.getText();
|
final String text = this.textField.getText();
|
||||||
final int cursor = this.textField.getCursor();
|
final int cursor = this.textField.getCursor();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
package land.chipmunk.chipmunkmod.mixin;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
import land.chipmunk.chipmunkmod.ChipmunkMod;
|
import land.chipmunk.chipmunkmod.ChipmunkMod;
|
||||||
import land.chipmunk.chipmunkmod.data.ChomeNSBotCommand;
|
import land.chipmunk.chipmunkmod.data.ChomeNSBotCommand;
|
||||||
import land.chipmunk.chipmunkmod.modules.ChomeNSBotCommandSuggestions;
|
import land.chipmunk.chipmunkmod.modules.ChomeNSBotCommandSuggestions;
|
||||||
|
|
@ -35,8 +37,8 @@ public abstract class ChatScreenMixin {
|
||||||
chatField.setMaxLength(Integer.MAX_VALUE);
|
chatField.setMaxLength(Integer.MAX_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "sendMessage", at = @At("HEAD"), cancellable = true)
|
@WrapMethod(method = "sendMessage")
|
||||||
private void sendMessage(String chatText, boolean addToHistory, CallbackInfo cir) {
|
private void sendMessage(final String chatText, final boolean addToHistory, final Operation<Void> original) {
|
||||||
final MinecraftClient client = MinecraftClient.getInstance();
|
final MinecraftClient client = MinecraftClient.getInstance();
|
||||||
|
|
||||||
if (addToHistory) {
|
if (addToHistory) {
|
||||||
|
|
@ -67,7 +69,7 @@ public abstract class ChatScreenMixin {
|
||||||
connection.getInputStream().close();
|
connection.getInputStream().close();
|
||||||
connection.disconnect();
|
connection.disconnect();
|
||||||
} catch (IOException | URISyntaxException e) {
|
} catch (IOException | URISyntaxException e) {
|
||||||
e.printStackTrace();
|
ChipmunkMod.LOGGER.error("Error while trying to request TestBot webhook", e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (chatText.startsWith(ChipmunkMod.CONFIG.bots.chomens.prefix)) {
|
} else if (chatText.startsWith(ChipmunkMod.CONFIG.bots.chomens.prefix)) {
|
||||||
|
|
@ -95,9 +97,6 @@ public abstract class ChatScreenMixin {
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
BotValidationUtilities.chomens(chatText.substring(prefixLength));
|
BotValidationUtilities.chomens(chatText.substring(prefixLength));
|
||||||
|
|
||||||
cir.cancel();
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
}
|
}
|
||||||
|
|
@ -112,6 +111,6 @@ public abstract class ChatScreenMixin {
|
||||||
client.player.networkHandler.sendChatMessage(chatText);
|
client.player.networkHandler.sendChatMessage(chatText);
|
||||||
}
|
}
|
||||||
|
|
||||||
cir.cancel();
|
// :D
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
package land.chipmunk.chipmunkmod.mixin;
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
|
import land.chipmunk.chipmunkmod.ChipmunkMod;
|
||||||
import land.chipmunk.chipmunkmod.listeners.Listener;
|
import land.chipmunk.chipmunkmod.listeners.Listener;
|
||||||
import land.chipmunk.chipmunkmod.listeners.ListenerManager;
|
import land.chipmunk.chipmunkmod.listeners.ListenerManager;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.world.ClientWorld;
|
import net.minecraft.client.world.ClientWorld;
|
||||||
|
import net.minecraft.network.PacketCallbacks;
|
||||||
import net.minecraft.network.listener.PacketListener;
|
import net.minecraft.network.listener.PacketListener;
|
||||||
import net.minecraft.network.packet.Packet;
|
import net.minecraft.network.packet.Packet;
|
||||||
import net.minecraft.network.packet.c2s.play.RequestCommandCompletionsC2SPacket;
|
import net.minecraft.network.packet.c2s.play.RequestCommandCompletionsC2SPacket;
|
||||||
|
|
@ -14,9 +17,6 @@ import net.minecraft.sound.SoundEvent;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
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 java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
@ -28,26 +28,24 @@ public class ClientConnectionMixin {
|
||||||
@Unique
|
@Unique
|
||||||
private static final Pattern CUSTOM_PITCH_PATTERN = Pattern.compile(".*\\.pitch\\.(.*)");
|
private static final Pattern CUSTOM_PITCH_PATTERN = Pattern.compile(".*\\.pitch\\.(.*)");
|
||||||
|
|
||||||
@Inject(method = "exceptionCaught", at = @At("HEAD"), cancellable = true)
|
@WrapMethod(method = "handlePacket")
|
||||||
private void exceptionCaught(ChannelHandlerContext context, Throwable ex, CallbackInfo ci) {
|
private static <T extends PacketListener> void handlePacket(
|
||||||
ci.cancel();
|
final Packet<T> packet,
|
||||||
ex.printStackTrace();
|
final PacketListener packetListener,
|
||||||
}
|
final Operation<Void> original
|
||||||
|
) {
|
||||||
@Inject(method = "handlePacket", at = @At("HEAD"), cancellable = true)
|
|
||||||
private static void handlePacket(Packet<?> packet, PacketListener _listener, CallbackInfo ci) {
|
|
||||||
for (Listener listener : ListenerManager.listeners) {
|
for (Listener listener : ListenerManager.listeners) {
|
||||||
listener.packetReceived(packet);
|
listener.packetReceived(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
final MinecraftClient client = MinecraftClient.getInstance();
|
final MinecraftClient client = MinecraftClient.getInstance();
|
||||||
|
|
||||||
// please don't skid this.,.
|
// this check is very easy to bypass in 2025
|
||||||
// mabe mabe mabe
|
if (
|
||||||
if (packet instanceof ParticleS2CPacket t_packet) {
|
packet instanceof ParticleS2CPacket t_packet
|
||||||
if (t_packet.getCount() > MAX_PARTICLES_PER_PACKET) {
|
&& t_packet.getCount() > MAX_PARTICLES_PER_PACKET
|
||||||
ci.cancel();
|
) {
|
||||||
}
|
return;
|
||||||
} else if (packet instanceof PlaySoundS2CPacket t_packet) {
|
} else if (packet instanceof PlaySoundS2CPacket t_packet) {
|
||||||
final SoundEvent soundEvent = t_packet.getSound().value();
|
final SoundEvent soundEvent = t_packet.getSound().value();
|
||||||
|
|
||||||
|
|
@ -55,7 +53,10 @@ public class ClientConnectionMixin {
|
||||||
|
|
||||||
final Matcher matcher = CUSTOM_PITCH_PATTERN.matcher(sound.getPath());
|
final Matcher matcher = CUSTOM_PITCH_PATTERN.matcher(sound.getPath());
|
||||||
|
|
||||||
if (!matcher.find()) return;
|
if (!matcher.find()) {
|
||||||
|
original.call(packet, packetListener);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final String stringPitch = matcher.group(1);
|
final String stringPitch = matcher.group(1);
|
||||||
|
|
@ -64,7 +65,10 @@ public class ClientConnectionMixin {
|
||||||
|
|
||||||
final ClientWorld world = client.world;
|
final ClientWorld world = client.world;
|
||||||
|
|
||||||
if (world == null) return;
|
if (world == null) {
|
||||||
|
original.call(packet, packetListener);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final SoundEvent newSound = SoundEvent.of(
|
final SoundEvent newSound = SoundEvent.of(
|
||||||
Identifier.of(
|
Identifier.of(
|
||||||
|
|
@ -89,26 +93,33 @@ public class ClientConnectionMixin {
|
||||||
t_packet.getSeed()
|
t_packet.getSeed()
|
||||||
));
|
));
|
||||||
|
|
||||||
ci.cancel();
|
return;
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
e.printStackTrace();
|
ChipmunkMod.LOGGER.error("Failed to parse custom pitch", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (t_packet.getVolume() == 1 && sound.getPath().equals("entity.enderman.scream")) ci.cancel();
|
if (t_packet.getVolume() == 1 && sound.getPath().equals("entity.enderman.scream")) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
original.call(packet, packetListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(at = @At("HEAD"), method = "send(Lnet/minecraft/network/packet/Packet;)V", cancellable = true)
|
@WrapMethod(method = "send(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/PacketCallbacks;Z)V")
|
||||||
private void sendPacket(Packet<?> packet, CallbackInfo ci) {
|
private void sendPacket(
|
||||||
if (packet instanceof RequestCommandCompletionsC2SPacket t_packet) {
|
final Packet<?> packet,
|
||||||
if (t_packet.getPartialCommand().length() > 2048) {
|
final PacketCallbacks callbacks,
|
||||||
ci.cancel();
|
final boolean flush,
|
||||||
return;
|
final Operation<Void> original
|
||||||
}
|
) {
|
||||||
}
|
if (
|
||||||
|
packet instanceof RequestCommandCompletionsC2SPacket t_packet
|
||||||
|
&& t_packet.getPartialCommand().length() > 2048
|
||||||
|
) return;
|
||||||
|
|
||||||
for (Listener listener : ListenerManager.listeners) {
|
for (Listener listener : ListenerManager.listeners) {
|
||||||
listener.packetSent(packet);
|
listener.packetSent(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
original.call(packet, callbacks, flush);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
package land.chipmunk.chipmunkmod.mixin;
|
||||||
|
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
|
||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
import land.chipmunk.chipmunkmod.ChipmunkMod;
|
import land.chipmunk.chipmunkmod.ChipmunkMod;
|
||||||
import land.chipmunk.chipmunkmod.command.CommandManager;
|
import land.chipmunk.chipmunkmod.command.CommandManager;
|
||||||
|
|
@ -7,14 +10,16 @@ import land.chipmunk.chipmunkmod.listeners.Listener;
|
||||||
import land.chipmunk.chipmunkmod.listeners.ListenerManager;
|
import land.chipmunk.chipmunkmod.listeners.ListenerManager;
|
||||||
import land.chipmunk.chipmunkmod.modules.*;
|
import land.chipmunk.chipmunkmod.modules.*;
|
||||||
import land.chipmunk.chipmunkmod.modules.custom_chat.CustomChat;
|
import land.chipmunk.chipmunkmod.modules.custom_chat.CustomChat;
|
||||||
|
import net.minecraft.client.gui.hud.InGameHud;
|
||||||
|
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||||
|
import net.minecraft.client.network.message.MessageHandler;
|
||||||
import net.minecraft.command.CommandRegistryAccess;
|
import net.minecraft.command.CommandRegistryAccess;
|
||||||
import net.minecraft.command.CommandSource;
|
import net.minecraft.command.CommandSource;
|
||||||
import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket;
|
import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket;
|
||||||
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
|
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
|
||||||
import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket;
|
|
||||||
import net.minecraft.network.packet.s2c.play.OverlayMessageS2CPacket;
|
|
||||||
import net.minecraft.registry.DynamicRegistryManager;
|
import net.minecraft.registry.DynamicRegistryManager;
|
||||||
import net.minecraft.resource.featuretoggle.FeatureSet;
|
import net.minecraft.resource.featuretoggle.FeatureSet;
|
||||||
|
import net.minecraft.text.PlainTextContent;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.text.TranslatableTextContent;
|
import net.minecraft.text.TranslatableTextContent;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
|
@ -24,7 +29,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
@Mixin(value = net.minecraft.client.network.ClientPlayNetworkHandler.class, priority = 1001)
|
@Mixin(value = ClientPlayNetworkHandler.class, priority = 1001)
|
||||||
public class ClientPlayNetworkHandlerMixin {
|
public class ClientPlayNetworkHandlerMixin {
|
||||||
@Final
|
@Final
|
||||||
@Shadow
|
@Shadow
|
||||||
|
|
@ -54,62 +59,73 @@ public class ClientPlayNetworkHandlerMixin {
|
||||||
KaboomCheck.INSTANCE.onCommandTree(this.commandDispatcher);
|
KaboomCheck.INSTANCE.onCommandTree(this.commandDispatcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "onGameMessage", at = @At("HEAD"), cancellable = true)
|
@WrapOperation(
|
||||||
private void onGameMessage(GameMessageS2CPacket packet, CallbackInfo ci) {
|
method = "onGameMessage",
|
||||||
final Text message = packet.content();
|
at = @At(
|
||||||
|
value = "INVOKE",
|
||||||
|
target = "Lnet/minecraft/client/network/message/MessageHandler;onGameMessage(Lnet/minecraft/text/Text;Z)V"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
private void onGameMessage(MessageHandler instance, Text message, boolean overlay, Operation<Void> original) {
|
||||||
try {
|
try {
|
||||||
if (
|
if (
|
||||||
RainbowName.INSTANCE.enabled &&
|
(
|
||||||
(
|
RainbowName.INSTANCE.enabled &&
|
||||||
message.getString().contains("Your nickname is now ") ||
|
(
|
||||||
message.getString().contains("Nickname changed.")
|
message.getString().startsWith("Your nickname is now ") ||
|
||||||
)
|
message.getString().startsWith("Nickname changed.")
|
||||||
) {
|
)
|
||||||
ci.cancel();
|
) ||
|
||||||
return;
|
(
|
||||||
}
|
message.getContent() instanceof TranslatableTextContent translatableTextContent &&
|
||||||
|
(
|
||||||
if (message.getContent() instanceof TranslatableTextContent translatableTextContent) {
|
translatableTextContent.getKey().equals("advMode.setCommand.success")
|
||||||
final String key = translatableTextContent.getKey();
|
|| translatableTextContent.getKey().equals("قيادة المجموعة: %s")
|
||||||
|
)
|
||||||
if (key.equals("advMode.setCommand.success") || key.equals("قيادة المجموعة: %s")) {
|
)
|
||||||
ci.cancel();
|
) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Listener listener : ListenerManager.listeners) {
|
for (Listener listener : ListenerManager.listeners) {
|
||||||
listener.chatMessageReceived(message);
|
listener.chatMessageReceived(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.getSiblings().size() > 1) {
|
if (
|
||||||
final String suggestionId = message.getSiblings().getFirst().getString();
|
message.getSiblings().size() > 1
|
||||||
|
&& message.getSiblings().getFirst().getContent() instanceof PlainTextContent textContent
|
||||||
if (suggestionId.equals(ChomeNSBotCommandSuggestions.REQUEST_SUGGESTIONS_ID)) {
|
&& textContent.string().equals(ChomeNSBotCommandSuggestions.REQUEST_SUGGESTIONS_ID)
|
||||||
ci.cancel();
|
) return;
|
||||||
}
|
} catch (Exception e) {
|
||||||
}
|
e.printStackTrace();
|
||||||
} catch (Exception ignored) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "onOverlayMessage", at = @At("TAIL"))
|
|
||||||
private void onOverlayMessage(OverlayMessageS2CPacket packet, CallbackInfo ci) {
|
|
||||||
for (Listener listener : ListenerManager.listeners) {
|
|
||||||
listener.overlayMessageReceived(packet.text());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// checking for the bot selector message doesn't really
|
original.call(instance, message, overlay);
|
||||||
// do much here since the message is just an empty string,
|
}
|
||||||
|
|
||||||
|
@WrapOperation(
|
||||||
|
method = "onOverlayMessage",
|
||||||
|
at = @At(
|
||||||
|
value = "INVOKE",
|
||||||
|
target = "Lnet/minecraft/client/gui/hud/InGameHud;setOverlayMessage(Lnet/minecraft/text/Text;Z)V"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
private void onOverlayMessage(InGameHud instance, Text message, boolean tinted, Operation<Void> original) {
|
||||||
|
for (Listener listener : ListenerManager.listeners) {
|
||||||
|
listener.overlayMessageReceived(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
original.call(instance, message, tinted);
|
||||||
|
|
||||||
|
// checking for the chomens bot selector message doesn't really
|
||||||
|
// do much here since the message is just an empty string
|
||||||
|
// that gets sent only when you join (or the bot restarts),
|
||||||
// so I do not ignore them
|
// so I do not ignore them
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "sendChatMessage", at = @At("HEAD"), cancellable = true)
|
@WrapMethod(method = "sendChatMessage")
|
||||||
private void sendChatMessage(String chatText, CallbackInfo ci) {
|
private void sendChatMessage(String content, Operation<Void> original) {
|
||||||
final CommandManager commandManager = CommandManager.INSTANCE;
|
final CommandManager commandManager = CommandManager.INSTANCE;
|
||||||
if (chatText.startsWith(commandManager.prefix)) {
|
if (content.startsWith(commandManager.prefix)) {
|
||||||
commandManager.executeCommand(chatText.substring(commandManager.prefix.length()));
|
commandManager.executeCommand(content.substring(commandManager.prefix.length()));
|
||||||
ci.cancel();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -118,7 +134,8 @@ public class ClientPlayNetworkHandlerMixin {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CustomChat.INSTANCE.chat(chatText);
|
CustomChat.INSTANCE.chat(content);
|
||||||
ci.cancel();
|
|
||||||
|
// :D
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,30 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
package land.chipmunk.chipmunkmod.mixin;
|
||||||
|
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
import net.minecraft.client.particle.ElderGuardianAppearanceParticle;
|
import net.minecraft.client.particle.ElderGuardianAppearanceParticle;
|
||||||
import net.minecraft.client.particle.Particle;
|
import net.minecraft.client.particle.Particle;
|
||||||
|
import net.minecraft.client.world.ClientWorld;
|
||||||
|
import net.minecraft.particle.SimpleParticleType;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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.CallbackInfoReturnable;
|
|
||||||
|
|
||||||
@Mixin(ElderGuardianAppearanceParticle.Factory.class)
|
@Mixin(ElderGuardianAppearanceParticle.Factory.class)
|
||||||
public class ElderGuardianAppearanceParticleMixin {
|
public class ElderGuardianAppearanceParticleMixin {
|
||||||
@Inject(
|
@WrapMethod(
|
||||||
method = "createParticle(Lnet/minecraft/particle/SimpleParticleType;Lnet/minecraft/client/world/ClientWorld;DDDDDD)Lnet/minecraft/client/particle/Particle;",
|
method = "createParticle(Lnet/minecraft/particle/SimpleParticleType;Lnet/minecraft/client/world/ClientWorld;DDDDDD)Lnet/minecraft/client/particle/Particle;"
|
||||||
at = @At("HEAD"),
|
)
|
||||||
cancellable = true)
|
private Particle createParticle(
|
||||||
private void createParticle(final CallbackInfoReturnable<Particle> cir) {
|
final SimpleParticleType simpleParticleType,
|
||||||
cir.setReturnValue(null);
|
final ClientWorld clientWorld,
|
||||||
|
final double d,
|
||||||
|
final double e,
|
||||||
|
final double f,
|
||||||
|
final double g,
|
||||||
|
final double h,
|
||||||
|
final double i,
|
||||||
|
final Operation<Particle> original
|
||||||
|
) {
|
||||||
|
// slash scare command
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,15 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
package land.chipmunk.chipmunkmod.mixin;
|
||||||
|
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
import net.minecraft.client.sound.SoundInstance;
|
import net.minecraft.client.sound.SoundInstance;
|
||||||
import net.minecraft.client.sound.SoundSystem;
|
import net.minecraft.client.sound.SoundSystem;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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.CallbackInfoReturnable;
|
|
||||||
|
|
||||||
@Mixin(SoundSystem.class)
|
@Mixin(SoundSystem.class)
|
||||||
public class SoundSystemMixin {
|
public class SoundSystemMixin {
|
||||||
@Inject(method = "getAdjustedPitch", at = @At("HEAD"), cancellable = true)
|
@WrapMethod(method = "getAdjustedPitch")
|
||||||
private void getAdjustedPitch (SoundInstance sound, CallbackInfoReturnable<Float> cir) {
|
private float getAdjustedPitch(final SoundInstance sound, final Operation<Float> original) {
|
||||||
cir.setReturnValue(sound.getPitch());
|
return sound.getPitch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
package land.chipmunk.chipmunkmod.mixin;
|
||||||
|
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
|
||||||
|
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
|
||||||
import net.minecraft.util.StringHelper;
|
import net.minecraft.util.StringHelper;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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.CallbackInfoReturnable;
|
|
||||||
|
|
||||||
@Mixin(StringHelper.class)
|
@Mixin(StringHelper.class)
|
||||||
public class StringHelperMixin {
|
public class StringHelperMixin {
|
||||||
@Inject(method = "isValidChar", at = @At("HEAD"), cancellable = true)
|
@WrapMethod(method = "isValidChar")
|
||||||
private static void isValidChar (char chr, CallbackInfoReturnable<Boolean> cir) {
|
private static boolean isValidChar (final char c, final Operation<Boolean> original) {
|
||||||
cir.setReturnValue(chr >= ' ' && chr != '\u007f');
|
// very legal [NUL] [LF] §
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ public class Chat {
|
||||||
if (usePlayerChat) NEXT_CHAT_PLAYER.set(true);
|
if (usePlayerChat) NEXT_CHAT_PLAYER.set(true);
|
||||||
|
|
||||||
final ClientPlayNetworkHandler networkHandler = MinecraftClient.getInstance().getNetworkHandler();
|
final ClientPlayNetworkHandler networkHandler = MinecraftClient.getInstance().getNetworkHandler();
|
||||||
|
if (networkHandler == null) return;
|
||||||
networkHandler.sendChatMessage(message);
|
networkHandler.sendChatMessage(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ import net.minecraft.util.math.BlockBox;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.dimension.DimensionType;
|
import net.minecraft.world.dimension.DimensionType;
|
||||||
import org.slf4j.Logger;
|
|
||||||
|
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package land.chipmunk.chipmunkmod.modules;
|
package land.chipmunk.chipmunkmod.modules;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
|
|
@ -19,7 +17,7 @@ public class CommandLoopManager {
|
||||||
|
|
||||||
public int loopCommand (String command, long interval) {
|
public int loopCommand (String command, long interval) {
|
||||||
final CommandLoop loop = new CommandLoop(this.core, command, interval);
|
final CommandLoop loop = new CommandLoop(this.core, command, interval);
|
||||||
if (!commandLoops.add(loop)) return -1;
|
commandLoops.add(loop);
|
||||||
return commandLoops.size() - 1;
|
return commandLoops.size() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package land.chipmunk.chipmunkmod.modules;
|
package land.chipmunk.chipmunkmod.modules;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import land.chipmunk.chipmunkmod.ChipmunkMod;
|
||||||
import land.chipmunk.chipmunkmod.util.ColorUtilities;
|
import land.chipmunk.chipmunkmod.util.ColorUtilities;
|
||||||
|
|
||||||
|
|
||||||
import land.chipmunk.chipmunkmod.util.RandomUtilities;
|
import land.chipmunk.chipmunkmod.util.RandomUtilities;
|
||||||
import land.chipmunk.chipmunkmod.util.UUIDUtilities;
|
import land.chipmunk.chipmunkmod.util.UUIDUtilities;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
|
@ -45,6 +45,7 @@ public class RainbowName {
|
||||||
|
|
||||||
public void enable () {
|
public void enable () {
|
||||||
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
|
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
|
||||||
|
if (networkHandler == null) return;
|
||||||
final GameProfile profile = networkHandler.getProfile();
|
final GameProfile profile = networkHandler.getProfile();
|
||||||
|
|
||||||
final String username = RandomUtilities.emptyUsername(random);
|
final String username = RandomUtilities.emptyUsername(random);
|
||||||
|
|
@ -60,6 +61,10 @@ public class RainbowName {
|
||||||
|
|
||||||
public void disable () {
|
public void disable () {
|
||||||
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
|
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
|
||||||
|
if (networkHandler == null) {
|
||||||
|
enabled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
final GameProfile profile = networkHandler.getProfile();
|
final GameProfile profile = networkHandler.getProfile();
|
||||||
|
|
||||||
CommandCore.INSTANCE.run("essentials:nick " + profile.getId() + " off");
|
CommandCore.INSTANCE.run("essentials:nick " + profile.getId() + " off");
|
||||||
|
|
@ -94,7 +99,7 @@ public class RainbowName {
|
||||||
for (char character : displayName.toCharArray()) {
|
for (char character : displayName.toCharArray()) {
|
||||||
String color = String.format("%06x", ColorUtilities.hsvToRgb(hue, 100, 100));
|
String color = String.format("%06x", ColorUtilities.hsvToRgb(hue, 100, 100));
|
||||||
component = component.append(Component.text(character).color(TextColor.fromHexString("#" + color)));
|
component = component.append(Component.text(character).color(TextColor.fromHexString("#" + color)));
|
||||||
essentialsNickname.append("\u00a7#").append(color).append(character != ' ' ? character : '_');
|
essentialsNickname.append("§#").append(color).append(character != ' ' ? character : '_');
|
||||||
hue = (hue + increment) % 360;
|
hue = (hue + increment) % 360;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,7 +108,7 @@ public class RainbowName {
|
||||||
|
|
||||||
startHue = (startHue + increment) % 360;
|
startHue = (startHue + increment) % 360;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
ChipmunkMod.LOGGER.error("Error while ticking rainbow name", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,8 @@ public class SelfCare implements Listener {
|
||||||
public void chatTick() {
|
public void chatTick() {
|
||||||
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
|
final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler();
|
||||||
|
|
||||||
|
if (networkHandler == null) return;
|
||||||
|
|
||||||
if (!cspy && cspyEnabled) {
|
if (!cspy && cspyEnabled) {
|
||||||
if (serverHasCommand("c")) networkHandler.sendChatCommand("c on");
|
if (serverHasCommand("c")) networkHandler.sendChatCommand("c on");
|
||||||
} else if (!hasSkin && !skin.equals("off")) {
|
} else if (!hasSkin && !skin.equals("off")) {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
package land.chipmunk.chipmunkmod.modules;
|
|
||||||
|
|
||||||
public class TransactionManager {
|
|
||||||
public static final TransactionManager INSTANCE = new TransactionManager();
|
|
||||||
|
|
||||||
private int transactionId = 0;
|
|
||||||
|
|
||||||
public int transactionId () { return transactionId; }
|
|
||||||
|
|
||||||
public int nextTransactionId () { return transactionId++; }
|
|
||||||
}
|
|
||||||
Loading…
Add table
Reference in a new issue