diff options
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/mixin')
4 files changed, 125 insertions, 116 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java index 4851325a..28058b0b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java @@ -1,61 +1,50 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import net.minecraft.client.MinecraftClient; +import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonPuzzles; +import me.xmrvizzy.skyblocker.skyblock.dwarven.Puzzler; +import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.gui.hud.ChatHudListener; import net.minecraft.network.MessageType; 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.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.UUID; @Mixin(ChatHudListener.class) public class ChatHudListenerMixin { - private static String[] threeWeirdos = { - "The reward is not in my chest!", - "At least one of them is lying, and the reward is not in", - "My chest doesn't have the reward. We are all telling the truth.", - "My chest has the reward and I'm telling the truth!", - "The reward isn't in any of our chests.", - "Both of them are telling the truth. Also," - }; - - @ModifyVariable(method = "onChatMessage(Lnet/minecraft/network/MessageType;Lnet/minecraft/text/Text;Ljava/util/UUID;)V", at = @At("HEAD"), ordinal = 0) - public Text modifyMessage(Text message) { + + @Inject(method = "onChatMessage", at = @At("HEAD"), cancellable = true) + public void onMessage(MessageType messageType, Text message, UUID senderUuid, CallbackInfo ci) { String msg = message.getString(); - if (SkyblockerConfig.get().dungeons.solveThreeWeirdos && msg.contains("[NPC]")) { - for (String s : threeWeirdos) { - if (msg.contains(s)) { - return Text.of(msg.replaceFirst("§c", "§a")); - } - } + if (Utils.isDungeons) { + if (SkyblockerConfig.get().locations.dungeons.solveThreeWeirdos && msg.contains("[NPC]")) + DungeonPuzzles.threeWeirdos(msg); } - return message; - } + if (Utils.isSkyblock) { + if (SkyblockerConfig.get().locations.dwarvenMines.solvePuzzler && msg.contains("[NPC]") && msg.contains("Puzzler")) + Puzzler.puzzler(msg); - @Inject(method = "onChatMessage", at = @At("HEAD"), cancellable = true) - public void onMessage(MessageType messageType, Text message, UUID senderUuid, CallbackInfo ci) { - if (SkyblockerConfig.get().messages.hideAbility && message.getString().contains("This ability is currently on cooldown for ") || message.getString().contains("No more charges, next one in ")) - ci.cancel(); + if (SkyblockerConfig.get().messages.hideAbility && msg.contains("This ability is currently on cooldown for ") || msg.contains("No more charges, next one in ")) + ci.cancel(); - if (SkyblockerConfig.get().messages.hideHeal && message.getString().contains("You healed ") && message.getString().contains(" health!") || message.getString().contains(" healed you for ")) - ci.cancel(); + if (SkyblockerConfig.get().messages.hideHeal && msg.contains("You healed ") && msg.contains(" health!") || msg.contains(" healed you for ")) + ci.cancel(); - if (SkyblockerConfig.get().messages.hideAOTE && message.getString().contains("There are blocks in the way!")) - ci.cancel(); + if (SkyblockerConfig.get().messages.hideAOTE && msg.contains("There are blocks in the way!")) + ci.cancel(); - if (SkyblockerConfig.get().messages.hideImplosion && message.getString().contains("Your Implosion hit ")) - ci.cancel(); + if (SkyblockerConfig.get().messages.hideImplosion && msg.contains("Your Implosion hit ")) + ci.cancel(); - if (SkyblockerConfig.get().messages.hideMoltenWave && message.getString().contains("Your Molten Wave hit ")) - ci.cancel(); + if (SkyblockerConfig.get().messages.hideMoltenWave && msg.contains("Your Molten Wave hit ")) + ci.cancel(); + } } }
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index 65acd522..01c9f0a6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -3,20 +3,16 @@ package me.xmrvizzy.skyblocker.mixin; import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.Attribute; +import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.gui.MapRenderer; import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.FilledMapItem; -import net.minecraft.item.ItemStack; -import net.minecraft.item.map.MapState; -import net.minecraft.nbt.CompoundTag; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Final; @@ -42,52 +38,23 @@ public abstract class InGameHudMixin extends DrawableHelper { @Shadow private int scaledWidth; - @Shadow - public abstract TextRenderer getFontRenderer(); - - private String hpColor = "§c"; - private int hpCurrent = 0; - private int hpMax = 0; - private int manaCurrent = 0; - private int manaMax = 0; + @Shadow public abstract TextRenderer getFontRenderer(); @ModifyVariable(method = "setOverlayMessage(Lnet/minecraft/text/Text;Z)V", at = @At("HEAD")) private Text setOverlayMessage(Text message) { - if (Utils.isSkyblock() && SkyblockerConfig.get().bars.enableBars) { - String actionBar = message.getString(); - - if (actionBar != null) { - if (actionBar.contains("❤")) { - String[] health = actionBar.split("❤")[0] - .split("/"); - hpColor = health[0].substring(0, 2); - hpCurrent = Integer.parseInt(health[0].replaceAll(hpColor, "")); - hpMax = Integer.parseInt(health[1]); - } - if (actionBar.contains("✎")) { - String[] mana = actionBar.split("✎")[0] - .split("§b"); - mana = mana[mana.length - 1].split("/"); - manaCurrent = Integer.parseInt(mana[0]); - manaMax = Integer.parseInt(mana[1]); - } - if (actionBar.contains("❤") && actionBar.contains("✎")) { - actionBar = actionBar.replaceAll(hpColor + hpCurrent + "/" + hpMax + "❤ ", "").replaceAll(" §b" + manaCurrent + "/" + manaMax + "✎ Mana", ""); - return Text.of(actionBar); - } - } - } - return message; + String msg = message.getString(); + if (msg != null && Utils.isSkyblock && SkyblockerConfig.get().general.bars.enableBars) + msg = Utils.parseActionBar(msg); + return Text.of(msg); } @Inject(method = "renderStatusBars", at = @At("HEAD"), cancellable = true) private void renderStatusBars(MatrixStack matrices, CallbackInfo ci) { - if (Utils.isSkyblock()) { - if (SkyblockerConfig.get().dungeons.enableMap) { - renderDungeonMap(matrices); - } + if (Utils.isDungeons && SkyblockerConfig.get().locations.dungeons.enableMap) + DungeonMap.render(matrices); - if (SkyblockerConfig.get().bars.enableBars) { + if (Utils.isSkyblock) { + if (SkyblockerConfig.get().general.bars.enableBars) { ci.cancel(); renderBars(matrices); } @@ -98,62 +65,34 @@ public abstract class InGameHudMixin extends DrawableHelper { @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) private void renderMountHealth(MatrixStack matrices, CallbackInfo ci) { - if (Utils.isSkyblock() && SkyblockerConfig.get().bars.enableBars) { + if (Utils.isSkyblock && SkyblockerConfig.get().general.bars.enableBars) ci.cancel(); - } } - private void renderDungeonMap(MatrixStack matrices) { - ItemStack item = this.client.player.inventory.main.get(8); - CompoundTag tag = item.getTag(); - - if (tag != null && tag.contains("map")) { - VertexConsumerProvider.Immediate vertices = this.client.getBufferBuilders().getEffectVertexConsumers(); - MapRenderer map = this.client.gameRenderer.getMapRenderer(); - MapState state = FilledMapItem.getMapState(item, this.client.world); - - if (state == null) return; - matrices.push(); - matrices.translate(2, 2, 0); - matrices.scale(1, 1, 0); - map.draw(matrices, vertices, state, false, 15728880); - vertices.draw(); - matrices.pop(); - } - } - private void renderBars(MatrixStack matrices) { this.client.getTextureManager().bindTexture(ICONS); this.client.getProfiler().push("skyblockBars"); { int left = this.scaledWidth / 2 - 91; - int hpWidth = getWidth(hpCurrent, hpMax); - int manaWidth = getWidth(manaCurrent, manaMax); + int hpWidth = getWidth(Attribute.HEALTH.get(), Attribute.MAX_HEALTH.get()); + int manaWidth = getWidth(Attribute.MANA.get(), Attribute.MAX_MANA.get()); - if (hpColor.equals("§6") && SkyblockerConfig.get().bars.enableAbsorption) { - renderBar(matrices, left, hpWidth, SkyblockerConfig.get().bars.absorbedHealthColor); - } else { - renderBar(matrices, left, hpWidth, SkyblockerConfig.get().bars.healthColor); - } - renderBar(matrices, left + 71 + 40, manaWidth, SkyblockerConfig.get().bars.manaColor); + renderBar(matrices, left, hpWidth, SkyblockerConfig.get().general.bars.healthColor); + renderBar(matrices, left + 71 + 40, manaWidth, SkyblockerConfig.get().general.bars.manaColor); } this.client.getProfiler().pop(); this.client.getProfiler().push("skyblockTexts"); { int left = this.scaledWidth / 2 - 90; - String hpText = hpCurrent + "/" + hpMax; - String manaText = manaCurrent + "/" + manaMax; + String hpText = Attribute.HEALTH.get() + "/" + Attribute.MAX_HEALTH.get(); + String manaText = Attribute.MANA.get() + "/" + Attribute.MAX_MANA.get(); int hpOffset = (71 - this.getFontRenderer().getWidth(hpText)) / 2; int manaOffset = (71 - this.getFontRenderer().getWidth(manaText)) / 2; - if (hpColor.equals("§6") && SkyblockerConfig.get().bars.enableAbsorption) { - renderText(matrices, hpText, left + hpOffset, SkyblockerConfig.get().bars.absorbedHealthColor); - } else { - renderText(matrices, hpText, left + hpOffset, SkyblockerConfig.get().bars.healthColor); - } - renderText(matrices, manaText, left + 71 + 40 + manaOffset, SkyblockerConfig.get().bars.manaColor); + renderText(matrices, hpText, left + hpOffset, SkyblockerConfig.get().general.bars.healthColor); + renderText(matrices, manaText, left + 71 + 40 + manaOffset, SkyblockerConfig.get().general.bars.manaColor); } this.client.getProfiler().pop(); } @@ -176,7 +115,6 @@ public abstract class InGameHudMixin extends DrawableHelper { private void renderText(MatrixStack matrices, String str, int left, int color) { int top = this.scaledHeight - 42; - this.getFontRenderer().draw(matrices, str, (float) (left + 1), (float) top, 0); this.getFontRenderer().draw(matrices, str, (float) (left - 1), (float) top, 0); this.getFontRenderer().draw(matrices, str, (float) left, (float) (top + 1), 0); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java new file mode 100644 index 00000000..97e7b08d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java @@ -0,0 +1,65 @@ +package me.xmrvizzy.skyblocker.mixin; + +import com.mojang.blaze3d.systems.RenderSystem; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.Attribute; +import me.xmrvizzy.skyblocker.utils.ItemUtils; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.Tessellator; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.math.MathHelper; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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.Pattern; + +@Mixin(ItemRenderer.class) +public abstract class ItemRendererMixin { + + @Shadow protected abstract void renderGuiQuad(BufferBuilder buffer, int x, int y, int width, int height, int red, int green, int blue, int alpha); + + @Inject(method = "renderGuiItemOverlay(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) + public void renderItemBar(TextRenderer renderer, ItemStack stack, int x, int y, @Nullable String countLabel, CallbackInfo ci) { + if (Utils.isSkyblock && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel && !stack.isEmpty()) { + if (!stack.hasTag() && !stack.getTag().contains("ExtraAttributes")) return; + CompoundTag attributes = stack.getTag().getCompound("ExtraAttributes"); + if (!attributes.contains("drill_fuel")) return; + + float current = 3000.0F; + float max = 3000.0F; + + for (String line : ItemUtils.getLore(stack)) { + if (line.contains("Fuel: ")) { + String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim(); + String[] split = clear.split("/"); + current = Integer.parseInt(split[0]); + max = Integer.parseInt(split[1]) * 1000; + } + } + + RenderSystem.disableDepthTest(); + RenderSystem.disableTexture(); + RenderSystem.disableAlphaTest(); + RenderSystem.disableBlend(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder buffer = tessellator.getBuffer(); + float hue = Math.max(0.0F, 1.0F - (max - current) / max); + int width = Math.round(current / max * 13.0F); + int rgb = MathHelper.hsvToRgb(hue / 3.0F, 1.0F, 1.0F); + this.renderGuiQuad(buffer, x + 2, y + 13, 13, 2, 0,0,0,255); + this.renderGuiQuad(buffer, x + 2, y + 13, width, 1, rgb >> 16 & 255, rgb >> 8 & 255, rgb & 255, 255); + RenderSystem.enableBlend(); + RenderSystem.enableAlphaTest(); + RenderSystem.enableTexture(); + RenderSystem.enableDepthTest(); + } + } +}
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java new file mode 100644 index 00000000..20443eb3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java @@ -0,0 +1,17 @@ +package me.xmrvizzy.skyblocker.mixin; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import net.minecraft.client.MinecraftClient; +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; + +@Mixin(MinecraftClient.class) +public class MinecraftClientMixin { + + @Inject(method = "tick", at = @At("HEAD")) + public void tick(CallbackInfo ci) { + SkyblockerMod.onTick(); + } +}
\ No newline at end of file |