Skip to content

ServerUtilities ​

61 merged pull requests.

New Features ​

  • #335 Created new admin team management GUI classes (GuiAdminEditTeam, GuiAdminManageClaims, etc.) with server-side permission checks. Added new permissions for admin team management and registered UI in ServerUtilitiesRegistry. - @Lyfts
    • Added: admin team management UI, admin team-related permissions, GuiAdminEditTeam and related GUI classes
    • Closes #224
  • #334 Registered BYPASS_WHITELIST node with DefaultPermissionLevel.OP. MixinNetHandlerLoginServer returns null from the connect check when the result is the not-white-listed message and the profile has the permission. - @Lyfts
  • #333 Updated Navigator integration to use new API changes, added ClaimsPolygonOverlay for rendering, optimized claim data requests, and moved network-thread reads to server thread to prevent concurrent modification exceptions. - @Algent
    • Added: JourneyMap 6 support, dynamic border rendering for claims, ClaimsPolygonOverlay class
    • Fixed: potential concurrent modification exceptions in claim data access
  • #321 Added InvSeeRegistry, replacing the InvSeeInventories enum, and ServerUtilitiesRegistry.registerInvseeInventory(IModdedInventory). CmdInv, the invsee container and GUI, and the network message now use IModdedInventory keys. Dependency versions are bumped and the Adventure Backpack icon is now created lazily. - @Lyfts
    • Added: invsee inventory registration API, InvSeeRegistry
    • Removed: InvSeeInventories enum
    • Closes #317
  • #304 Created CmdMotd command handler and registered it in ServerUtilitiesCommands. - @sawyergt
    • Added: /motd command for displaying server message of the day
    • Closes #295
  • #299 Implemented MessageTransfer for the ServerUtilities network channel, TransferClientHandler to handle client-side disconnect and reconnection, and TransferCommand for the /transfer command with host:port parsing and permission level 2. - @alppp
    • Added: Transfer packet (1.20.5 backport) for server-to-server redirection, /transfer command for redirecting players, TransferHelper public API, Config options for enableTransferPacket and transferWhitelist
  • #298 Added ModernTabRenderer with async skin loading, TabDisplayHandler for overlay rendering, TabChannelHandler for plugin channel protocol, and TabSkinCache for persistent head texture storage. Integrated via GuiIngameForge mixin. - @alppp
    • Added: Modern tab list renderer with player heads and ping display, Tab header/footer text configuration with color code support, Async skin loading with cache, Plugin channel HP|TabHF for proxy compatibility, Config options for tab list features
  • #291 Extended CmdBackup and BackupTask to recognize the =oc flag and pass it to the backup system to filter to claimed chunks only. - @lc-1337
    • Added: =oc argument for backup command, Only-claimed-chunks backup mode
    • Closes GTNH#20391
  • #287 Added mixins for MixinCommandNode and MixinLiteralCommandNode to integrate with the permission system, and created ICommandWithPermission interface for Brigadier command permission binding. - @Lyfts
    • Added: Brigadier command permission interceptors, ICommandWithPermission interface for permission binding, CommandHandler mixin updates
    • Fixed: Brigadier commands not respecting permission system
    • Closes #306
  • #284 Added server event handlers to detect empty servers and toggle gamerules based on config, with state tracking in Universe.dat via NBTUtils to ensure idempotency. - @Algent
    • Added: Gamerule auto-flip when server is empty, Config options for enabled rules, apply/revert rules, and check interval, State persistence in Universe.dat
  • #283 Added MixinBlockFarmland to intercept farmland trample events and check claim ownership, with a new config toggle to enable this protection. - @Lyfts
    • Added: Farmland trample prevention in claimed chunks, Config option for farmland protection
    • Closes #102
  • #282 Applied @Config.LangKeyPattern annotations to ServerUtilitiesConfig and AuroraConfig classes, and expanded language files with config key translations. - @Lyfts
    • Added: Config localization for ServerUtilities and Aurora settings
  • #279 Updated CmdTplast to support cross-dimension teleportation. - @Lyfts
  • #278 Added MOTD reload handler in ServerUtilitiesCommon with config reload subscription. - @Lyfts
    • Added: MOTD reload support
    • Closes #244
  • #277 Added mob spawn blocking with three config modes (DEFAULT for team choice, TRUE for admin enforcement, FALSE for disabled); added entity type filtering via EnumCreature and ConfigList. - @Lyfts
    • Added: mob spawn blocking in claims feature, EnumCreature entity type enum, team-specific spawn control configuration
    • Closes #96
  • #273 Added EnumMessageLocation.TITLE with fallback detection via Class.forName for GTNHLib's TitleAPI; updated NotificationHandler and ShutdownTask to use titles for critical messages. - @alppp
    • Added: TITLE notification location option, TitleAPI integration
  • #268 Added WitcheryCompat class with special handling in MixinWorldServer_SleepPercentage to detect and exclude vampire sleep events from Morpheus sleep percentage logic. - @hinyb
    • Added: Witchery vampire sleep compatibility, WitcheryCompat module
    • Fixed: Morpheus vampire sleep conflict
    • Closes GTNH#22953
  • #257 Extended CmdDumpChunkloaders with region listing functionality, added dimension-specific region analysis output. - @LeonidMem
    • Added: region listing feature for /dump_chunkloaders, dimension argument support, Russian translation for regions output
  • #253 Added GuiToggleCheatsButton GUI component with mixin accessor for SaveFormatComparator to modify world NBT data directly. - @SuperSoupr
    • Added: in-game cheats toggle button in world selection, CheatsSetter interface for NBT manipulation
  • #242 Added MOTDFormatter utility class, ServerUtilitiesConfig settings, and MixinMinecraftServer_CustomMotd mixin to intercept and format server MOTD. - @alppp
    • Added: MOTD configuration options, MOTDFormatter utility, custom MOTD mixin
  • #234 Adds Backups.backup_entire_regions_with_claims to ServerUtilitiesConfig. When set, ThreadBackup.backupRegions compresses each region .mca file that has claims as-is instead of building a temp RegionFile with only the claimed chunks. - @jordanamr
    • Added: backup_entire_regions_with_claims config option

New Content ​

  • #266 Replaced GUI widget texture atlas and updated Theme.java color/appearance definitions. - @Ranzuu
    • Added: improved GUI textures
    • Fixed: GUI visual appearance and consistency

Changes ​

  • #315 Updated GuiInvseeContainer and related inventory classes to use proper button textures, separated inventory/container slot textures in Theme, fixed background rendering, adjusted Galacticraft slot positioning by 1px, and added localization keys for inventory titles. - @Ranzuu
    • Added: localization keys for inventory titles, container-specific slot texture support
    • Removed: hardcoded button texture rendering
    • Fixed: dark background in Inventory View GUI, Galacticraft slot misalignment

Bug Fixes ​

  • #343 Reworked the BackupTask save lifecycle and stopBackupThread ordering on server stop, and added a Mixin (BACKUP_SHUTDOWN) on MinecraftServer. Added ArchiveExtraction with path validation, checked moves and rollback in GuiRestoreBackup, and checked/atomic NBT writes via NBTUtils.writeNBTChecked and a ForgeTeamSavedEvent failure flag. Added JUnit and Mockito test dependencies with regression tests, and Hodgepodge detection in OtherMods. - @Algent
    • Added: regression tests for backups
    • Fixed: world saving staying disabled after backup failures, player data and chunks out of sync in async backups, unsafe backup restore paths, failed restores not rolling back
  • #342 DefaultPermissionHandler.hasPermission now checks profile.isComplete() before calling func_152596_g, so incomplete GameProfiles fall through to false. - @Niki4tap
    • Fixed: exception spam from permission checks on incomplete fake player profiles in claimed chunks
  • #341 BackupTask now calls postBackup at the start of execute if dimSaveStates is non-empty. postBackup returns early when there is nothing to restore and clears dimSaveStates after restoring the per-dimension save state. - @hensmth
    • Fixed: world saving staying disabled after pausing in singleplayer during backups, world progress loss when backups ran with saving off
  • #339 Updated ModernTabRenderer to sample the bound texture size dynamically instead of hardcoding 64×32, and modified TabSkinCache to use the player's in-world skin when available instead of always downloading. - @alppp
    • Fixed: modern tab heads displaying as black squares with 64x64 skins
  • #338 BackupTask gains isBackupRunning (thread alive check) and stopBackupThread, called from server about-to-start and stopping handlers and from CmdBackup. ThreadBackup drops isDone, checks the interrupt flag per file and throws InterruptedIOException to delete the partial archive. - @Algent
    • Removed: ThreadBackup isDone flag
    • Fixed: backups silently stopping after a long session
    • Closes GTNH#26529
  • #337 Mixins.java adds addExcludedMod(TargetedMod.ULTRAMINE) to the PAUSE_WHEN_EMPTY mixin entry, since the Shadow fields do not exist in Ultramine's merged DedicatedServer. - @SKProCH
    • Fixed: crash from the PAUSE_WHEN_EMPTY mixin on Ultramine
  • #330 MixinNetHandlerLoginServer only returns null when the disconnect reason equals the vanilla "The server is full!" string and the player has BYPASS_PLAYER_LIMIT. - @Lyfts
    • Fixed: bypass_player_limit letting banned and non-whitelisted players join
    • Closes #329
  • #327 Re-added ±0.5 offset to x and z coordinates in CmdBack and lowered y offset from 0.5 to 0.3 to spawn above graves without hitting the block above. - @Lyfts
    • Fixed: players getting stuck in walls with /back command
    • Closes #323
  • #325 Changed spawn event handler from EntityJoinWorldEvent to LivingSpawnEvent.CheckSpawn, which filters out natural spawns and spawner-based mobs but not bred animals. - @Lyfts
    • Fixed: animal breeding in claims with mob spawning disabled
    • Closes GTNH#25765
  • #322 Adjusted teleport offset calculation in CmdBack to avoid collision with blocks, and removed duplicate player event handling logic. - @Lyfts
    • Removed: duplicate event handler code
    • Fixed: players spawning inside graves when using /back
    • Closes #320
  • #313 GuiBase.closeGui calls displayGuiScreen(getPrevScreen()) directly when openPrevScreen is true and skips closeScreen. The Mouse.setCursorPosition restore is removed, since it used a mismatched LWJGL2 Y origin. - @Eldrinn-Elantey
    • Fixed: cursor jumping to a mirrored position when closing the rank editor GUI
  • #309 CmdRTP and TeleportTask set world.findingSpawnPoint during RTP and restore it afterwards. TeleporterDimPos.placeEntity drops its World parameter and calls updateEntityWithOptionalForce on the entity. The teleport log now uses parameterised formatting. - @Lyfts
    • Fixed: /rtp failing to find a position, players stuck in the void after teleporting into unloaded chunks
    • Closes GTNH#25025
  • #308 ServerUtilitiesCore now removes com.mojang.brigadier from LaunchClassLoader.transformerExceptions as well as com.mojang. from classLoaderExceptions, in a new removeBrigadierExceptions method. Dependency versions bumped. - @Lyfts
    • Fixed: Brigadier mixins never loading
  • #305 BackupTask.execute calls saveAllPlayerData before saveAllChunks, then waits on ThreadedFileIOBase.threadedIOInstance.waitForFinish() before starting the archive thread. - @Caedis
    • Fixed: backups containing stale player data and unflushed world writes
    • Closes GTNH#25008
  • #303 MessageViewCrash now resolves the file against the crash-reports folder and checks that its canonical parent equals the canonical folder. The EnderIO compileOnly dependency is also changed to 2.10.27. - @Caedis
    • Fixed: crash report viewer could read files outside crash-reports
  • #301 TransferCommand.getRequiredPermissionLevel lowered from 3 to 2. When no port argument is given, processCommand splits a trailing :port off the hostname and validates it in 1-65535. - @alppp
    • Added: host:port parsing in /transfer
    • Fixed: /transfer not usable from command blocks, host:port producing a doubled port
    • Closes #300
  • #294 Appended U to FORMATTING_CODE_PATTERN in StringUtils. - @alppp
    • Fixed: u (drop shadow) format code not stripped from text
  • #292 GuiSidebar.drawButton now adds the buttons before calling setButtonLocations, so locations are computed on a populated list. Removed the unused lastDrawnArea field. Also bumps GTNHLib, NEI, Navigator, Galacticraft, Tinkers Construct and other dev dependencies. - @Lyfts
    • Removed: unused lastDrawnArea field
    • Fixed: sidebar buttons not rendering for 1 tick when changing inventory tabs
    • Closes GTNH#24572
  • #290 ClaimsLayerManager splits visible locations into lists of MAX_CHUNKS_TO_VALIDATE (2000) and sends one MessageNavigatorValidateKnown per list. The navigator messages switched from LongSet to LongList. - @Lyfts
    • Fixed: IllegalArgumentException and kick from oversized claim validation packet
    • Closes GTNH#24193
  • #289 In ServerUtilitiesWorldEventHandler.isEntityAllowed, the chunk team lookup moved to the top with an early return when null. The mobTypesToBlock loop lowercases the name and returns false on a match instead of returning on the first valid type. - @Lyfts
    • Fixed: blockMobSpawningInClaims not working when TRUE, Only the first mob type in the block list being checked
  • #286 BackupTask and ThreadBackup now skip the backup_start and backup_end sendAll calls when backups.silent_backup is true. The config comment was updated. - @Algent
    • Fixed: silent_backup having no effect
    • Closes #285
  • #281 Removed the SubscribeEvent registerRankConfigHandler from ServerUtilitiesPermissions. RankConfigAPI.getHandler() now picks ServerUtilitiesPermissionHandler.INSTANCE when ranks are enabled, otherwise DefaultRankConfigHandler. - @Lyfts
    • Fixed: Rank handler not registering on some servers, Chunkloading not working
    • Closes GTNH#24615
  • #274 Extended FORMATTING_CODE_PATTERN in StringUtils from [0-9A-FK-OR] to [0-9A-FK-ORXGQZV]. - @alppp
    • Fixed: extended format codes X, G, Q, Z, V not stripped from text
  • #272 Edits commands.pregen.start.usage_server and usage_client in en_US.lang and ru_RU.lang. - @aidenfarley
    • Fixed: Wrong /pregen usage text
  • #269 In ServerUtilitiesPlayerEventHandler.onRightClickItemLog, the coordinates passed to getPos now come from playerMP.posX/posY/posZ instead of event.x/y/z. - @StoneLegion
    • Fixed: Air right click logged as 0,0,0
    • Closes GTNH#23932
  • #265 In Universe.getPlayer(GameProfile), the merge_offline_mode_players branch now iterates over players and matches with equalsIgnoreCase on the name instead of calling getPlayer(String). - @Caedis
    • Fixed: Offline account merging failing in some team cases
  • #263 Moved the watchdog thread start out of the startServer injection into a new ServerHangWatchdog.init(), injected after FMLCommonHandler.onServerStarted. MinecraftServer run timing now uses a Redirect on getSystemTimeMillis; the max-tick-time property default changed from 0 to -1. Dependency and settings plugin versions were also bumped. - @Caedis
    • Fixed: Watchdog killing the server during FML remap at boot
    • Closes GTNH#22107
  • #262 Corrected the typo 'serverutiltiies.world.skip_night' to 'serverutilities.world.skip_night' in en_US.lang and in MixinWorldServer_SleepPercentage. ru_RU.lang was reworked. - @Eldrinn-Elantey
    • Fixed: Raw lang key shown instead of the skip night message
  • #260 InvseeContainer.detectAndSendChanges skips calling detectAndSendChanges on the other player's open container when it is also an InvseeContainer. The PR also bumps GTNHLib to 0.9.0, Minecraft-Backpack-Mod to 2.6.7-GTNH, the settings convention plugin, and gradle properties. - @Lyfts
    • Fixed: Server crash when two players view each other's inventories
    • Closes #258
  • #259 Adds an ULTRAMINE TargetedMod entry matched by the class org.ultramine.server.UltraminePlugin, and excludes it from the MAX_TICK_TIME mixin. TargetedMod gets constructor overloads for the core mod class and target class. - @SKProCH
    • Fixed: Startup crash with Ultramine from the max tick time mixin
  • #256 Updated CmdTrashCan to use localized string key instead of hardcoded message. - @Discreater
    • Fixed: GUI localization for Trash Can
  • #251 Removed or nullified persistent world reference in GuiBase/GuiHelper BLANK_GUI to allow garbage collection. - @Alexdoru
    • Fixed: world reference leak

Performance ​

  • #345 ThreadBackup now collects mutable data into one temporary file instead of copying files individually and skips redundant filesystem calls. Known stable files are read by the backup worker. Added addStreamToArchive to ICompress and both compressors. Universe retries a failed automatic save at most once per server tick. - @Algent
    • Fixed: server thread stalls during backup preparation

Internal / Refactor ​

  • #288 Added @Config.Sync to disable_teams, trash_can and chunk_claiming, removed the flag bits from MessageSyncData and the static fields in SidedUtils. SidedUtils.isButtonEnabledOnServer now reads the config directly. - @Lyfts
    • Removed: custom config sync flags in MessageSyncData
  • #280 Deleted dead FTB Lib and 1.12.2 classes (client resource reload types, GuiFactory and others), moved registry code from ServerUtilitiesCommon into the new ServerUtilitiesRegistry, switched to GTNHLib @EventBusSubscriber and @Config.LangKeyPattern, and deprecated ServerUtilitiesPreInitRegistryEvent. ServerUtilitiesPermissions.INST is removed. - @Lyfts
    • Added: ServerUtilitiesRegistry class
    • Removed: unused FTB Lib classes, GuiFactory, ServerUtilitiesResourceType, ServerUtilitiesPermissions.INST

Documentation ​

  • #261 Fixes the serverutilities.cfg name in wiki/Quick-Install.md. The ranks.txt path in the same line still has the typo serverutilties. - @echeese
    • Fixed: Misspelled config file name in Quick Install wiki
  • #252 Fixes typos in the serverutilities folder and file names in README.md. - @oddstr13
    • Fixed: Misspelled config paths in README

Chores ​

  • #348 Deleted lang keys with no counterpart in en_US.lang from de_DE, es_ES, fr_FR, ja_JP, ru_RU and zh_CN. - @sivaDog
    • Removed: 26 unused translation keys from FTB import

Contributors ​

Everyone who authored, reviewed or co-authored a change on this page, with how many of them:

@Lyfts (38), @Dream-Master (11), @Algent (10), @alppp (8), @Caedis (8), @boubou19 (5), @glektarssza (3), @Nikolay-Sitnikov (3), @Ranzuu (3), @UltraProdigy (3), @Eldrinn-Elantey (2), @Ethryan (2), @PLASMAchicken (2), @SKProCH (2), @SuperSoupr (2), @wlhlm (2), @aidenfarley (1), @Alexdoru (1), @DeathFuel (1), @Discreater (1), @echeese (1), @hensmth (1), @hinyb (1), @jordanamr (1), @koolkrafter5 (1), @lc-1337 (1), @LeonidMem (1), @MalTeeez (1), @MassAnarchyy (1), @Niki4tap (1), @oddstr13 (1), @sawyergt (1), @sivaDog (1), @StoneLegion (1), @tiffit (1), @Worive (1)