aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java14
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java1
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/CrystalHollowChestHighlighter.java130
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/GenericBlockHighlighter.java6
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java56
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java8
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/WorldConfig.java25
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/SkyblockProfiles.java32
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/bestiary/BestiaryData.java1094
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/bestiary/BestiaryData.kt213
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/bestiary/BestiaryPage.java270
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/bestiary/BestiaryPage.kt302
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/level/task/MiscTaskLevel.java38
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/rift/RiftPage.java2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/util/Constants.java2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/util/ItemUtils.java13
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/util/ProfileApiSyncer.java39
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/util/StarCultCalculator.java48
18 files changed, 816 insertions, 1477 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java
index b3a84c52..5f501115 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/core/util/render/RenderUtils.java
@@ -311,27 +311,29 @@ public class RenderUtils {
public static void renderBoundingBox(
BlockPos worldPos,
int rgb,
- float partialTicks
+ float partialTicks,
+ boolean disableDepth
) {
Vector3f interpolatedPlayerPosition = getInterpolatedPlayerPosition(partialTicks);
renderBoundingBoxInViewSpace(
worldPos.getX() - interpolatedPlayerPosition.x,
worldPos.getY() - interpolatedPlayerPosition.y,
worldPos.getZ() - interpolatedPlayerPosition.z,
- rgb
+ rgb,
+ disableDepth
);
}
- private static void renderBoundingBoxInViewSpace(double x, double y, double z, int rgb) {
+ private static void renderBoundingBoxInViewSpace(double x, double y, double z, int rgb, boolean disableDepth) {
AxisAlignedBB bb = new AxisAlignedBB(x, y, z, x + 1, y + 1, z + 1);
- GlStateManager.disableDepth();
+ if (disableDepth) GlStateManager.disableDepth();
GlStateManager.disableCull();
GlStateManager.disableTexture2D();
CustomItemEffects.drawFilledBoundingBox(bb, 1f, SpecialColour.special(0, (rgb >> 24) & 0xFF, rgb));
GlStateManager.enableTexture2D();
GlStateManager.enableCull();
- GlStateManager.enableDepth();
+ if (disableDepth) GlStateManager.enableDepth();
}
public static void renderBeaconBeam(BlockPos block, int rgb, float alphaMult, float partialTicks) {
@@ -395,7 +397,7 @@ public class RenderUtils {
if (distSq > 10 * 10) {
RenderUtils.renderBeaconBeam(x, y, z, rgb, 1.0f, partialTicks, true);
} else {
- RenderUtils.renderBoundingBoxInViewSpace(x, y, z, rgb);
+ RenderUtils.renderBoundingBoxInViewSpace(x, y, z, rgb, true);
}
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java b/src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java
index 4a5df63f..ff776025 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/listener/NEUEventListener.java
@@ -172,7 +172,6 @@ public class NEUEventListener {
CrystalOverlay.tick();
FairySouls.getInstance().tick();
XPInformation.getInstance().tick();
- ProfileApiSyncer.getInstance().tick();
ItemCustomizeManager.tick();
BackgroundBlur.markDirty();
NPCRetexturing.getInstance().tick();
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/CrystalHollowChestHighlighter.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/CrystalHollowChestHighlighter.java
new file mode 100644
index 00000000..f9f526b1
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/CrystalHollowChestHighlighter.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2023 NotEnoughUpdates contributors
+ *
+ * This file is part of NotEnoughUpdates.
+ *
+ * NotEnoughUpdates is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * NotEnoughUpdates is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package io.github.moulberry.notenoughupdates.miscfeatures.world;
+
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe;
+import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils;
+import io.github.moulberry.notenoughupdates.util.SBInfo;
+import io.github.moulberry.notenoughupdates.util.SpecialColour;
+import net.minecraft.block.Block;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.client.Minecraft;
+import net.minecraft.init.Blocks;
+import net.minecraft.network.play.server.S22PacketMultiBlockChange;
+import net.minecraft.network.play.server.S23PacketBlockChange;
+import net.minecraft.util.BlockPos;
+import net.minecraft.util.Vec3;
+import net.minecraft.world.World;
+import net.minecraftforge.client.event.RenderWorldLastEvent;
+import net.minecraftforge.event.entity.player.PlayerInteractEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+@NEUAutoSubscribe
+public class CrystalHollowChestHighlighter extends GenericBlockHighlighter {
+
+ // Because ConcurrentModificationException is the bane of me
+ public static CopyOnWriteArrayList<BlockPos> markedBlocks = new CopyOnWriteArrayList<>();
+
+ public static void processBlockChangePacket(S23PacketBlockChange packetIn) {
+ BlockPos pos = packetIn.getBlockPosition();
+ checkForChest(pos, packetIn.blockState);
+ }
+
+ public static void processMultiBlockChangePacket(S22PacketMultiBlockChange packetIn) {
+ for (S22PacketMultiBlockChange.BlockUpdateData blockChanged : packetIn.getChangedBlocks()) {
+ BlockPos pos = blockChanged.getPos();
+ checkForChest(pos, blockChanged.getBlockState());
+ }
+ }
+
+ public static void checkForChest(BlockPos pos, IBlockState blockState) {
+ IBlockState oldState = Minecraft.getMinecraft().theWorld.getBlockState(pos);
+
+ if ((oldState.getBlock() == Blocks.air || oldState.getBlock() == Blocks.stone) &&
+ blockState.getBlock() == Blocks.chest) {
+
+ // Only add if in a 10x10x10 area. Minimises other players' chests being caught
+ if (Minecraft.getMinecraft().thePlayer.getEntityBoundingBox().expand(10, 10, 10).isVecInside(new Vec3(pos))) {
+ markedBlocks.add(pos);
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onTick(TickEvent.ClientTickEvent event) {
+ if (!isEnabled()) return;
+
+ markedBlocks.forEach(this::tryRegisterInterest);
+
+ // Here to catch chests that get highlighted by other people after they open them, and
+ // any highlighted blocks in which the chest despawned in
+ List<BlockPos> blockToRemove = new ArrayList<>();
+ highlightedBlocks.forEach(it -> {
+ if (Minecraft.getMinecraft().theWorld.getBlockState(it).getBlock() != Blocks.chest) {
+ blockToRemove.add(it);
+ }
+ });
+
+ blockToRemove.forEach(highlightedBlocks::remove);
+ }
+
+ @SubscribeEvent
+ public void onBlockInteraction(PlayerInteractEvent event) {
+ if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) {
+ markedBlocks.remove(event.pos);
+ highlightedBlocks.remove(event.pos);
+ }
+ }
+
+ @Override
+ public void onWorldRenderLast(RenderWorldLastEvent event) {
+ if (!isEnabled()) return;
+ World w = Minecraft.getMinecraft().theWorld;
+ if (w == null) return;
+ for (BlockPos blockPos : highlightedBlocks) {
+ RenderUtils.renderBoundingBox(blockPos, getColor(blockPos), event.partialTicks, false);
+ }
+ }
+
+ @Override
+ protected boolean isEnabled() {
+ return "crystal_hollows".equals(SBInfo.getInstance().getLocation()) &&
+ NotEnoughUpdates.INSTANCE.config.world.highlightCrystalHollowChests;
+ }
+
+ @Override
+ protected boolean isValidHighlightSpot(BlockPos key) {
+ World w = Minecraft.getMinecraft().theWorld;
+ if (w == null) return false;
+ Block b = w.getBlockState(key).getBlock();
+ return b == Blocks.chest;
+ }
+
+ @Override
+ protected int getColor(BlockPos blockPos) {
+ return SpecialColour.specialToChromaRGB(NotEnoughUpdates.INSTANCE.config.world.crystalHollowChestColor);
+ }
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/GenericBlockHighlighter.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/GenericBlockHighlighter.java
index 67d6f46e..5cacff2b 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/GenericBlockHighlighter.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/world/GenericBlockHighlighter.java
@@ -49,7 +49,7 @@ public abstract class GenericBlockHighlighter {
World w = Minecraft.getMinecraft().theWorld;
if (w == null) return;
for (BlockPos blockPos : highlightedBlocks) {
- RenderUtils.renderBoundingBox(blockPos, getColor(blockPos), event.partialTicks);
+ RenderUtils.renderBoundingBox(blockPos, getColor(blockPos), event.partialTicks, true);
}
}
@@ -110,6 +110,10 @@ public abstract class GenericBlockHighlighter {
highlightedBlocks.clear();
}
+ public boolean tryRegisterInterest(BlockPos pos) {
+ return tryRegisterInterest(pos.getX(), pos.getY(), pos.getZ());
+ }
+
public boolean tryRegisterInterest(double x, double y, double z) {
BlockPos blockPos = new BlockPos(x, y, z);
boolean contains = highlightedBlocks.contains(blockPos);
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java
index f98523af..c83b310c 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/CalendarOverlay.java
@@ -55,6 +55,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
+import org.jetbrains.annotations.NotNull;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
@@ -65,12 +66,12 @@ import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.TreeMap;
+import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -133,6 +134,11 @@ public class CalendarOverlay {
private static final ItemStack DA_STACK; // Dark Auction
private static final ItemStack JF_STACK; // Jacob's Farming Contest
+ private static final ItemStack STAR_CULT_STACK = Utils.createItemStack(
+ Items.nether_star,
+ "Cult of the Fallen Star",
+ "NEU Calendar Item"
+ ); // Star Cult Stack
static {
NBTTagCompound tag = new NBTTagCompound();
@@ -215,7 +221,7 @@ public class CalendarOverlay {
}
public Set<SBEvent> getEventsAt(long timestamp) {
- return eventMap.computeIfAbsent(timestamp, k -> new HashSet<>());
+ return eventMap.computeIfAbsent(timestamp, k -> new TreeSet<>());
}
JsonObject getFarmingEventTypes() {
@@ -267,6 +273,7 @@ public class CalendarOverlay {
fillSpecialMayors(4);
fillWeather();
fillRepoMandatedEvents();
+ fillStarCult();
}
}
@@ -279,6 +286,37 @@ public class CalendarOverlay {
}
}
+ public void fillStarCult() {
+ SkyBlockTime now = SkyBlockTime.now();
+
+ long STAR_CULT_DURATION = 60 * 1000L * 6;
+ List<SkyBlockTime> allTimes = new ArrayList<>();
+ allTimes.add(new SkyBlockTime(now.getYear() - 1, 12, 28, 0, 0, 0));
+ for (int i = 1; i <= 12; i++) {
+ for (int d = 7; d < 30; d += 7) {
+ allTimes.add(new SkyBlockTime(now.getYear(), i, d, 0, 0, 0));
+ }
+ }
+ for (SkyBlockTime allTime : allTimes) {
+ addEvent(
+ allTime,
+ new SBEvent(
+ "starcult",
+ "§3Cult of the Fallen Star",
+ false,
+ STAR_CULT_STACK,
+ Arrays.asList(
+ "§3The Cult of the Fallen Star meets then.",
+ "§3Attending may give a reward",
+ "§3You can find them near the Star in the Dwarven Mines"
+ ),
+ STAR_CULT_DURATION,
+ true
+ )
+ );
+ }
+ }
+
private void fillWeather() {
long currentTime = System.currentTimeMillis();
@@ -1505,7 +1543,7 @@ public class CalendarOverlay {
GlStateManager.color(1, 1, 1, 1);
}
- private static class SBEvent {
+ private static class SBEvent implements Comparable<SBEvent> {
String id;
String display;
ItemStack stack;
@@ -1547,6 +1585,18 @@ public class CalendarOverlay {
}
return stack;
}
+
+ @Override
+ public int compareTo(@NotNull CalendarOverlay.SBEvent o) {
+ int i;
+ if ((i = id.compareTo(o.id)) != 0) return i;
+ if ((i = display.compareTo(o.display)) != 0) return i;
+ if ((i = Long.compare(lastsFor, o.lastsFor)) != 0) return i;
+ if ((i = Boolean.compare(isSpecial, o.isSpecial)) != 0) return i;
+ if ((i = Boolean.compare(isArtificial, o.isArtificial)) != 0) return i;
+
+ return 0;
+ }
}
private String prettyTime(long millis, boolean trimmed) {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java
index 49f357e6..5245d604 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinNetHandlerPlayClient.java
@@ -26,6 +26,7 @@ import io.github.moulberry.notenoughupdates.miscfeatures.EnchantingSolvers;
import io.github.moulberry.notenoughupdates.miscfeatures.ItemCooldowns;
import io.github.moulberry.notenoughupdates.miscfeatures.MiningStuff;
import io.github.moulberry.notenoughupdates.miscfeatures.StorageManager;
+import io.github.moulberry.notenoughupdates.miscfeatures.world.CrystalHollowChestHighlighter;
import io.github.moulberry.notenoughupdates.util.SBInfo;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.network.NetHandlerPlayClient;
@@ -33,6 +34,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.Packet;
import net.minecraft.network.play.client.C01PacketChatMessage;
import net.minecraft.network.play.client.C0EPacketClickWindow;
+import net.minecraft.network.play.server.S22PacketMultiBlockChange;
import net.minecraft.network.play.server.S23PacketBlockChange;
import net.minecraft.network.play.server.S2DPacketOpenWindow;
import net.minecraft.network.play.server.S2EPacketCloseWindow;
@@ -119,6 +121,12 @@ public class MixinNetHandlerPlayClient {
public void handleBlockChange(S23PacketBlockChange packetIn, CallbackInfo ci) {
MiningStuff.processBlockChangePacket(packetIn);
ItemCooldowns.processBlockChangePacket(packetIn);
+ CrystalHollowChestHighlighter.processBlockChangePacket(packetIn);
+ }
+
+ @Inject(method = "handleMultiBlockChange", at = @At("HEAD"))
+ public void handleMultiBlockChange(S22PacketMultiBlockChange packetIn, CallbackInfo ci) {
+ CrystalHollowChestHighlighter.processMultiBlockChangePacket(packetIn);
}
@Inject(method = "addToSendQueue", at = @At("HEAD"), cancellable = true)
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/WorldConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/WorldConfig.java
index e509634e..3099efe2 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/WorldConfig.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/WorldConfig.java
@@ -106,4 +106,29 @@ public class WorldConfig {
@ConfigAccordionId(id = 3)
public String frozenTreasuresColor2 = "0:100:0:255:0";
+ @Expose
+ @ConfigOption(
+ name = "Crystal Hollow Chests",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 4)
+ public boolean crystalHollowChestsAccordion = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Crystal Hollow Chest Highlighter",
+ desc = "Highlights chests found in the crystal hollows whilst powder mining"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 4)
+ public boolean highlightCrystalHollowChests = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Chest Highlight Color",
+ desc = "In which color should chests be highlighted"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 4)
+ public String crystalHollowChestColor = "0:66:255:0:41";
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/SkyblockProfiles.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/SkyblockProfiles.java
index c16d8df0..566e0c07 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/SkyblockProfiles.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/SkyblockProfiles.java
@@ -943,37 +943,7 @@ public class SkyblockProfiles {
}
public int getBestiaryLevel() {
- int beLevel = 0;
- for (ItemStack items : BestiaryData.getBestiaryLocations().keySet()) {
- List<String> mobs = BestiaryData.getBestiaryLocations().get(items);
- if (mobs != null) {
- for (String mob : mobs) {
- if (mob != null) {
- float kills = Utils.getElementAsFloat(Utils.getElement(getProfileJson(), "bestiary.kills_" + mob), 0);
- String type;
- if (BestiaryData.getMobType().get(mob) != null) {
- type = BestiaryData.getMobType().get(mob);
- } else {
- type = "MOB";
- }
- JsonObject leveling = Constants.LEVELING;
- ProfileViewer.Level level = null;
- if (leveling != null && Utils.getElement(leveling, "bestiary." + type) != null) {
- JsonArray levelingArray = Utils.getElement(leveling, "bestiary." + type).getAsJsonArray();
- int levelCap = Utils.getElementAsInt(Utils.getElement(leveling, "bestiary.caps." + type), 0);
- level = ProfileViewerUtils.getLevel(levelingArray, kills, levelCap, false);
- }
-
- float levelNum = 0;
- if (level != null) {
- levelNum = level.level;
- }
- beLevel += (int) Math.floor(levelNum);
- }
- }
- }
- }
- return beLevel;
+ return BestiaryData.calculateTotalBestiaryLevel(BestiaryData.parseBestiaryData(getProfileJson()));
}
public JsonObject getPetsInfo() {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/bestiary/BestiaryData.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/bestiary/BestiaryData.java
deleted file mode 100644
index 36fc07aa..00000000
--- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/bestiary/BestiaryData.java
+++ /dev/null
@@ -1,1094 +0,0 @@
-/*
- * Copyright (C) 2022 NotEnoughUpdates contributors
- *
- * This file is part of NotEnoughUpdates.
- *
- * NotEnoughUpdates is free software: you can redistribute it
- * and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
- *
- * NotEnoughUpdates is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with NotEnoughUpdates. If not, see <https://www.gnu.org/licenses/>.
- */
-
-package io.github.moulberry.notenoughupdates.profileviewer.bestiary;
-
-import io.github.moulberry.notenoughupdates.util.Utils;
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.EnumChatFormatting;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-
-public class BestiaryData {
-
- private static final LinkedHashMap<ItemStack, List<String>> bestiaryLocations = new LinkedHashMap<ItemStack, List<String>>() {
- {
- put(
- Utils.createSkull(
- EnumChatFormatting.AQUA + "Private Island",
- "bdee7687-9c85-4e7a-b789-b55e90d21d68",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="
- ),
- Utils.createList(
- "family_cave_spider",
- "family_enderman_private",
- "family_skeleton",
- "family_slime",
- "family_spider",
- "family_witch",
- "family_zombie"
- )
- );
- put(
- Utils.createSkull(
- EnumChatFormatting.AQUA + "Hub",
- "88208736-41cd-4ed8-8ed7-53179140a7fa",
- "eyJ0aW1lc3RhbXAiOjE1NTkyMTU0MTY5MDksInByb2ZpbGVJZCI6IjQxZDNhYmMyZDc0OTQwMGM5MDkwZDU0MzRkMDM4MzFiIiwicHJvZmlsZU5hbWUiOiJNZWdha2xvb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Q3Y2M2Njg3NDIzZDA1NzBkNTU2YWM1M2UwNjc2Y2I1NjNiYmRkOTcxN2NkODI2OWJkZWJlZDZmNmQ0ZTdiZjgifX19"
- ),
- Utils.createList("family_unburried_zombie", "family_old_wolf", "family_ruin_wolf", "family_zombie_villager")
- );
- put(
- Utils.createSkull(
- EnumChatFormatting.AQUA + "Spiders Den",
- "acbeaf98-2081-40c5-b5a3-221a2957d532",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzc1NDMxOGEzMzc2ZjQ3MGU0ODFkZmNkNmM4M2E1OWFhNjkwYWQ0YjRkZDc1NzdmZGFkMWMyZWYwOGQ4YWVlNiJ9fX0"
- ),
- Utils.createList(
- "family_arachne",
- "family_arachne_brood",
- "family_arachne_keeper",
- "family_brood_mother_spider",
- "family_dasher_spider",
- "family_respawning_skeleton",
- "family_random_slime",
- "family_spider_jockey",
- "family_splitter_spider",
- "family_voracious_spider",
- "family_weaver_spider"
- )
- );
- put(
- Utils.createSkull(
- EnumChatFormatting.AQUA + "The End",
- "e39ea8b1-a267-48a9-907a-1b97b85342bc",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg0MGI4N2Q1MjI3MWQyYTc1NWRlZGM4Mjg3N2UwZWQzZGY2N2RjYzQyZWE0NzllYzE0NjE3NmIwMjc3OWE1In19fQ"
- ),
- Utils.createList(
- "family_dragon",
- "family_enderman",
- "family_endermite",
- "family_corrupted_protector",
- "family_obsidian_wither",
- "family_voidling_extremist",
- "family_voidling_fanatic",
- "family_watcher",
- "family_zealot_enderman"
- )
- );
- put(
- Utils.createSkull(
- EnumChatFormatting.AQUA + "Crimson Isles",
- "d8489bfe-dcd7-41f0-bfbd-fb482bf61ecb",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzM2ODdlMjVjNjMyYmNlOGFhNjFlMGQ2NGMyNGU2OTRjM2VlYTYyOWVhOTQ0ZjRjZjMwZGNmYjRmYmNlMDcxIn19fQ"
- ),
- Utils.createList(
- "family_ashfang",
- "family_barbarian_duke_x",
- "family_bladesoul",
- "family_blaze",
- "family_flaming_spider",
- "family_ghast",
- "family_mage_outlaw",
- "family_magma_cube",
- "family_magma_boss",
- "family_matcho",
- "family_charging_mushroom_cow",
- "family_pigman",
- "family_wither_skeleton",
- "family_wither_spectre"
- )
- );
- put(
- Utils.createSkull(
- EnumChatFormatting.AQUA + "Deep Caverns",
- "896b5137-a2dd-4de2-8c63-d5a5649bfc70",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTY5YTFmMTE0MTUxYjQ1MjEzNzNmMzRiYzE0YzI5NjNhNTAxMWNkYzI1YTY1NTRjNDhjNzA4Y2Q5NmViZmMifX19"
- ),
- Utils.createList(
- "family_automaton",
- "family_butterfly",
- "family_emerald_slime",
- "family_caverns_ghost",
- "family_goblin",
- "family_team_treasurite",
- "family_ice_walker",
- "family_lapis_zombie",
- "family_diamond_skeleton",
- "family_diamond_zombie",
- "family_redstone_pigman",
- "family_sludge",
- "family_invisible_creeper",
- "family_thyst",
- "family_treasure_hoarder",
- "family_worms",
- "family_yog"
- )
- );
- put(
- Utils.createSkull(
- EnumChatFormatting.AQUA + "The Park",
- "6473b2ff-0575-4aec-811f-5f0dca2131b6",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTIyMWY4MTNkYWNlZTBmZWY4YzU5Zjc2ODk0ZGJiMjY0MTU0NzhkOWRkZmM0NGMyZTcwOGE2ZDNiNzU0OWIifX19"
- ),
- Utils.createList("family_howling_spirit", "family_pack_spirit", "family_soul_of_the_alpha")
- );
- put(
- Utils.createItemStack(Item.getItemFromBlock(Blocks.lit_pumpkin), EnumChatFormatting.AQUA + "Spooky"),
- Utils.createList(
- "family_batty_witch",
- "family_headless_horseman",
- "family_phantom_spirit",
- "family_scary_jerry",
- "family_trick_or_treater",
- "family_wither_gourd",
- "family_wraith"
- )
- );
- put(
- Utils.createSkull(
- EnumChatFormatting.AQUA + "Catacombs",
- "00b3837d-9275-304c-8bf9-656659087e6b",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTY0ZTFjM2UzMTVjOGQ4ZmZmYzM3OTg1YjY2ODFjNWJkMTZhNmY5N2ZmZDA3MTk5ZThhMDVlZmJlZjEwMzc5MyJ9fX0"
- ),
- Utils.createList(
- "family_diamond_guy",
- "family_cellar_spider",
- "family_crypt_dreadlord",
- "family_crypt_lurker",
- "family_crypt_souleater",
- "family_king_midas",
- "family_lonely_spider",
- "family_lost_adventurer",
- "family_scared_skeleton",
- "family_shadow_assassin",
- "family_skeleton_grunt",
- "family_skeleton_master",
- "family_skeleton_soldier",
- "family_skeletor",
- "family_sniper_skeleton",
- "family_super_archer",
- "family_super_tank_zombie",
- "family_crypt_tank_zombie",
- "family_watcher_summon_undead",
- "family_dungeon_respawning_skeleton",
- "family_crypt_witherskeleton",
- "family_zombie_commander",
- "family_zombie_grunt",
- "family_zombie_knight",
- "family_zombie_soldier"
- )
- );
- }
- };
- private static final LinkedHashMap<String, ItemStack> bestiaryMobs = new LinkedHashMap<String, ItemStack>() {
- {
- // Private Island
- put(
- "family_cave_spider",
- Utils.createSkull(
- EnumChatFormatting.AQUA + "§aCave Spider",
- "a8aee72d-0d1d-3db7-8cf8-be1ce6ec2dc4",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDE2NDVkZmQ3N2QwOTkyMzEwN2IzNDk2ZTk0ZWViNWMzMDMyOWY5N2VmYzk2ZWQ3NmUyMjZlOTgyMjQifX19"
- )
- );
- put(
- "family_enderman_private",
- Utils.createSkull(
- EnumChatFormatting.AQUA + "§aEnderman",
- "2005daad-730b-363c-abae-e6f3830816fb",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTZjMGIzNmQ1M2ZmZjY5YTQ5YzdkNmYzOTMyZjJiMGZlOTQ4ZTAzMjIyNmQ1ZTgwNDVlYzU4NDA4YTM2ZTk1MSJ9fX0="
- )
- );
- put(
- "family_skeleton",
- Utils.createSkull(
- EnumChatFormatting.AQUA + "§aSkeleton",
- "53924f1a-87e6-4709-8e53-f1c7d13dc239",
- "ewogICJ0aW1lc3RhbXAiIDogMTY1NTYzMTgzNjcwNCwKICAicHJvZmlsZUlkIiA6ICI1MzkyNGYxYTg3ZTY0NzA5OGU1M2YxYzdkMTNkYzIzOSIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaHJvd3BvIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzg4ZWI2OGE0ZDM4ZTlmNDQ2YjhlOTkyNzVmMTYwMzAyZjM2NmVmMTAyMTZhYmY5NDg0ODdlNTgyNTEyYmQwZjMiCiAgICB9CiAgfQp9="
- )
- );
- put(
- "family_slime",
- Utils.createSkull(
- EnumChatFormatting.AQUA + "§aSlime",
- "3b70a2f3-319c-38d5-b7d1-5b2425770184",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODk1YWVlYzZiODQyYWRhODY2OWY4NDZkNjViYzQ5NzYyNTk3ODI0YWI5NDRmMjJmNDViZjNiYmI5NDFhYmU2YyJ9fX0="
- )
- );
- put(
- "family_spider",
- Utils.createSkull(
- EnumChatFormatting.AQUA + "§aSpider",
- "7c63f3cf-a963-311a-aeca-3a075b417806",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2Q1NDE1NDFkYWFmZjUwODk2Y2QyNThiZGJkZDRjZjgwYzNiYTgxNjczNTcyNjA3OGJmZTM5MzkyN2U1N2YxIn19fQ=="
- )
- );
- put(
- "family_witch",
- Utils.createSkull(
- EnumChatFormatting.AQUA + "§aWitch",
- "cf4f97d7-2e1f-3678-9ca3-4a7b9666cc28",
- "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmNlNjYwNDE1N2ZjNGFiNTU5MWU0YmNmNTA3YTc0OTkxOGVlOWM0MWUzNTdkNDczNzZlMGVlNzM0MjA3NGM5MCJ9fX0="
- )
- );
- put(
- "family_zombie",
- Utils.createSkull(
- EnumChatFormatting.AQUA + "§aZombie",
- "9673d491-d589-44cb-b63e-5f8b3148b3df",
- "ewogICJ0aW1lc3RhbXAiIDogMTY0Njc1NjU2MzM1MiwKICAicHJvZmlsZUlkIiA6ICJkYmQ4MDQ2M2EwMzY0Y2FjYjI3OGNhODBhMDBkZGIxMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJ4bG9nMjEiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjM2NjZkMWJkZjQ1NThiMGQxNjk5MGIyNDFlODE4NWNiZjU4YzNlMDNjMjRkOTA0NTQ0ZThjYzY1YjFjMzhk