mirror of
https://code.chipmunk.land/ChomeNS/chipmunkmod.git
synced 2025-11-13 22:16:14 +00:00
refactor: cleanup mixins
TextSerializerMixin was completely unused TextMixin was a fix for an exploit that no longer works on the latest version truncateChat/stripTextFormat were already handled in CustomChat mixin
This commit is contained in:
parent
ef47598b78
commit
0da0967d8a
6 changed files with 3 additions and 105 deletions
|
|
@ -23,7 +23,7 @@ import java.util.UUID;
|
||||||
import land.chipmunk.chipmunkmod.mixin.MinecraftClientAccessor;
|
import land.chipmunk.chipmunkmod.mixin.MinecraftClientAccessor;
|
||||||
|
|
||||||
public class UsernameCommand {
|
public class UsernameCommand {
|
||||||
private static final Session ORIGINAL_SESSION = ((MinecraftClientAccessor) MinecraftClient.getInstance()).session();
|
private static final Session ORIGINAL_SESSION = MinecraftClient.getInstance().getSession();
|
||||||
private static final SimpleCommandExceptionType USERNAME_TOO_LONG = new SimpleCommandExceptionType(Text.translatable("The specified username is longer than 16 characters"));
|
private static final SimpleCommandExceptionType USERNAME_TOO_LONG = new SimpleCommandExceptionType(Text.translatable("The specified username is longer than 16 characters"));
|
||||||
|
|
||||||
public static void register (CommandDispatcher<FabricClientCommandSource> dispatcher) {
|
public static void register (CommandDispatcher<FabricClientCommandSource> dispatcher) {
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,13 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
package land.chipmunk.chipmunkmod.mixin;
|
||||||
|
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.session.Session;
|
import net.minecraft.client.session.Session;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Mutable;
|
import org.spongepowered.asm.mixin.Mutable;
|
||||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
@Mixin(net.minecraft.client.MinecraftClient.class)
|
@Mixin(MinecraftClient.class)
|
||||||
public interface MinecraftClientAccessor {
|
public interface MinecraftClientAccessor {
|
||||||
@Accessor("session")
|
|
||||||
Session session ();
|
|
||||||
|
|
||||||
@Mutable
|
@Mutable
|
||||||
@Accessor("session")
|
@Accessor("session")
|
||||||
void session (Session session);
|
void session (Session session);
|
||||||
|
|
|
||||||
|
|
@ -8,16 +8,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
@Mixin(StringHelper.class)
|
@Mixin(StringHelper.class)
|
||||||
public class StringHelperMixin {
|
public class StringHelperMixin {
|
||||||
@Inject(method = "truncateChat", at = @At("HEAD"), cancellable = true)
|
|
||||||
private static void truncateChat (String text, CallbackInfoReturnable<String> cir) {
|
|
||||||
cir.setReturnValue(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "stripTextFormat", at = @At("HEAD"), cancellable = true)
|
|
||||||
private static void stripTextFormat(String text, CallbackInfoReturnable<String> cir) {
|
|
||||||
cir.setReturnValue(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "isValidChar", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "isValidChar", at = @At("HEAD"), cancellable = true)
|
||||||
private static void isValidChar (char chr, CallbackInfoReturnable<Boolean> cir) {
|
private static void isValidChar (char chr, CallbackInfoReturnable<Boolean> cir) {
|
||||||
cir.setReturnValue(chr >= ' ' && chr != '\u007f');
|
cir.setReturnValue(chr >= ' ' && chr != '\u007f');
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
|
||||||
|
|
||||||
import net.minecraft.text.StringVisitable;
|
|
||||||
import net.minecraft.text.Style;
|
|
||||||
import net.minecraft.text.Text;
|
|
||||||
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;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
@Mixin(Text.class)
|
|
||||||
public interface TextMixin {
|
|
||||||
@Inject(method = "visit(Lnet/minecraft/text/StringVisitable$StyledVisitor;Lnet/minecraft/text/Style;)Ljava/util/Optional;", at = @At(value = "INVOKE", target = "Lnet/minecraft/text/Text;visit(Lnet/minecraft/text/StringVisitable$StyledVisitor;Lnet/minecraft/text/Style;)Ljava/util/Optional;"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
|
|
||||||
private <T> void visit (StringVisitable.StyledVisitor<T> styledVisitor, Style style, CallbackInfoReturnable<Optional<T>> cir, Style style2, Optional optional, Iterator var5, Text text) {
|
|
||||||
if (text == null) cir.setReturnValue(Optional.empty());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "visit(Lnet/minecraft/text/StringVisitable$Visitor;)Ljava/util/Optional;", at = @At(value = "INVOKE", target = "Lnet/minecraft/text/Text;visit(Lnet/minecraft/text/StringVisitable$Visitor;)Ljava/util/Optional;"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
|
|
||||||
private <T> void visit (StringVisitable.Visitor<T> visitor, CallbackInfoReturnable<Optional<T>> cir, Optional optional, Iterator var3, Text text) {
|
|
||||||
if (text == null) cir.setReturnValue(Optional.empty());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
|
||||||
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonDeserializationContext;
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import net.minecraft.text.MutableText;
|
|
||||||
import net.minecraft.text.Text;
|
|
||||||
import net.minecraft.util.Formatting;
|
|
||||||
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.CallbackInfoReturnable;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
|
|
||||||
@Mixin(Text.Serializer.class)
|
|
||||||
public class TextSerializerMixin {
|
|
||||||
@Unique private static final int LIMIT = 8;
|
|
||||||
|
|
||||||
@Unique private int i;
|
|
||||||
|
|
||||||
@Unique
|
|
||||||
private boolean checkDepth (JsonElement element) {
|
|
||||||
if (element.isJsonPrimitive()) return false;
|
|
||||||
else if (i >= LIMIT) return true;
|
|
||||||
|
|
||||||
if (element.isJsonArray()) {
|
|
||||||
i++;
|
|
||||||
|
|
||||||
for (JsonElement item : element.getAsJsonArray()) if (checkDepth(item)) return true;
|
|
||||||
} else if (element.isJsonObject()) {
|
|
||||||
final JsonObject object = element.getAsJsonObject();
|
|
||||||
|
|
||||||
JsonArray array;
|
|
||||||
|
|
||||||
if (object.has("extra")) array = object.get("extra").getAsJsonArray();
|
|
||||||
else if (object.has("with")) array = object.get("with").getAsJsonArray();
|
|
||||||
else return false;
|
|
||||||
|
|
||||||
i++;
|
|
||||||
|
|
||||||
for (JsonElement member : array) if (checkDepth(member)) return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(method = "deserialize(Lcom/google/gson/JsonElement;Ljava/lang/reflect/Type;Lcom/google/gson/JsonDeserializationContext;)Lnet/minecraft/text/MutableText;", at = @At("HEAD"), cancellable = true)
|
|
||||||
private void deserialize (JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext, CallbackInfoReturnable<MutableText> cir) {
|
|
||||||
i = 0; // better way to do this?
|
|
||||||
|
|
||||||
final boolean overLimit = checkDepth(jsonElement);
|
|
||||||
|
|
||||||
if (!overLimit) return;
|
|
||||||
|
|
||||||
cir.setReturnValue(Text.empty()); // just ignores it
|
|
||||||
|
|
||||||
cir.cancel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -12,8 +12,6 @@
|
||||||
"MinecraftClientAccessor",
|
"MinecraftClientAccessor",
|
||||||
"StringHelperMixin",
|
"StringHelperMixin",
|
||||||
"ElderGuardianAppearanceParticleMixin",
|
"ElderGuardianAppearanceParticleMixin",
|
||||||
"TextMixin",
|
|
||||||
"TextSerializerMixin",
|
|
||||||
"SoundSystemMixin",
|
"SoundSystemMixin",
|
||||||
"TextFieldWidgetMixin"
|
"TextFieldWidgetMixin"
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue