diff --git a/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderMod.java b/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderMod.java index 8413cd8..2e9b67f 100644 --- a/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderMod.java +++ b/src/main/java/net/kyrptonaught/serverutils/customMapLoader/CustomMapLoaderMod.java @@ -18,6 +18,7 @@ import net.kyrptonaught.serverutils.dimensionLoader.CustomDimHolder; import net.kyrptonaught.serverutils.dimensionLoader.DimensionLoaderMod; import net.kyrptonaught.serverutils.discordBridge.MessageSender; +import net.kyrptonaught.serverutils.playerJoinLocation.PlayerJoinLocationMod; import net.kyrptonaught.serverutils.playerlockdown.PlayerLockdownMod; import net.kyrptonaught.serverutils.switchableresourcepacks.ResourcePackConfig; import net.kyrptonaught.serverutils.switchableresourcepacks.SwitchableResourcepacksMod; @@ -81,6 +82,7 @@ public static void reloadAddonFiles(MinecraftServer server) { List players = server.getPlayerManager().getPlayerList(); for (int i = players.size() - 1; i >= 0; i--) { CMDHelper.executeAs(players.get(i), RECONFIG_FUNCTION); + PlayerJoinLocationMod.excludePlayer(players.get(i)); players.get(i).networkHandler.reconfigure(); } } @@ -92,7 +94,7 @@ public static void onEnterReconfig(ServerConfigurationNetworkHandler handler, Se handler.endConfiguration(); } - public static List getAllBattleMaps(){ + public static List getAllBattleMaps() { return BATTLE_MAPS.values().stream().sorted(Comparator.comparing((battleMapAddon -> battleMapAddon.addon_id.getPath()))).toList(); } @@ -154,7 +156,7 @@ private static void battlePrepare(LoadedBattleMapInstance instance, Collection readMCAFile(Path file) throws IOException { raf.seek(4096 + i * 4); int timestamp = raf.readInt(); - raf.seek(4096 * offset + 4); //+4: skip data size + raf.seek(4096L * offset + 4); //+4: skip data size byte compressionTypeByte = raf.readByte(); //0 - none, 1 - GZIP, 2 deflate - assuming deflate chunks.add(NbtIo.readCompound(new DataInputStream(ChunkStreamVersion.DEFLATE.wrap(new FileInputStream(raf.getFD()))))); diff --git a/src/main/java/net/kyrptonaught/serverutils/customMapLoader/voting/Votebook.java b/src/main/java/net/kyrptonaught/serverutils/customMapLoader/voting/Votebook.java index f93d57c..6245aea 100644 --- a/src/main/java/net/kyrptonaught/serverutils/customMapLoader/voting/Votebook.java +++ b/src/main/java/net/kyrptonaught/serverutils/customMapLoader/voting/Votebook.java @@ -11,7 +11,10 @@ import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; import java.util.function.BiConsumer; public class Votebook { @@ -220,10 +223,10 @@ private static void generateMapPages(List lemmods) { mapText.add(Text.empty()); MutableText backBtn = backButton("mapPack_" + config.addon_pack); - if(config.addon_pack.equals("base_base")) + if (config.addon_pack.equals("base_base")) backBtn = backButton("baseMaps"); - mapText.add(voteButton(config.addon_id).append(" ").append(backBtn.append(" ").append(withOpenCmd(bracketTrans("lem.generic.more"), "map_player_rp_settings", "index,0,"+ config.addon_id.toString())))); + mapText.add(voteButton(config.addon_id).append(" ").append(backBtn.append(" ").append(withOpenCmd(bracketTrans("lem.generic.more"), "map_player_rp_settings", "index,0," + config.addon_id.toString())))); bookLibrary.put("map_" + config.addon_id, createBasicPage().addPage(mapText.toArray(Text[]::new))); } @@ -284,7 +287,7 @@ private static void generateMapExtras(DynamicData data, BookPage bookPage) { Text requiredHeader = withHover(dashTrans("lem.mapdecider.menu.requiredpacks"), trimName(addon.getNameText(), 20)); if (addon.required_packs == null || addon.required_packs.packs.isEmpty()) { splitAcrossPages(bookPage, 1, List.of(Text.translatable("gui.none")), requiredHeader, "map_" + addon.addon_id, true, (rpOption, index, pageText) -> { - pageText.add(colored(rpOption,Formatting.DARK_GRAY)); + pageText.add(colored(rpOption, Formatting.DARK_GRAY)); }); } else { splitAcrossPages(bookPage, 10, addon.required_packs.packs, requiredHeader, "map_" + addon.addon_id, true, (rpOption, index, pageText) -> { @@ -296,7 +299,7 @@ private static void generateMapExtras(DynamicData data, BookPage bookPage) { Text optionalHeader = withHover(dashTrans("lem.mapdecider.menu.optionalpacks"), trimName(addon.getNameText(), 20)); if (addon.optional_packs == null || addon.optional_packs.packs.isEmpty()) { splitAcrossPages(bookPage, 1, List.of(Text.translatable("gui.none")), optionalHeader, "map_" + addon.addon_id, false, (rpOption, index, pageText) -> { - pageText.add(colored(rpOption,Formatting.DARK_GRAY)); + pageText.add(colored(rpOption, Formatting.DARK_GRAY)); }); } else { splitAcrossPages(bookPage, 8, addon.optional_packs.packs, optionalHeader, "map_" + addon.addon_id, false, (rpOption, index, pageText) -> { diff --git a/src/main/java/net/kyrptonaught/serverutils/discordBridge/format/FormatToMC.java b/src/main/java/net/kyrptonaught/serverutils/discordBridge/format/FormatToMC.java index d14de35..fbd4909 100644 --- a/src/main/java/net/kyrptonaught/serverutils/discordBridge/format/FormatToMC.java +++ b/src/main/java/net/kyrptonaught/serverutils/discordBridge/format/FormatToMC.java @@ -17,7 +17,7 @@ public class FormatToMC { public static Text parseMessage(Message discordMessage, MutableText prefix, boolean isAdmin) { - if(isAdmin && discordMessage.getContentRaw().startsWith("$PARSE=")) + if (isAdmin && discordMessage.getContentRaw().startsWith("$PARSE=")) return parseAdminTextJson(discordMessage, prefix); HashMap replacementURLs = new HashMap<>(); diff --git a/src/main/java/net/kyrptonaught/serverutils/mixin/playerJoinLocation/PlayerManagerMixin.java b/src/main/java/net/kyrptonaught/serverutils/mixin/playerJoinLocation/PlayerManagerMixin.java index 7057e23..8d85158 100644 --- a/src/main/java/net/kyrptonaught/serverutils/mixin/playerJoinLocation/PlayerManagerMixin.java +++ b/src/main/java/net/kyrptonaught/serverutils/mixin/playerJoinLocation/PlayerManagerMixin.java @@ -20,7 +20,8 @@ public class PlayerManagerMixin { @Redirect(method = "onPlayerConnect", at = @At(target = "Lnet/minecraft/world/dimension/DimensionType;worldFromDimensionNbt(Lcom/mojang/serialization/Dynamic;)Lcom/mojang/serialization/DataResult;", value = "INVOKE")) public DataResult> forceSpawnLocation(Dynamic nbt, ClientConnection connection, ServerPlayerEntity player) { - if (PlayerJoinLocationMod.ENABLED) { + if (PlayerJoinLocationMod.ENABLED && !PlayerJoinLocationMod.isExcludedPlayer(player)) { + PlayerJoinLocationMod.removePlayer(player); PlayerJoinLocationConfig config = ServerUtilsMod.playerJoinLocationMod.getConfig(); player.setPos(config.posX, config.posY, config.posZ); return DataResult.success(World.OVERWORLD); diff --git a/src/main/java/net/kyrptonaught/serverutils/playerJoinLocation/PlayerJoinLocationMod.java b/src/main/java/net/kyrptonaught/serverutils/playerJoinLocation/PlayerJoinLocationMod.java index 48f3334..e2d7aff 100644 --- a/src/main/java/net/kyrptonaught/serverutils/playerJoinLocation/PlayerJoinLocationMod.java +++ b/src/main/java/net/kyrptonaught/serverutils/playerJoinLocation/PlayerJoinLocationMod.java @@ -5,10 +5,16 @@ import net.kyrptonaught.serverutils.ModuleWConfig; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; + +import java.util.HashSet; +import java.util.UUID; public class PlayerJoinLocationMod extends ModuleWConfig { public static boolean ENABLED = false; + private static final HashSet EXCLUDED_PLAYERS = new HashSet<>(); + @Override public void registerCommands(CommandDispatcher dispatcher) { dispatcher.register(CommandManager.literal("playerJoinLocation") @@ -20,6 +26,18 @@ public void registerCommands(CommandDispatcher dispatcher) })))); } + public static void excludePlayer(ServerPlayerEntity player) { + EXCLUDED_PLAYERS.add(player.getUuid()); + } + + public static void removePlayer(ServerPlayerEntity player) { + EXCLUDED_PLAYERS.remove(player.getUuid()); + } + + public static boolean isExcludedPlayer(ServerPlayerEntity player) { + return EXCLUDED_PLAYERS.contains(player.getUuid()); + } + @Override public PlayerJoinLocationConfig createDefaultConfig() { return new PlayerJoinLocationConfig(); diff --git a/src/main/java/net/kyrptonaught/serverutils/scoreboardPlayerInfo/ScoreboardPlayerInfo.java b/src/main/java/net/kyrptonaught/serverutils/scoreboardPlayerInfo/ScoreboardPlayerInfo.java index 5a89e92..341cfd7 100644 --- a/src/main/java/net/kyrptonaught/serverutils/scoreboardPlayerInfo/ScoreboardPlayerInfo.java +++ b/src/main/java/net/kyrptonaught/serverutils/scoreboardPlayerInfo/ScoreboardPlayerInfo.java @@ -107,7 +107,7 @@ public static void onPlayerConnect(ServerPlayNetworkHandler handler, PacketSende setFabricClient(handler.player, true); } - public static void onPlayerDisconnect(ServerPlayNetworkHandler handler, MinecraftServer server){ + public static void onPlayerDisconnect(ServerPlayNetworkHandler handler, MinecraftServer server) { queuedPlayerData.remove(((ServerCommonNetworkHandlerAccessor) handler).getConnection()); } diff --git a/src/main/java/net/kyrptonaught/serverutils/takeEverything/TakeEverythingHelper.java b/src/main/java/net/kyrptonaught/serverutils/takeEverything/TakeEverythingHelper.java index b4e0043..45fce31 100644 --- a/src/main/java/net/kyrptonaught/serverutils/takeEverything/TakeEverythingHelper.java +++ b/src/main/java/net/kyrptonaught/serverutils/takeEverything/TakeEverythingHelper.java @@ -1,13 +1,11 @@ package net.kyrptonaught.serverutils.takeEverything; +import net.minecraft.block.SkullBlock; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ArmorItem; -import net.minecraft.item.Equipment; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; +import net.minecraft.item.*; import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.screen.PlayerScreenHandler; @@ -65,6 +63,11 @@ public static boolean isBetter(ItemStack og, ItemStack newStack) { if (og.isOf(Items.ELYTRA)) return false; + if (newStack.getItem() instanceof VerticallyAttachableBlockItem newBlock && og.getItem() instanceof VerticallyAttachableBlockItem ogBlock) { + if (newBlock.getBlock() instanceof SkullBlock && ogBlock.getBlock() instanceof SkullBlock) + return false; + } + if (og.getItem() instanceof ArmorItem && newStack.getItem() instanceof ArmorItem) return ((ArmorItem) newStack.getItem()).getProtection() > ((ArmorItem) og.getItem()).getProtection(); diff --git a/src/main/java/net/kyrptonaught/serverutils/welcomeMessage/WelcomeModule.java b/src/main/java/net/kyrptonaught/serverutils/welcomeMessage/WelcomeModule.java index 25f3823..ef50686 100644 --- a/src/main/java/net/kyrptonaught/serverutils/welcomeMessage/WelcomeModule.java +++ b/src/main/java/net/kyrptonaught/serverutils/welcomeMessage/WelcomeModule.java @@ -21,7 +21,6 @@ public static void trySendWelcomeMessage(MinecraftServer server, ServerPlayerEnt playerMsgSent.add(player.getUuid()); } - @Override public WelcomeMessageConfig createDefaultConfig() { return new WelcomeMessageConfig();