From fa81452f198c344dcbe6460f6a189a2400780159 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 11 Dec 2023 20:49:50 -0500 Subject: Ignore invalid entity data exceptions These exceptions seem to be triggered in dungeons as a result of sending invalid data in entity packets, and for some reason when the exceptions are left unchecked they cause lag spikes. --- .../hysky/skyblocker/mixin/DataTrackerMixin.java | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java new file mode 100644 index 00000000..a5ab3b3e --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java @@ -0,0 +1,25 @@ +package de.hysky.skyblocker.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; + +import de.hysky.skyblocker.utils.Utils; +import net.minecraft.entity.data.DataTracker; + +@Mixin(DataTracker.class) +public class DataTrackerMixin { + + @WrapOperation(method = "writeUpdatedEntries", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/data/DataTracker;copyToFrom(Lnet/minecraft/entity/data/DataTracker$Entry;Lnet/minecraft/entity/data/DataTracker$SerializedEntry;)V")) + public void skyblocker$ignoreInvalidDataExceptions(DataTracker dataTracker, DataTracker.Entry to, DataTracker.SerializedEntry from, Operation operation) { + if (Utils.isOnHypixel()) { + try { + operation.call(dataTracker, to, from); + } catch (IllegalStateException ignored) {} //These exceptions cause annoying small lag spikes for some reason + } else { + operation.call(dataTracker, to, from); + } + } +} -- cgit From 6faeaa9eb10a265c83dfb0cfb229ecdbb02a5bfd Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 11 Dec 2023 23:35:15 -0500 Subject: Use a cancellable inject --- .../de/hysky/skyblocker/mixin/DataTrackerMixin.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java index a5ab3b3e..0d12200c 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/DataTrackerMixin.java @@ -2,24 +2,18 @@ package de.hysky.skyblocker.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import de.hysky.skyblocker.utils.Utils; +import dev.cbyrne.betterinject.annotations.Inject; import net.minecraft.entity.data.DataTracker; @Mixin(DataTracker.class) public class DataTrackerMixin { - @WrapOperation(method = "writeUpdatedEntries", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/data/DataTracker;copyToFrom(Lnet/minecraft/entity/data/DataTracker$Entry;Lnet/minecraft/entity/data/DataTracker$SerializedEntry;)V")) - public void skyblocker$ignoreInvalidDataExceptions(DataTracker dataTracker, DataTracker.Entry to, DataTracker.SerializedEntry from, Operation operation) { - if (Utils.isOnHypixel()) { - try { - operation.call(dataTracker, to, from); - } catch (IllegalStateException ignored) {} //These exceptions cause annoying small lag spikes for some reason - } else { - operation.call(dataTracker, to, from); - } + @Inject(method = "copyToFrom", at = @At(value = "NEW", target = "Ljava/lang/IllegalStateException;", shift = At.Shift.BEFORE), cancellable = true) + public void skyblocker$ignoreInvalidDataExceptions(CallbackInfo ci) { + //These exceptions cause annoying small lag spikes for some reason + if (Utils.isOnHypixel()) ci.cancel(); } } -- cgit From 446dbb4f5d06cd2575de1df9be6f69a4e826171f Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 13 Dec 2023 01:49:19 -0500 Subject: Fix exception being thrown with the one broken quiz question --- .../hysky/skyblocker/skyblock/dungeon/Trivia.java | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java index 53368c14..00679dc5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java @@ -10,11 +10,15 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; + +import com.mojang.logging.LogUtils; import java.util.*; import java.util.regex.Matcher; public class Trivia extends ChatPatternListener { + private static final Logger LOGGER = LogUtils.getLogger(); private static final Map answers; private List solutions = Collections.emptyList(); @@ -42,14 +46,18 @@ public class Trivia extends ChatPatternListener { } private void updateSolutions(String question) { - String trimmedQuestion = question.trim(); - if (trimmedQuestion.equals("What SkyBlock year is it?")) { - long currentTime = System.currentTimeMillis() / 1000L; - long diff = currentTime - 1560276000; - int year = (int) (diff / 446400 + 1); - solutions = Collections.singletonList("Year " + year); - } else { - solutions = Arrays.asList(answers.get(trimmedQuestion)); + try { + String trimmedQuestion = question.trim(); + if (trimmedQuestion.equals("What SkyBlock year is it?")) { + long currentTime = System.currentTimeMillis() / 1000L; + long diff = currentTime - 1560276000; + int year = (int) (diff / 446400 + 1); + solutions = Collections.singletonList("Year " + year); + } else { + solutions = Arrays.asList(answers.get(trimmedQuestion)); + } + } catch (Exception e) { //Handle the broken wither lords quiz question, maybe we should try to accommodate it + LOGGER.error("[Skyblocker] Failed to update the Trivia puzzle answers!", e); } } -- cgit From 791f9cd8b40eece4fe258f41ee5bc179cdd63005 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 13 Dec 2023 16:23:45 -0500 Subject: Add null check --- src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/main/java/de/hysky/skyblocker') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java index 00679dc5..21bbdce0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/Trivia.java @@ -54,9 +54,10 @@ public class Trivia extends ChatPatternListener { int year = (int) (diff / 446400 + 1); solutions = Collections.singletonList("Year " + year); } else { - solutions = Arrays.asList(answers.get(trimmedQuestion)); + String[] questionAnswers = answers.get(trimmedQuestion); + if (questionAnswers != null) solutions = Arrays.asList(questionAnswers); } - } catch (Exception e) { //Handle the broken wither lords quiz question, maybe we should try to accommodate it + } catch (Exception e) { //Hopefully the solver doesn't go south LOGGER.error("[Skyblocker] Failed to update the Trivia puzzle answers!", e); } } -- cgit