diff options
author | Alexey Krainev <xmrvizzy@ya.ru> | 2021-01-19 22:23:47 +0500 |
---|---|---|
committer | Alexey Krainev <xmrvizzy@ya.ru> | 2021-01-19 22:23:47 +0500 |
commit | df3eb315d2bdcb398af60a38dc44a4e739fd2128 (patch) | |
tree | 60c2c3a0b83a3a7624539914c42667e92f0465a5 /src/main/java | |
parent | 83918b58ef710f5e425ff6b5577f43382921300f (diff) | |
download | Skyblocker-df3eb315d2bdcb398af60a38dc44a4e739fd2128.tar.gz Skyblocker-df3eb315d2bdcb398af60a38dc44a4e739fd2128.tar.bz2 Skyblocker-df3eb315d2bdcb398af60a38dc44a4e739fd2128.zip |
v1.0.2
Diffstat (limited to 'src/main/java')
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 |