patch stack overflow crash (mabe) and fix
This commit is contained in:
parent
82b5259b44
commit
994cbba173
3 changed files with 57 additions and 3 deletions
|
@ -0,0 +1,48 @@
|
||||||
|
package land.chipmunk.chipmunkmod.mixin;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonDeserializationContext;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
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.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 {
|
||||||
|
@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) {
|
||||||
|
try {
|
||||||
|
if (!jsonElement.isJsonArray()) return;
|
||||||
|
|
||||||
|
final JsonArray array = jsonElement.getAsJsonArray();
|
||||||
|
|
||||||
|
if (array.size() == 0) return;
|
||||||
|
|
||||||
|
JsonElement item = array.get(0);
|
||||||
|
|
||||||
|
int depth = 0;
|
||||||
|
|
||||||
|
while (item != null && item.isJsonArray() && depth < 512) {
|
||||||
|
if (item.getAsJsonArray().size() == 0 && item.getAsJsonArray().get(0) == null) continue;
|
||||||
|
|
||||||
|
depth++;
|
||||||
|
|
||||||
|
item = item.getAsJsonArray().get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (depth >= 512) {
|
||||||
|
cir.setReturnValue(Text.literal("Component is too big").formatted(Formatting.RED));
|
||||||
|
|
||||||
|
cir.cancel();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,8 +31,8 @@ public class SelfCare extends Listener {
|
||||||
|
|
||||||
public String skin;
|
public String skin;
|
||||||
|
|
||||||
private Timer timer = new Timer();
|
private Timer timer;
|
||||||
private Timer chatTimer = new Timer();
|
private Timer chatTimer;
|
||||||
|
|
||||||
private boolean cspy = false;
|
private boolean cspy = false;
|
||||||
public boolean hasSkin = false;
|
public boolean hasSkin = false;
|
||||||
|
@ -66,6 +66,9 @@ public class SelfCare extends Listener {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
timer = new Timer();
|
||||||
|
chatTimer = new Timer();
|
||||||
|
|
||||||
timer.schedule(task, interval, interval);
|
timer.schedule(task, interval, interval);
|
||||||
chatTimer.schedule(chatTask, chatInterval, chatInterval);
|
chatTimer.schedule(chatTask, chatInterval, chatInterval);
|
||||||
}
|
}
|
||||||
|
@ -138,6 +141,8 @@ public class SelfCare extends Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void packetReceived(PlayerPositionLookS2CPacket packet) {
|
public void packetReceived(PlayerPositionLookS2CPacket packet) {
|
||||||
|
if (timer == null) return;
|
||||||
|
|
||||||
positionPacketsPerSecond++;
|
positionPacketsPerSecond++;
|
||||||
|
|
||||||
timer.schedule(new TimerTask() {
|
timer.schedule(new TimerTask() {
|
||||||
|
|
|
@ -21,7 +21,8 @@
|
||||||
"ClientConnectionInvoker",
|
"ClientConnectionInvoker",
|
||||||
"ClientConnectionAccessor",
|
"ClientConnectionAccessor",
|
||||||
"PlayerListEntryAccessor",
|
"PlayerListEntryAccessor",
|
||||||
"SharedConstantsMixin"
|
"SharedConstantsMixin",
|
||||||
|
"TextSerializerMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
Loading…
Reference in a new issue