diff options
| author | nopo <nopotheemail@gmail.com> | 2023-08-30 21:41:36 +1000 |
|---|---|---|
| committer | nopo <nopotheemail@gmail.com> | 2023-08-30 21:41:36 +1000 |
| commit | 6cf760ce3e336be75de2998a78aec449f472a82f (patch) | |
| tree | 9cea4179573e777fb1e1d3e7dec4904d3ee033f9 | |
| parent | a271296fdc2ac139b3893adfd4f736985a8394a2 (diff) | |
| parent | 7b1ec0196ec068a469eb49fedc624347dd2a9158 (diff) | |
| download | NotEnoughUpdates-fixraintimer.tar.gz NotEnoughUpdates-fixraintimer.tar.bz2 NotEnoughUpdates-fixraintimer.zip | |
Merge branch 'master' into fixraintimerfixraintimer
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( |
