aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/mixin
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/mixin')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java57
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java102
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java65
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/MinecraftClientMixin.java17
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