aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-10-15 16:03:08 -0400
committerviciscat <51047087+viciscat@users.noreply.github.com>2024-12-12 18:22:23 +0100
commit4b71c0ea3feb5abcd79b963f4b25db5c726600b0 (patch)
treeb9aaad0758ce618f67bc612e7cbce15237dfbae9 /src/main/java
parent64ed1d5a376a63a37186589d8324bb97dcddcaf0 (diff)
downloadSkyblocker-4b71c0ea3feb5abcd79b963f4b25db5c726600b0.tar.gz
Skyblocker-4b71c0ea3feb5abcd79b963f4b25db5c726600b0.tar.bz2
Skyblocker-4b71c0ea3feb5abcd79b963f4b25db5c726600b0.zip
Refactor mixin
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java84
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java40
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java42
4 files changed, 74 insertions, 102 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
index fe35e7d2..a67eda0e 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java
@@ -17,6 +17,7 @@ import de.hysky.skyblocker.skyblock.dwarven.CrystalsChestHighlighter;
import de.hysky.skyblocker.skyblock.end.EnderNodes;
import de.hysky.skyblocker.skyblock.end.TheEnd;
import de.hysky.skyblocker.skyblock.slayers.SlayerEntitiesGlow;
+import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr;
import de.hysky.skyblocker.skyblock.waypoint.MythologicalRitual;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.network.ClientPlayNetworkHandler;
@@ -45,7 +46,30 @@ public abstract class ClientPlayNetworkHandlerMixin {
@Final
private static Logger LOGGER;
- @Inject(method = "method_64896", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;removeEntity(ILnet/minecraft/entity/Entity$RemovalReason;)V"))
+ @Inject(method = "onEntityTrackerUpdate", at = @At("TAIL"))
+ private void skyblocker$onEntityTrackerUpdate(EntityTrackerUpdateS2CPacket packet, CallbackInfo ci, @Local Entity entity) {
+ if (!(entity instanceof ArmorStandEntity armorStandEntity)) return;
+
+ if (SkyblockerConfigManager.get().slayers.highlightMinis == SlayersConfig.HighlightSlayerEntities.GLOW && SlayerEntitiesGlow.isSlayerMiniMob(armorStandEntity)
+ || SkyblockerConfigManager.get().slayers.highlightBosses == SlayersConfig.HighlightSlayerEntities.GLOW && SlayerEntitiesGlow.isSlayer(armorStandEntity)) {
+ if (armorStandEntity.isDead()) {
+ SlayerEntitiesGlow.cleanupArmorstand(armorStandEntity);
+ } else {
+ SlayerEntitiesGlow.setSlayerMobGlow(armorStandEntity);
+ }
+ }
+
+ if (SkyblockerConfigManager.get().slayers.blazeSlayer.firePillarCountdown != SlayersConfig.BlazeSlayer.FirePillar.OFF) FirePillarAnnouncer.checkFirePillar(entity);
+
+ EggFinder.checkIfEgg(armorStandEntity);
+ try { //Prevent packet handling fails if something goes wrong so that entity trackers still update, just without compact damage numbers
+ CompactDamage.compactDamage(armorStandEntity);
+ } catch (Exception e) {
+ LOGGER.error("[Skyblocker Compact Damage] Failed to compact damage number", e);
+ }
+ }
+
+ @Inject(method = "method_64896", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;removeEntity(ILnet/minecraft/entity/Entity$RemovalReason;)V"))
private void skyblocker$onItemDestroy(int entityId, CallbackInfo ci) {
if (world.getEntityById(entityId) instanceof ItemEntity itemEntity) {
DungeonManager.onItemPickup(itemEntity);
@@ -63,6 +87,26 @@ public abstract class ClientPlayNetworkHandlerMixin {
return !Utils.isOnHypixel();
}
+ @ModifyExpressionValue(method = "onEntityStatus", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/EntityStatusS2CPacket;getEntity(Lnet/minecraft/world/World;)Lnet/minecraft/entity/Entity;"))
+ private Entity skyblocker$onEntityDeath(Entity entity, @Local(argsOnly = true) EntityStatusS2CPacket packet) {
+ if (packet.getStatus() == EntityStatuses.PLAY_DEATH_SOUND_OR_ADD_PROJECTILE_HIT_PARTICLES) {
+ DungeonScore.handleEntityDeath(entity);
+ TheEnd.onEntityDeath(entity);
+ SlayerEntitiesGlow.onEntityDeath(entity);
+ }
+ return entity;
+ }
+
+ @Inject(method = "onEntityEquipmentUpdate", at = @At(value = "TAIL"))
+ private void skyblocker$onEntityEquip(EntityEquipmentUpdateS2CPacket packet, CallbackInfo ci, @Local Entity entity) {
+ EggFinder.checkIfEgg(entity);
+ }
+
+ @Inject(method = "onPlayerListHeader", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/PlayerListHud;setFooter(Lnet/minecraft/text/Text;)V"))
+ private void skyblocker$updatePlayerListFooter(PlayerListHeaderS2CPacket packet, CallbackInfo ci) {
+ PlayerListMgr.updateFooter(packet.footer());
+ }
+
@WrapWithCondition(method = "onPlayerList", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false))
private boolean skyblocker$cancelPlayerListWarning(Logger instance, String format, Object arg1, Object arg2) {
return !Utils.isOnHypixel();
@@ -97,42 +141,4 @@ public abstract class ClientPlayNetworkHandlerMixin {
EnderNodes.onParticle(packet);
WishingCompassSolver.onParticle(packet);
}
-
- @ModifyExpressionValue(method = "onEntityStatus", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/EntityStatusS2CPacket;getEntity(Lnet/minecraft/world/World;)Lnet/minecraft/entity/Entity;"))
- private Entity skyblocker$onEntityDeath(Entity entity, @Local(argsOnly = true) EntityStatusS2CPacket packet) {
- if (packet.getStatus() == EntityStatuses.PLAY_DEATH_SOUND_OR_ADD_PROJECTILE_HIT_PARTICLES) {
- DungeonScore.handleEntityDeath(entity);
- TheEnd.onEntityDeath(entity);
- SlayerEntitiesGlow.onEntityDeath(entity);
- }
- return entity;
- }
-
- @Inject(method = "onEntityTrackerUpdate", at = @At("TAIL"))
- private void skyblocker$onEntityTrackerUpdate(EntityTrackerUpdateS2CPacket packet, CallbackInfo ci, @Local Entity entity) {
- if (!(entity instanceof ArmorStandEntity armorStandEntity)) return;
-
- if (SkyblockerConfigManager.get().slayers.highlightMinis == SlayersConfig.HighlightSlayerEntities.GLOW && SlayerEntitiesGlow.isSlayerMiniMob(armorStandEntity)
- || SkyblockerConfigManager.get().slayers.highlightBosses == SlayersConfig.HighlightSlayerEntities.GLOW && SlayerEntitiesGlow.isSlayer(armorStandEntity)) {
- if (armorStandEntity.isDead()) {
- SlayerEntitiesGlow.cleanupArmorstand(armorStandEntity);
- } else {
- SlayerEntitiesGlow.setSlayerMobGlow(armorStandEntity);
- }
- }
-
- if (SkyblockerConfigManager.get().slayers.blazeSlayer.firePillarCountdown != SlayersConfig.BlazeSlayer.FirePillar.OFF) FirePillarAnnouncer.checkFirePillar(entity);
-
- EggFinder.checkIfEgg(armorStandEntity);
- try { //Prevent packet handling fails if something goes wrong so that entity trackers still update, just without compact damage numbers
- CompactDamage.compactDamage(armorStandEntity);
- } catch (Exception e) {
- LOGGER.error("[Skyblocker Compact Damage] Failed to compact damage number", e);
- }
- }
-
- @Inject(method = "onEntityEquipmentUpdate", at = @At(value = "TAIL"))
- private void skyblocker$onEntityEquip(EntityEquipmentUpdateS2CPacket packet, CallbackInfo ci, @Local Entity entity) {
- EggFinder.checkIfEgg(entity);
- }
}
diff --git a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java
index aa35f55e..b6b5fe22 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.mixins;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
+import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
@@ -11,6 +12,7 @@ import de.hysky.skyblocker.skyblock.item.HotbarSlotLock;
import de.hysky.skyblocker.skyblock.item.ItemCooldowns;
import de.hysky.skyblocker.skyblock.item.ItemProtection;
import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds;
+import de.hysky.skyblocker.skyblock.tabhud.TabHud;
import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster;
import de.hysky.skyblocker.utils.Utils;
@@ -20,12 +22,15 @@ import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.LayeredDrawer;
import net.minecraft.client.gui.hud.InGameHud;
+import net.minecraft.client.gui.hud.PlayerListHud;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.RenderTickCounter;
import net.minecraft.client.util.Window;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
+import net.minecraft.scoreboard.Scoreboard;
+import net.minecraft.scoreboard.ScoreboardObjective;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Final;
@@ -176,4 +181,9 @@ public abstract class InGameHudMixin {
ScreenMaster.render(context, (int) (window.getScaledWidth() / scale), (int) (window.getScaledHeight() / scale));
matrices.pop();
}
+
+ @WrapWithCondition(method = "renderPlayerList", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/PlayerListHud;render(Lnet/minecraft/client/gui/DrawContext;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V"))
+ private boolean skyblocker$shouldRenderHud(PlayerListHud playerListHud, DrawContext context, int scaledWindowWidth, Scoreboard scoreboard, ScoreboardObjective objective) {
+ return !Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed() || MinecraftClient.getInstance().currentScreen instanceof WidgetsConfigurationScreen;
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java
deleted file mode 100644
index 8779737c..00000000
--- a/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package de.hysky.skyblocker.mixins;
-
-import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen;
-import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.skyblock.tabhud.TabHud;
-import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr;
-import de.hysky.skyblocker.utils.Utils;
-import net.fabricmc.api.EnvType;
-import net.fabricmc.api.Environment;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.DrawContext;
-import net.minecraft.client.gui.hud.PlayerListHud;
-import net.minecraft.text.Text;
-import org.jetbrains.annotations.Nullable;
-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.CallbackInfo;
-
-import com.llamalad7.mixinextras.sugar.Local;
-
-@Environment(EnvType.CLIENT)
-@Mixin(PlayerListHud.class)
-public class PlayerListHudMixin {
-
- @Inject(at = @At("HEAD"), method = "render", cancellable = true)
- public void skyblocker$renderTabHud(CallbackInfo info, @Local(argsOnly = true) DrawContext context, @Local(argsOnly = true) int w) {
- if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed() || MinecraftClient.getInstance().currentScreen instanceof WidgetsConfigurationScreen) {
- return;
- }
-
- info.cancel();
- }
-
- @Inject(at = @At("HEAD"), method = "setFooter")
- public void skblocker$updateFooter(@Nullable Text footer, CallbackInfo info) {
- PlayerListMgr.updateFooter(footer);
- }
-
-}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
index 448ad181..c69dd942 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/PlayerListMgr.java
@@ -1,12 +1,5 @@
package de.hysky.skyblocker.skyblock.tabhud.util;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Predicate;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import com.mojang.authlib.GameProfile;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.mixins.accessors.PlayerListHudAccessor;
@@ -21,22 +14,23 @@ import it.unimi.dsi.fastutil.ints.IntObjectPair;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import it.unimi.dsi.fastutil.objects.ObjectObjectMutablePair;
-import net.minecraft.text.Style;
-import net.minecraft.util.Formatting;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.text.MutableText;
+import net.minecraft.text.Style;
import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import org.jetbrains.annotations.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import java.util.Objects;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Predicate;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* This class may be used to get data from the player list. It doesn't get its
@@ -57,6 +51,7 @@ public class PlayerListMgr {
* The player list in tab, but a list of strings instead of {@link PlayerListEntry}s.
*/
private static List<String> playerStringList = new ArrayList<>();
+ @Nullable
private static String footer;
public static final Map<String, TabHudWidget> tabWidgetInstances = new Object2ObjectOpenHashMap<>();
public static final List<TabHudWidget> tabWidgetsToShow = new ObjectArrayList<>(5);
@@ -83,16 +78,14 @@ public class PlayerListMgr {
if (Utils.isInDungeons()) {
updateDungeons(null);
- }
- else {
+ } else {
updateWidgetsFrom(playerList.stream().map(PlayerListEntry::getDisplayName).filter(Objects::nonNull).toList());
}
-
-
}
/**
* Update specifically for dungeons cuz they don't use the new system I HATE THEM
+ *
* @param lines used for the config screen
*/
public static void updateDungeons(List<Text> lines) {
@@ -120,6 +113,7 @@ public class PlayerListMgr {
/**
* Update the tab widgets using a list of text representing the lines of the in-game TAB
+ *
* @param lines in-game TAB
*/
public static void updateWidgetsFrom(List<Text> lines) {
@@ -228,7 +222,6 @@ public class PlayerListMgr {
}
/**
- *
* @param text a line of text that contains a : from the tab
* @return a pair containing:
* <ul>
@@ -279,9 +272,13 @@ public class PlayerListMgr {
footer = null;
} else {
footer = f.getString();
+ if (footer.isEmpty()) {
+ footer = null;
+ }
}
}
+ @Nullable
public static String getFooter() {
return footer;
}
@@ -340,7 +337,6 @@ public class PlayerListMgr {
* Gets the display name at some index of the player list
*
* @return the text or null, if the display name is null
- *
* @implNote currently designed specifically for crimson isles faction quests
* widget and the rift widgets, might not work correctly without
* modification for other stuff. you've been warned!