aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorAlexey Krainev <xmrvizzy@ya.ru>2021-01-19 22:23:47 +0500
committerAlexey Krainev <xmrvizzy@ya.ru>2021-01-19 22:23:47 +0500
commitdf3eb315d2bdcb398af60a38dc44a4e739fd2128 (patch)
tree60c2c3a0b83a3a7624539914c42667e92f0465a5 /src/main/java
parent83918b58ef710f5e425ff6b5577f43382921300f (diff)
downloadSkyblocker-df3eb315d2bdcb398af60a38dc44a4e739fd2128.tar.gz
Skyblocker-df3eb315d2bdcb398af60a38dc44a4e739fd2128.tar.bz2
Skyblocker-df3eb315d2bdcb398af60a38dc44a4e739fd2128.zip
v1.0.2
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java17
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java34
-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
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/Attribute.java21
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java34
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonPuzzles.java34
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java34
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java103
12 files changed, 413 insertions, 145 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index 8fb35a60..7116aa78 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -1,19 +1,28 @@
package me.xmrvizzy.skyblocker;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.api.ClientModInitializer;
+import net.minecraft.client.MinecraftClient;
public class SkyblockerMod implements ClientModInitializer {
public static final String NAMESPACE = "skyblocker";
- private static SkyblockerMod INSTANCE;
+ private static int TICKS = 0;
@Override
public void onInitializeClient() {
- INSTANCE = this;
SkyblockerConfig.init();
}
- public static SkyblockerMod get() {
- return INSTANCE;
+ public static void onTick() {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client == null) return;
+
+ TICKS++;
+ if (TICKS % 20 == 0) {
+ if (client.world != null && !client.isInSingleplayer())
+ Utils.sbChecker();
+ TICKS = 0;
+ }
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index d38d04a6..8b48fc8f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -13,13 +13,9 @@ public class SkyblockerConfig implements ConfigData {
@ConfigEntry.Gui.TransitiveObject
public General general = new General();
- @ConfigEntry.Category("bars")
+ @ConfigEntry.Category("locations")
@ConfigEntry.Gui.TransitiveObject
- public Bars bars = new Bars();
-
- @ConfigEntry.Category("dungeons")
- @ConfigEntry.Gui.TransitiveObject
- public Dungeons dungeons = new Dungeons();
+ public Locations locations = new Locations();
@ConfigEntry.Category("messages")
@ConfigEntry.Gui.TransitiveObject
@@ -27,22 +23,38 @@ public class SkyblockerConfig implements ConfigData {
public static class General {
public String apiKey;
+
+ @ConfigEntry.Category("bars")
+ @ConfigEntry.Gui.CollapsibleObject(startExpanded = true)
+ public Bars bars = new Bars();
}
public static class Bars {
public boolean enableBars = true;
- public boolean enableAbsorption = true;
- @ConfigEntry.ColorPicker()
- public int absorbedHealthColor = 0xffaa00;
@ConfigEntry.ColorPicker()
public int healthColor = 0xff5555;
@ConfigEntry.ColorPicker()
public int manaColor = 0x55ffff;
}
+ public static class Locations {
+ @ConfigEntry.Category("dungeons")
+ @ConfigEntry.Gui.CollapsibleObject(startExpanded = true)
+ public Dungeons dungeons = new Dungeons();
+
+ @ConfigEntry.Category("dwarvenmines")
+ @ConfigEntry.Gui.CollapsibleObject(startExpanded = true)
+ public DwarvenMines dwarvenMines = new DwarvenMines();
+ }
+
public static class Dungeons {
- public boolean enableMap = false;
- public boolean solveThreeWeirdos = false;
+ public boolean enableMap = true;
+ public boolean solveThreeWeirdos = true;
+ }
+
+ public static class DwarvenMines {
+ public boolean enableDrillFuel = true;
+ public boolean solvePuzzler = true;
}
public static class Messages {
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
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/Attribute.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/Attribute.java
new file mode 100644
index 00000000..45532642
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/Attribute.java
@@ -0,0 +1,21 @@
+package me.xmrvizzy.skyblocker.skyblock;
+
+public enum Attribute {
+ HEALTH(100),
+ MAX_HEALTH(100),
+ MANA(100),
+ MAX_MANA(100),
+ DEFENCE(0);
+
+ private int value;
+ Attribute(int value) {
+ this.value = value;
+ }
+
+ public int get() {
+ return value;
+ }
+ public void set(int value) {
+ this.value = value;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java
new file mode 100644
index 00000000..61e747d0
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java
@@ -0,0 +1,34 @@
+package me.xmrvizzy.skyblocker.skyblock.dungeon;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.MapRenderer;
+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;
+
+public class DungeonMap {
+
+ public static void render(MatrixStack matrices) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.player == null && client.world == null) return;
+ ItemStack item = client.player.inventory.main.get(8);
+ CompoundTag tag = item.getTag();
+
+ if (tag != null && tag.contains("map")) {
+ VertexConsumerProvider.Immediate vertices = client.getBufferBuilders().getEffectVertexConsumers();
+ MapRenderer map = client.gameRenderer.getMapRenderer();
+ MapState state = FilledMapItem.getMapState(item, 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();
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonPuzzles.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonPuzzles.java
new file mode 100644
index 00000000..3fae82cd
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonPuzzles.java
@@ -0,0 +1,34 @@
+package me.xmrvizzy.skyblocker.skyblock.dungeon;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.entity.decoration.ArmorStandEntity;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+
+public class DungeonPuzzles {
+
+ public static void threeWeirdos(String message) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.player == null && client.world == null) return;
+
+ String[] solutions = {
+ "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,"
+ };
+
+ for (String s : solutions) {
+ if (message.contains(s)) {
+ String npc = message.substring(message.indexOf("]") + 4, message.indexOf(":") - 2);
+ client.world.getEntitiesByClass(ArmorStandEntity.class, client.player.getBoundingBox().expand(3), entity -> {
+ if (entity.hasCustomName() && entity.getCustomName().getString().contains(npc))
+ return true;
+ return false;
+ }).forEach(entity -> entity.setCustomName(Text.of(Formatting.GREEN + npc)));
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
new file mode 100644
index 00000000..07ae26a3
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
@@ -0,0 +1,34 @@
+package me.xmrvizzy.skyblocker.skyblock.dwarven;
+
+import net.minecraft.block.Blocks;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.util.Formatting;
+import net.minecraft.util.math.BlockPos;
+
+public class Puzzler {
+ public static void puzzler(String message) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.player == null && client.world == null) return;
+
+ int x = 181;
+ int y = 195;
+ int z = 135;
+
+ String path = Formatting.strip(message);
+ path = path.substring(path.indexOf(":") + 1);
+ String check = path
+ .replaceAll("▲", "").replaceAll("▶", "")
+ .replaceAll("▼", "").replaceAll("◀", "");
+
+ if (check.isEmpty()) {
+ for (char c : path.toCharArray()) {
+ if (c == '▲') z += 1;
+ if (c == '▶') x -= 1;
+ if (c == '▼') z -= 1;
+ if (c == '◀') x += 1;
+ }
+
+ client.world.setBlockState(new BlockPos(x, y, z), Blocks.EMERALD_BLOCK.getDefaultState());
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
new file mode 100644
index 00000000..ea1db236
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ItemUtils.java
@@ -0,0 +1,40 @@
+package me.xmrvizzy.skyblocker.utils;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.ListTag;
+import net.minecraft.text.Text;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class ItemUtils {
+
+ public static List<String> getLore(ItemStack item) {
+ if (item.hasTag() && item.getTag().contains("display", 10)) {
+ CompoundTag tag = item.getTag().getCompound("display");
+
+ if (tag.contains("Lore", 9)) {
+ ListTag lore = tag.getList("Lore", 8);
+
+ List<String> list = new ArrayList<>();
+ for (int line = 0; line < lore.size(); line++) {
+ String string = lore.getString(line);
+ try {
+ Text text = Text.Serializer.fromJson(string);
+ if (text != null) {
+ string = text.getString();
+ if (!string.replaceAll("\\s+","").isEmpty())
+ list.add(string);
+ }
+ } catch (Exception e) {}
+ }
+
+ return list;
+ }
+ }
+
+ return Collections.emptyList();
+ }
+} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
index d305370e..7318bc3f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java
@@ -1,24 +1,99 @@
package me.xmrvizzy.skyblocker.utils;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.skyblock.Attribute;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.scoreboard.Scoreboard;
import net.minecraft.scoreboard.ScoreboardObjective;
-import net.minecraft.text.Text;
+import net.minecraft.scoreboard.ScoreboardPlayerScore;
+import net.minecraft.scoreboard.Team;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
public class Utils {
- public static boolean isSkyblock() {
- MinecraftClient client = MinecraftClient.getInstance();
- if (client != null && client.world != null && !client.isInSingleplayer()) {
- ScoreboardObjective scoreboard = client.world.getScoreboard().getObjectiveForSlot(1);
- if (scoreboard != null) {
- String name = "";
- for (Text text : scoreboard.getDisplayName().getSiblings()) {
- name += text.getString();
- }
- if (name.contains("SKYBLOCK")) {
- return true;
- }
+ public static boolean isSkyblock = false;
+ public static boolean isDungeons = false;
+
+ public static String parseActionBar(String msg) {
+ String[] sections = msg.split(" {3,}");
+ List<String> unused = new ArrayList<String>();
+
+ for (String section : sections) {
+ String clear = Pattern.compile("[^0-9 /]").matcher(section).replaceAll("").trim();
+ String[] split = clear.split("/");
+
+ if (section.contains("❤")) {
+ if (section.startsWith("§6")) split[0] = split[0].substring(1);
+ Attribute.HEALTH.set(Integer.parseInt(split[0]));
+ Attribute.MAX_HEALTH.set(Integer.parseInt(split[1]));
+ } else if (section.contains("❈")) {
+ Attribute.DEFENCE.set(Integer.parseInt(clear));
+ unused.add(section);
+ } else if (section.contains("✎")) {
+ Attribute.MANA.set(Integer.parseInt(split[0]));
+ Attribute.MAX_MANA.set(Integer.parseInt(split[1]));
+ } else {
+ if (section.contains("Drill Fuel") && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) continue;
+ unused.add(section);
}
}
- return false;
+
+ return String.join(" ", unused);
+ }
+
+ public static void sbChecker() {
+ List<String> sidebar = getSidebar();
+ String string = sidebar.toString();
+
+ if (sidebar.isEmpty()) return;
+ if (sidebar.get(sidebar.size() - 1).equals("www.hypixel.net")) {
+ if (sidebar.get(0).equals("SKYBLOCK")) isSkyblock = true;
+ else isSkyblock = false;
+
+ if (isSkyblock && string.contains("The Catacombs")) isDungeons = true;
+ else isDungeons = false;
+ }
+ }
+
+ public static List<String> getSidebar() {
+ List<String> lines = new ArrayList<>();
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.world == null) return lines;
+
+ Scoreboard scoreboard = client.world.getScoreboard();
+ if (scoreboard == null) return lines;
+ ScoreboardObjective sidebar = scoreboard.getObjectiveForSlot(1);
+ if (sidebar == null) return lines;
+
+ Collection<ScoreboardPlayerScore> scores = scoreboard.getAllPlayerScores(sidebar);
+ List<ScoreboardPlayerScore> list = scores.stream()
+ .filter(input -> input != null && input.getPlayerName() != null && !input.getPlayerName().startsWith("#"))
+ .collect(Collectors.toList());
+
+ if (list.size() > 15) {
+ scores = Lists.newArrayList(Iterables.skip(list, scores.size() - 15));
+ } else {
+ scores = list;
+ }
+
+ for (ScoreboardPlayerScore score : scores) {
+ Team team = scoreboard.getPlayerTeam(score.getPlayerName());
+ if (team == null) return lines;
+ String text = team.getPrefix().getString() + team.getSuffix().getString();
+ if (text.trim().length() > 0)
+ lines.add(text);
+ }
+
+ lines.add(sidebar.getDisplayName().getString());
+ Collections.reverse(lines);
+
+ return lines;
}
} \ No newline at end of file