From 4130a8b756c5e0d865494a5e6da5e2b66b27066b Mon Sep 17 00:00:00 2001 From: RedstoneWizard08 <94275204+RedstoneWizard08@users.noreply.github.com> Date: Wed, 11 Jun 2025 13:11:36 -0700 Subject: [PATCH 1/4] Multiloader!! --- build.gradle | 135 -- build.gradle.kts | 7 + buildSrc/build.gradle.kts | 7 + .../main/kotlin/multiloader-common.gradle.kts | 115 ++ .../main/kotlin/multiloader-loader.gradle.kts | 46 + common/build.gradle.kts | 52 + .../main/java/me/alexdevs/solstice/Paths.java | 9 + .../java/me/alexdevs/solstice/Solstice.java | 72 +- .../me/alexdevs/solstice/api/PlayerMail.java | 0 .../me/alexdevs/solstice/api/Raycast.java | 0 .../alexdevs/solstice/api/ServerLocation.java | 0 .../alexdevs/solstice/api/color/Gradient.java | 0 .../alexdevs/solstice/api/color/RGBColor.java | 0 .../alexdevs/solstice/api/command/Flags.java | 0 .../api/command/LocalGameProfile.java | 0 .../solstice/api/command/TimeSpan.java | 0 .../api/command/flags/ArgumentFlag.java | 0 .../api/command/flags/DoubleFlag.java | 0 .../solstice/api/command/flags/Flag.java | 0 .../solstice/api/command/flags/FloatFlag.java | 0 .../api/command/flags/StringFlag.java | 0 .../solstice/api/data/GsonDataManager.java | 0 .../solstice/api/data/HoconDataManager.java | 0 .../api/data/serializers/DateSerializer.java | 0 .../solstice/api/events/CommandEvents.java | 21 +- .../api/events/PlayerActivityEvents.java | 4 +- .../api/events/PlayerConnectionEvents.java | 4 +- .../api/events/PlayerTeleportCallback.java | 4 +- .../solstice/api/events/RestartEvents.java | 4 +- .../solstice/api/events/SolsticeEvents.java | 83 ++ .../solstice/api/events/TimeBarEvents.java | 4 +- .../api/events/WorldSaveCallback.java | 12 +- .../api/events/backend/ArrayBackedEvent.java | 105 ++ .../solstice/api/events/backend/Event.java | 66 + .../api/events/backend/EventFactory.java | 128 ++ .../api/events/backend/EventFactoryImpl.java | 114 ++ .../api/events/backend/EventPhaseData.java | 28 + .../api/events/backend/NodeSorting.java | 159 +++ .../api/events/backend/SortableNode.java | 24 + .../proxy/ProxyAttackBlockCallback.java | 46 + .../proxy/ProxyAttackEntityCallback.java | 44 + .../ProxyCommandRegistrationCallback.java | 25 + .../events/proxy/ProxyEntitySleepEvents.java | 99 ++ .../proxy/ProxyPlayerBlockBreakEvents.java | 64 + .../proxy/ProxyServerLifecycleEvents.java | 59 + .../proxy/ProxyServerLivingEntityEvents.java | 30 + .../proxy/ProxyServerMessageEvents.java | 72 + .../ProxyServerPlayConnectionEvents.java | 34 + .../events/proxy/ProxyServerPlayerEvents.java | 32 + .../events/proxy/ProxyServerTickEvents.java | 33 + .../events/proxy/ProxyUseBlockCallback.java | 36 + .../events/proxy/ProxyUseEntityCallback.java | 57 + .../events/proxy/ProxyUseItemCallback.java | 37 + .../alexdevs/solstice/api/module/Debug.java | 0 .../solstice/api/module/ModCommand.java | 10 +- .../solstice/api/module/ModuleBase.java | 0 .../solstice/api/module/ModuleEntrypoint.java | 0 .../alexdevs/solstice/api/module/Utils.java | 0 .../api/permissions/BooleanFunction.java | 18 + .../OfflineOptionRequestEvent.java | 33 + .../OfflinePermissionCheckEvent.java | 33 + .../api/permissions/OptionRequestEvent.java | 30 + .../solstice/api/permissions/Options.java | 400 ++++++ .../api/permissions/PermissionCheckEvent.java | 28 + .../solstice/api/permissions/Permissions.java | 277 ++++ .../solstice/api/permissions/TriState.java | 130 ++ .../solstice/api/permissions/Util.java | 24 + .../solstice/api/platform/ModInfo.java | 4 + .../solstice/api/platform/PlatformHelper.java | 34 + .../solstice/api/text/Components.java | 2 +- .../me/alexdevs/solstice/api/text/Format.java | 0 .../solstice/api/text/RawPlaceholder.java | 0 .../solstice/api/text/parser/CodeParser.java | 0 .../solstice/api/text/parser/LinkParser.java | 0 .../text/parser/MarkdownComponentParser.java | 0 .../api/text/parser/MarkdownParser.java | 0 .../api/text/tag/PhaseGradientTag.java | 0 .../solstice/api/utils/MathUtils.java | 0 .../solstice/api/utils/PlayerUtils.java | 0 .../solstice/api/utils/RegistryUtils.java | 0 .../solstice/core/CooldownManager.java | 26 +- .../me/alexdevs/solstice/core/Modules.java | 65 +- .../me/alexdevs/solstice/core/Scheduler.java | 0 .../solstice/core/ToggleableConfig.java | 0 .../me/alexdevs/solstice/core/UserCache.java | 0 .../alexdevs/solstice/core/WarmUpManager.java | 0 .../solstice/core/coreModule/CoreModule.java | 40 +- .../core/coreModule/commands/PingCommand.java | 0 .../commands/ServerStatCommand.java | 0 .../coreModule/commands/SolsticeCommand.java | 139 ++ .../core/coreModule/data/CoreConfig.java | 0 .../core/coreModule/data/CoreLocale.java | 0 .../core/coreModule/data/CorePlayerData.java | 0 .../me/alexdevs/solstice/data/PlayerData.java | 0 .../solstice/data/PlayerDataManager.java | 0 .../me/alexdevs/solstice/data/ServerData.java | 0 .../integrations/ConnectorIntegration.java | 11 +- .../integrations/LuckPermsIntegration.java | 141 +- .../integrations/TrinketsApiProxy.java | 24 + .../integrations/TrinketsIntegration.java | 4 +- .../me/alexdevs/solstice/locale/Locale.java | 0 .../solstice/locale/LocaleManager.java | 1 + .../mixin/SolsticeMixinConfigPlugin.java | 2 + .../mixin/events/CommandEventsMixin.java | 0 .../mixin/events/LivingEntityMixin.java | 40 + .../mixin/events/PlayerListMixin.java | 46 + .../solstice/mixin/events/PlayerMixin.java | 18 + .../mixin/events/WorldSaveEventMixin.java | 0 .../modules/admin/ConnectionBypassMixin.java | 0 .../afk/FixPlayerSleepPercentageMixin.java | 0 .../mixin/modules/back/PreTeleportMixin.java | 0 .../modules/ban/CustomBanMessageMixin.java | 0 .../mixin/modules/core/RealPingMixin.java | 0 .../customname/CustomDisplayNameMixin.java | 0 .../BypassSleepingInBedCheckMixin.java | 0 .../mixin/modules/sign/FormatSignMixin.java | 0 .../spawn/OverrideSpawnPointMixin.java | 0 .../styling/CustomAdvancementMixin.java | 0 .../styling/CustomChatMessageMixin.java | 0 .../CustomConnectionMessagesMixin.java | 0 .../styling/CustomDeathMessageMixin.java | 0 .../styling/CustomSentMessageMixin.java | 0 .../styling/InjectCustomChatMessageMixin.java | 0 .../styling/PlayerDisconnectMixin.java | 0 .../tablist/CustomPlayerListNameMixin.java | 0 .../tablist/UpdatePlayerListMixin.java | 0 .../solstice/modules/ModuleProvider.java | 0 .../solstice/modules/admin/AdminModule.java | 2 +- .../solstice/modules/afk/AfkModule.java | 108 +- .../afk/commands/ActiveTimeCommand.java | 0 .../modules/afk/commands/AfkCommand.java | 0 .../solstice/modules/afk/data/AfkConfig.java | 0 .../solstice/modules/afk/data/AfkLocale.java | 0 .../modules/afk/data/AfkPlayerData.java | 0 .../modules/afk/data/AfkServerData.java | 0 .../modules/afk/data/LeaderboardEntry.java | 0 .../modules/afk/data/PlayerActivityState.java | 2 +- .../AutoAnnouncementModule.java | 2 +- .../data/AutoAnnouncementConfig.java | 0 .../solstice/modules/back/BackModule.java | 15 +- .../modules/back/commands/BackCommand.java | 0 .../modules/back/data/BackLocale.java | 0 .../solstice/modules/ban/BanModule.java | 0 .../modules/ban/commands/BanCommand.java | 0 .../modules/ban/commands/TempBanCommand.java | 0 .../modules/ban/commands/UnbanCommand.java | 0 .../solstice/modules/ban/data/BanLocale.java | 0 .../ban/formatters/BanMessageFormatter.java | 0 .../modules/broadcast/BroadcastModule.java | 0 .../broadcast/commands/BroadcastCommand.java | 0 .../commands/PlainBroadcastCommand.java | 0 .../broadcast/data/BroadcastConfig.java | 0 .../modules/commandSpy/CommandSpyModule.java | 3 +- .../commandSpy/data/CommandSpyConfig.java | 0 .../commandSpy/data/CommandSpyLocale.java | 0 .../modules/customName/CustomNameModule.java | 0 .../customName/commands/NicknameCommand.java | 2 +- .../customName/data/CustomNameConfig.java | 0 .../customName/data/CustomNameLocale.java | 0 .../customName/data/CustomNamePlayerData.java | 0 .../modules/enderchest/EnderChestModule.java | 0 .../commands/EnderChestCommand.java | 3 +- .../enderchest/data/EnderChestLocale.java | 0 .../experiments/ExperimentsModule.java | 0 .../experiments/commands/FlagsCommand.java | 0 .../experiments/commands/TimeSpanCommand.java | 0 .../modules/extinguish/ExtinguishModule.java | 0 .../commands/ExtinguishCommand.java | 0 .../solstice/modules/feed/FeedModule.java | 0 .../modules/feed/commands/FeedCommand.java | 0 .../solstice/modules/fly/FlyModule.java | 9 +- .../modules/fly/commands/FlyCommand.java | 0 .../solstice/modules/fly/data/FlyLocale.java | 0 .../modules/fly/data/FlyPlayerData.java | 0 .../solstice/modules/god/GodModule.java | 9 +- .../modules/god/commands/GodCommand.java | 0 .../solstice/modules/god/data/GodLocale.java | 0 .../modules/god/data/GodPlayerData.java | 0 .../solstice/modules/hat/HatModule.java | 1 + .../modules/hat/commands/HatCommand.java | 0 .../solstice/modules/hat/data/HatConfig.java | 0 .../solstice/modules/hat/data/HatLocale.java | 0 .../solstice/modules/heal/HealModule.java | 0 .../modules/heal/commands/HealCommand.java | 0 .../solstice/modules/helpOp/HelpOpModule.java | 0 .../helpOp/commands/HelpOpCommand.java | 2 +- .../modules/helpOp/data/HelpOpLocale.java | 0 .../solstice/modules/home/HomeModule.java | 0 .../home/commands/DeleteHomeCommand.java | 0 .../modules/home/commands/HomeCommand.java | 0 .../home/commands/HomeOtherCommand.java | 0 .../modules/home/commands/HomesCommand.java | 0 .../modules/home/commands/SetHomeCommand.java | 2 +- .../modules/home/data/HomeConfig.java | 0 .../modules/home/data/HomeLocale.java | 0 .../modules/home/data/HomePlayerData.java | 0 .../solstice/modules/ignite/IgniteModule.java | 0 .../ignite/commands/IgniteCommand.java | 0 .../solstice/modules/ignore/IgnoreModule.java | 3 +- .../ignore/commands/IgnoreCommand.java | 0 .../ignore/commands/IgnoreListCommand.java | 0 .../modules/ignore/data/IgnoreLocale.java | 0 .../modules/ignore/data/IgnorePlayerData.java | 0 .../solstice/modules/info/InfoModule.java | 24 +- .../modules/info/commands/InfoCommand.java | 0 .../modules/info/commands/MotdCommand.java | 0 .../modules/info/commands/RulesCommand.java | 0 .../modules/info/data/InfoConfig.java | 0 .../modules/info/data/InfoLocale.java | 0 .../modules/inventorySee/ImmutableSlot.java | 0 .../inventorySee/InventorySeeModule.java | 0 .../commands/InventorySeeCommand.java | 218 ++++ .../inventorySee/data/InventorySeeLocale.java | 0 .../solstice/modules/item/ItemModule.java | 0 .../item/commands/ItemLoreCommand.java | 0 .../item/commands/ItemNameCommand.java | 0 .../modules/item/commands/MoreCommand.java | 0 .../modules/item/commands/RepairCommand.java | 0 .../modules/item/data/ItemLocale.java | 0 .../solstice/modules/jail/JailModule.java | 51 +- .../jail/commands/CheckJailCommand.java | 0 .../modules/jail/commands/JailCommand.java | 2 +- .../modules/jail/commands/JailsCommand.java | 0 .../modules/jail/commands/UnjailCommand.java | 0 .../modules/jail/data/JailConfig.java | 0 .../modules/jail/data/JailLocale.java | 0 .../modules/jail/data/JailPlayerData.java | 0 .../modules/jail/data/JailServerData.java | 0 .../solstice/modules/kick/KickModule.java | 0 .../modules/kick/commands/KickCommand.java | 0 .../solstice/modules/kit/KitInventory.java | 0 .../solstice/modules/kit/KitModule.java | 3 +- .../alexdevs/solstice/modules/kit/Utils.java | 0 .../modules/kit/commands/KitCommand.java | 0 .../modules/kit/commands/KitsCommand.java | 0 .../solstice/modules/kit/data/Kit.java | 0 .../solstice/modules/kit/data/KitConfig.java | 0 .../solstice/modules/kit/data/KitLocale.java | 0 .../modules/kit/data/KitPlayerData.java | 0 .../modules/kit/data/KitServerData.java | 0 .../solstice/modules/mail/MailModule.java | 17 +- .../modules/mail/commands/MailCommand.java | 0 .../modules/mail/data/MailLocale.java | 0 .../modules/mail/data/MailPlayerData.java | 0 .../modules/miscellaneous/DummyExplosion.java | 0 .../miscellaneous/MiscellaneousModule.java | 22 +- .../commands/EffectsCommand.java | 0 .../commands/KittyCannonCommand.java | 0 .../miscellaneous/commands/NudgeCommand.java | 0 .../miscellaneous/commands/RocketCommand.java | 0 .../miscellaneous/commands/SleepCommand.java | 4 +- .../miscellaneous/commands/TopCommand.java | 0 .../data/MiscellaneousLocale.java | 0 .../solstice/modules/mute/MuteModule.java | 5 +- .../modules/mute/commands/MuteCommand.java | 0 .../modules/mute/commands/UnmuteCommand.java | 0 .../modules/mute/data/MuteLocale.java | 0 .../modules/mute/data/MutePlayerData.java | 0 .../solstice/modules/near/NearModule.java | 0 .../modules/near/commands/NearCommand.java | 0 .../modules/near/data/NearConfig.java | 0 .../modules/near/data/NearLocale.java | 0 .../solstice/modules/note/NoteModule.java | 21 +- .../modules/note/commands/NotesCommand.java | 2 +- .../solstice/modules/note/data/Note.java | 0 .../modules/note/data/NoteConfig.java | 0 .../modules/note/data/NoteLocale.java | 0 .../modules/note/data/NotePlayerData.java | 0 .../notifications/NotificationsModule.java | 25 +- .../commands/NotificationsCommand.java | 0 .../data/NotificationsConfig.java | 0 .../data/NotificationsLocale.java | 0 .../data/NotificationsPlayerData.java | 0 .../data/PlayerNotificationSettings.java | 0 .../placeholders/PlaceholdersModule.java | 0 .../solstice/modules/powertool/Action.java | 0 .../modules/powertool/PowerToolModule.java | 16 +- .../powertool/commands/PowerToolCommand.java | 0 .../powertool/data/PowerToolLocale.java | 0 .../powertool/data/PowerToolPlayerData.java | 0 .../modules/restart/RestartModule.java | 0 .../restart/commands/RestartCommand.java | 0 .../modules/restart/data/RestartConfig.java | 0 .../modules/restart/data/RestartLocale.java | 0 .../solstice/modules/rtp/RTPModule.java | 5 +- .../modules/rtp/commands/RTPCommand.java | 2 +- .../solstice/modules/rtp/core/Locator.java | 0 .../solstice/modules/rtp/data/RTPConfig.java | 0 .../solstice/modules/rtp/data/RTPLocale.java | 0 .../solstice/modules/seen/SeenModule.java | 0 .../modules/seen/commands/SeenCommand.java | 2 +- .../modules/seen/data/SeenLocale.java | 0 .../solstice/modules/sign/SignModule.java | 3 +- .../solstice/modules/skull/SkullModule.java | 2 - .../modules/skull/commands/SkullCommand.java | 0 .../solstice/modules/smite/SmiteModule.java | 0 .../modules/smite/commands/SmiteCommand.java | 0 .../solstice/modules/spawn/SpawnModule.java | 29 +- .../spawn/commands/FirstSpawnCommand.java | 0 .../spawn/commands/SetFirstSpawnCommand.java | 0 .../spawn/commands/SetSpawnCommand.java | 0 .../modules/spawn/commands/SpawnCommand.java | 2 +- .../modules/spawn/data/SpawnConfig.java | 0 .../modules/spawn/data/SpawnLocale.java | 0 .../modules/spawn/data/SpawnServerData.java | 0 .../modules/staffChat/StaffChatModule.java | 19 +- .../staffChat/commands/StaffChatCommand.java | 0 .../staffChat/data/StaffChatLocale.java | 0 .../modules/styling/CustomSentMessage.java | 0 .../modules/styling/StylingModule.java | 0 .../modules/styling/data/StylingConfig.java | 0 .../formatters/AdvancementFormatter.java | 0 .../styling/formatters/ChatFormatter.java | 0 .../ConnectionActivityFormatter.java | 0 .../styling/formatters/DeathFormatter.java | 0 .../styling/formatters/EmoteFormatter.java | 0 .../solstice/modules/sudo/SudoModule.java | 0 .../modules/sudo/commands/DoAsCommand.java | 0 .../modules/sudo/commands/SudoCommand.java | 2 +- .../modules/suicide/SuicideModule.java | 0 .../suicide/commands/SuicideCommand.java | 0 .../modules/tablist/TabListModule.java | 13 +- .../modules/tablist/data/TabListConfig.java | 0 .../teleportHere/TeleportHereModule.java | 0 .../commands/TeleportHereCommand.java | 0 .../TeleportOfflineModule.java | 0 .../commands/TeleportOfflineCommand.java | 0 .../TeleportPositionModule.java | 0 .../commands/TeleportPositionCommand.java | 0 .../TeleportRequestModule.java | 65 +- .../commands/TeleportAcceptCommand.java | 0 .../commands/TeleportAskCommand.java | 0 .../commands/TeleportAskHereCommand.java | 0 .../commands/TeleportDenyCommand.java | 0 .../modules/teleportRequest/data/Request.java | 0 .../teleportRequest/data/TeleportConfig.java | 0 .../teleportRequest/data/TeleportLocale.java | 0 .../solstice/modules/tell/TellModule.java | 3 +- .../modules/tell/commands/ReplyCommand.java | 0 .../modules/tell/commands/TellCommand.java | 0 .../modules/tell/data/TellLocale.java | 0 .../solstice/modules/timeBar/TimeBar.java | 0 .../modules/timeBar/TimeBarModule.java | 0 .../timeBar/commands/TimeBarCommand.java | 0 .../solstice/modules/trash/TrashModule.java | 0 .../modules/trash/commands/TrashCommand.java | 0 .../modules/trash/data/TrashLocale.java | 0 .../modules/utilities/UtilitiesModule.java | 0 .../utilities/commands/AnvilCommand.java | 0 .../commands/CartographyCommand.java | 0 .../utilities/commands/GrindstoneCommand.java | 0 .../utilities/commands/LoomCommand.java | 0 .../utilities/commands/SmithingCommand.java | 0 .../commands/StonecutterCommand.java | 0 .../utilities/commands/WorkbenchCommand.java | 0 .../VirtualAnvilScreenHandler.java | 0 .../VirtualCartographyTableScreenHandler.java | 0 .../VirtualCraftingScreenHandler.java | 0 .../VirtualGrindstoneScreenHandler.java | 0 .../VirtualLoomScreenHandler.java | 0 .../VirtualSmithingScreenHandler.java | 0 .../VirtualStonecutterScreenHandler.java | 0 .../solstice/modules/warp/WarpModule.java | 2 +- .../warp/commands/DeleteWarpCommand.java | 0 .../modules/warp/commands/SetWarpCommand.java | 0 .../modules/warp/commands/WarpCommand.java | 0 .../modules/warp/commands/WarpsCommand.java | 0 .../modules/warp/data/WarpLocale.java | 0 .../modules/warp/data/WarpServerData.java | 0 .../resources/META-INF/accesstransformer.cfg | 2 + ...xdevs.solstice.api.module.ModuleEntrypoint | 1 + .../assets/solstice/info/formatting.txt | 0 .../resources/assets/solstice/info/motd.txt | 0 .../resources/assets/solstice/info/rules.txt | 0 .../main/resources/solstice.accesswidener | 2 +- .../src}/main/resources/solstice.mixins.json | 3 + fabric/build.gradle.kts | 62 + .../config/cardinal-components-api.properties | 9 + .../runs/server/config/solstice/config.conf | 319 +++++ .../config/solstice/info/formatting.txt | 24 + .../runs/server/config/solstice/info/motd.txt | 6 + .../server/config/solstice/info/rules.txt | 3 + .../runs/server/config/solstice/locale.json | 365 ++++++ .../runs/server/config/solstice/modules.conf | 55 + fabric/runs/server/eula.txt | 3 + fabric/runs/server/logs/2025-06-10-1.log.gz | Bin 0 -> 3145 bytes fabric/runs/server/logs/2025-06-10-2.log.gz | Bin 0 -> 2614 bytes fabric/runs/server/logs/debug-1.log.gz | Bin 0 -> 18232 bytes fabric/runs/server/logs/debug-2.log.gz | Bin 0 -> 17950 bytes fabric/runs/server/logs/debug.log | 1154 +++++++++++++++++ fabric/runs/server/logs/latest.log | 81 ++ fabric/runs/server/server.properties | 63 + .../solstice/fabric/FabricPlatform.java | 84 ++ .../solstice/fabric/FabricTrinketsApi.java | 26 + .../solstice/fabric/SolsticeFabric.java | 16 + .../src}/main/resources/fabric.mod.json | 19 +- gradle.properties | 56 +- neoforge/build.gradle.kts | 77 ++ .../solstice/neoforge/EmptyTrinketsApi.java | 15 + .../solstice/neoforge/NeoForgePlatform.java | 240 ++++ .../solstice/neoforge/SolsticeNeoForge.java | 18 + .../neoforge/mixin/ServerPlayerMixin.java | 31 + .../resources/META-INF/neoforge.mods.toml | 31 + .../resources/solstice-neoforge.mixins.json | 14 + settings.gradle | 10 - settings.gradle.kts | 17 + src/main/java/me/alexdevs/solstice/Paths.java | 9 - .../solstice/api/events/SolsticeEvents.java | 73 -- .../coreModule/commands/SolsticeCommand.java | 138 -- .../commands/InventorySeeCommand.java | 215 --- .../resources/META-INF/neoforge.mods.toml | 34 - 411 files changed, 6372 insertions(+), 1076 deletions(-) delete mode 100644 build.gradle create mode 100644 build.gradle.kts create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/src/main/kotlin/multiloader-common.gradle.kts create mode 100644 buildSrc/src/main/kotlin/multiloader-loader.gradle.kts create mode 100644 common/build.gradle.kts create mode 100644 common/src/main/java/me/alexdevs/solstice/Paths.java rename {src => common/src}/main/java/me/alexdevs/solstice/Solstice.java (73%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/PlayerMail.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/Raycast.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/ServerLocation.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/color/Gradient.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/color/RGBColor.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/command/Flags.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/command/LocalGameProfile.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/command/TimeSpan.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/command/flags/ArgumentFlag.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/command/flags/DoubleFlag.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/command/flags/Flag.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/command/flags/FloatFlag.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/command/flags/StringFlag.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/data/GsonDataManager.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/data/HoconDataManager.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/data/serializers/DateSerializer.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/events/CommandEvents.java (64%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/events/PlayerActivityEvents.java (88%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/events/PlayerConnectionEvents.java (90%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/events/PlayerTeleportCallback.java (84%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/events/RestartEvents.java (89%) create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/SolsticeEvents.java rename {src => common/src}/main/java/me/alexdevs/solstice/api/events/TimeBarEvents.java (93%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/events/WorldSaveCallback.java (65%) create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/backend/ArrayBackedEvent.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/backend/Event.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/backend/EventFactory.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/backend/EventFactoryImpl.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/backend/EventPhaseData.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/backend/NodeSorting.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/backend/SortableNode.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyAttackBlockCallback.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyAttackEntityCallback.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyCommandRegistrationCallback.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyEntitySleepEvents.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyPlayerBlockBreakEvents.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerLifecycleEvents.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerLivingEntityEvents.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerMessageEvents.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerPlayConnectionEvents.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerPlayerEvents.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerTickEvents.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseBlockCallback.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseEntityCallback.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseItemCallback.java rename {src => common/src}/main/java/me/alexdevs/solstice/api/module/Debug.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/module/ModCommand.java (93%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/module/ModuleBase.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/module/ModuleEntrypoint.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/module/Utils.java (100%) create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/BooleanFunction.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/OfflineOptionRequestEvent.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/OfflinePermissionCheckEvent.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/OptionRequestEvent.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/Options.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/PermissionCheckEvent.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/Permissions.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/TriState.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/permissions/Util.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/platform/ModInfo.java create mode 100644 common/src/main/java/me/alexdevs/solstice/api/platform/PlatformHelper.java rename {src => common/src}/main/java/me/alexdevs/solstice/api/text/Components.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/text/Format.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/text/RawPlaceholder.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/text/parser/CodeParser.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/text/parser/LinkParser.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/text/parser/MarkdownComponentParser.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/text/parser/MarkdownParser.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/utils/MathUtils.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/utils/PlayerUtils.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/api/utils/RegistryUtils.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/CooldownManager.java (80%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/Modules.java (51%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/Scheduler.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/ToggleableConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/UserCache.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/WarmUpManager.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java (74%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/coreModule/commands/PingCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java (100%) create mode 100644 common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/SolsticeCommand.java rename {src => common/src}/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/coreModule/data/CoreLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/core/coreModule/data/CorePlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/data/PlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/data/PlayerDataManager.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/data/ServerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/integrations/ConnectorIntegration.java (53%) rename {src => common/src}/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java (63%) create mode 100644 common/src/main/java/me/alexdevs/solstice/integrations/TrinketsApiProxy.java rename {src => common/src}/main/java/me/alexdevs/solstice/integrations/TrinketsIntegration.java (52%) rename {src => common/src}/main/java/me/alexdevs/solstice/locale/Locale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/locale/LocaleManager.java (99%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/SolsticeMixinConfigPlugin.java (99%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/events/CommandEventsMixin.java (100%) create mode 100644 common/src/main/java/me/alexdevs/solstice/mixin/events/LivingEntityMixin.java create mode 100644 common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerListMixin.java create mode 100644 common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerMixin.java rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/events/WorldSaveEventMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/admin/ConnectionBypassMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/afk/FixPlayerSleepPercentageMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/back/PreTeleportMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/ban/CustomBanMessageMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/miscellaneous/BypassSleepingInBedCheckMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/sign/FormatSignMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/spawn/OverrideSpawnPointMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomAdvancementMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomChatMessageMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomConnectionMessagesMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomDeathMessageMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomSentMessageMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/styling/InjectCustomChatMessageMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/styling/PlayerDisconnectMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/tablist/CustomPlayerListNameMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/mixin/modules/tablist/UpdatePlayerListMixin.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ModuleProvider.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/admin/AdminModule.java (96%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/AfkModule.java (78%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/commands/ActiveTimeCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/commands/AfkCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/data/AfkConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/data/AfkLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/data/AfkPlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/data/AfkServerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/data/LeaderboardEntry.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/afk/data/PlayerActivityState.java (93%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/autoAnnouncement/AutoAnnouncementModule.java (97%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/autoAnnouncement/data/AutoAnnouncementConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/back/BackModule.java (73%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/back/commands/BackCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/back/data/BackLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ban/BanModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ban/commands/BanCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ban/commands/TempBanCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ban/commands/UnbanCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ban/data/BanLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ban/formatters/BanMessageFormatter.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/broadcast/BroadcastModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/broadcast/commands/BroadcastCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/broadcast/commands/PlainBroadcastCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/broadcast/data/BroadcastConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/commandSpy/CommandSpyModule.java (97%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/customName/CustomNameModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/customName/commands/NicknameCommand.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/customName/data/CustomNamePlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/enderchest/EnderChestModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/enderchest/commands/EnderChestCommand.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/enderchest/data/EnderChestLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/experiments/ExperimentsModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/experiments/commands/FlagsCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/experiments/commands/TimeSpanCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/extinguish/ExtinguishModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/extinguish/commands/ExtinguishCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/feed/FeedModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/feed/commands/FeedCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/fly/FlyModule.java (80%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/fly/commands/FlyCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/fly/data/FlyLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/fly/data/FlyPlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/god/GodModule.java (79%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/god/commands/GodCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/god/data/GodLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/god/data/GodPlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/hat/HatModule.java (99%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/hat/commands/HatCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/hat/data/HatConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/hat/data/HatLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/heal/HealModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/heal/commands/HealCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/helpOp/HelpOpModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/helpOp/commands/HelpOpCommand.java (97%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/helpOp/data/HelpOpLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/HomeModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/commands/DeleteHomeCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/commands/HomeCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/commands/HomeOtherCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/commands/HomesCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/commands/SetHomeCommand.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/data/HomeConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/data/HomeLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/home/data/HomePlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ignite/IgniteModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ignite/commands/IgniteCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ignore/IgnoreModule.java (96%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreListCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ignore/data/IgnoreLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/ignore/data/IgnorePlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/info/InfoModule.java (86%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/info/commands/InfoCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/info/commands/MotdCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/info/commands/RulesCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/info/data/InfoConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/info/data/InfoLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/inventorySee/ImmutableSlot.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/inventorySee/InventorySeeModule.java (100%) create mode 100644 common/src/main/java/me/alexdevs/solstice/modules/inventorySee/commands/InventorySeeCommand.java rename {src => common/src}/main/java/me/alexdevs/solstice/modules/inventorySee/data/InventorySeeLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/item/ItemModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/item/commands/ItemLoreCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/item/commands/ItemNameCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/item/commands/MoreCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/item/commands/RepairCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/item/data/ItemLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/JailModule.java (79%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/commands/CheckJailCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/commands/JailCommand.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/commands/JailsCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/commands/UnjailCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/data/JailConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/data/JailLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/data/JailPlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/jail/data/JailServerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kick/KickModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kick/commands/KickCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/KitInventory.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/KitModule.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/Utils.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/commands/KitCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/commands/KitsCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/data/Kit.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/data/KitConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/data/KitLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/data/KitPlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/kit/data/KitServerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mail/MailModule.java (81%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mail/commands/MailCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mail/data/MailLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mail/data/MailPlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/DummyExplosion.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/MiscellaneousModule.java (68%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/EffectsCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/KittyCannonCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/NudgeCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/RocketCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/SleepCommand.java (97%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/TopCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/miscellaneous/data/MiscellaneousLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mute/MuteModule.java (88%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mute/commands/MuteCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mute/commands/UnmuteCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mute/data/MuteLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/mute/data/MutePlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/near/NearModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/near/commands/NearCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/near/data/NearConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/near/data/NearLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/note/NoteModule.java (79%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/note/commands/NotesCommand.java (99%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/note/data/Note.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/note/data/NoteConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/note/data/NoteLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/note/data/NotePlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/notifications/NotificationsModule.java (86%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/notifications/commands/NotificationsCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsPlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/notifications/data/PlayerNotificationSettings.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/placeholders/PlaceholdersModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/powertool/Action.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/powertool/PowerToolModule.java (89%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/powertool/commands/PowerToolCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolPlayerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/restart/commands/RestartCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/restart/data/RestartConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/restart/data/RestartLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/rtp/RTPModule.java (90%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/rtp/commands/RTPCommand.java (99%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/rtp/core/Locator.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/rtp/data/RTPConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/rtp/data/RTPLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/seen/SeenModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/seen/commands/SeenCommand.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/seen/data/SeenLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/sign/SignModule.java (94%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/skull/SkullModule.java (94%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/skull/commands/SkullCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/smite/SmiteModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/smite/commands/SmiteCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/spawn/SpawnModule.java (83%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/spawn/commands/FirstSpawnCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/spawn/commands/SetFirstSpawnCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/spawn/commands/SetSpawnCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/spawn/commands/SpawnCommand.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnServerData.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/staffChat/StaffChatModule.java (82%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/staffChat/commands/StaffChatCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/staffChat/data/StaffChatLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/styling/CustomSentMessage.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/styling/StylingModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/styling/data/StylingConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/styling/formatters/AdvancementFormatter.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/styling/formatters/ChatFormatter.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/styling/formatters/ConnectionActivityFormatter.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/styling/formatters/DeathFormatter.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/styling/formatters/EmoteFormatter.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/sudo/SudoModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/sudo/commands/DoAsCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/sudo/commands/SudoCommand.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/suicide/SuicideModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/suicide/commands/SuicideCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/tablist/TabListModule.java (89%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/tablist/data/TabListConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportHere/TeleportHereModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportHere/commands/TeleportHereCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportOffline/TeleportOfflineModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportOffline/commands/TeleportOfflineCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportPosition/TeleportPositionModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportPosition/commands/TeleportPositionCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportRequest/TeleportRequestModule.java (77%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAcceptCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskHereCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportDenyCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportRequest/data/Request.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportConfig.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/tell/TellModule.java (98%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/tell/commands/ReplyCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/tell/commands/TellCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/tell/data/TellLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/timeBar/TimeBar.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/timeBar/TimeBarModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/timeBar/commands/TimeBarCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/trash/TrashModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/trash/commands/TrashCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/trash/data/TrashLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/UtilitiesModule.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/commands/AnvilCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/commands/CartographyCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/commands/GrindstoneCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/commands/LoomCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/commands/SmithingCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/commands/StonecutterCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/commands/WorkbenchCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualAnvilScreenHandler.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCartographyTableScreenHandler.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCraftingScreenHandler.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualGrindstoneScreenHandler.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualLoomScreenHandler.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualSmithingScreenHandler.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualStonecutterScreenHandler.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/warp/WarpModule.java (95%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/warp/commands/DeleteWarpCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/warp/commands/SetWarpCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/warp/commands/WarpCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/warp/commands/WarpsCommand.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/warp/data/WarpLocale.java (100%) rename {src => common/src}/main/java/me/alexdevs/solstice/modules/warp/data/WarpServerData.java (100%) create mode 100644 common/src/main/resources/META-INF/accesstransformer.cfg create mode 100644 common/src/main/resources/META-INF/services/me.alexdevs.solstice.api.module.ModuleEntrypoint rename {src => common/src}/main/resources/assets/solstice/info/formatting.txt (100%) rename {src => common/src}/main/resources/assets/solstice/info/motd.txt (100%) rename {src => common/src}/main/resources/assets/solstice/info/rules.txt (100%) rename {src => common/src}/main/resources/solstice.accesswidener (79%) rename {src => common/src}/main/resources/solstice.mixins.json (93%) create mode 100644 fabric/build.gradle.kts create mode 100644 fabric/runs/server/config/cardinal-components-api.properties create mode 100644 fabric/runs/server/config/solstice/config.conf create mode 100644 fabric/runs/server/config/solstice/info/formatting.txt create mode 100644 fabric/runs/server/config/solstice/info/motd.txt create mode 100644 fabric/runs/server/config/solstice/info/rules.txt create mode 100644 fabric/runs/server/config/solstice/locale.json create mode 100644 fabric/runs/server/config/solstice/modules.conf create mode 100644 fabric/runs/server/eula.txt create mode 100644 fabric/runs/server/logs/2025-06-10-1.log.gz create mode 100644 fabric/runs/server/logs/2025-06-10-2.log.gz create mode 100644 fabric/runs/server/logs/debug-1.log.gz create mode 100644 fabric/runs/server/logs/debug-2.log.gz create mode 100644 fabric/runs/server/logs/debug.log create mode 100644 fabric/runs/server/logs/latest.log create mode 100644 fabric/runs/server/server.properties create mode 100644 fabric/src/main/java/me/alexdevs/solstice/fabric/FabricPlatform.java create mode 100644 fabric/src/main/java/me/alexdevs/solstice/fabric/FabricTrinketsApi.java create mode 100644 fabric/src/main/java/me/alexdevs/solstice/fabric/SolsticeFabric.java rename {src => fabric/src}/main/resources/fabric.mod.json (68%) create mode 100644 neoforge/build.gradle.kts create mode 100644 neoforge/src/main/java/me/alexdevs/solstice/neoforge/EmptyTrinketsApi.java create mode 100644 neoforge/src/main/java/me/alexdevs/solstice/neoforge/NeoForgePlatform.java create mode 100644 neoforge/src/main/java/me/alexdevs/solstice/neoforge/SolsticeNeoForge.java create mode 100644 neoforge/src/main/java/me/alexdevs/solstice/neoforge/mixin/ServerPlayerMixin.java create mode 100644 neoforge/src/main/resources/META-INF/neoforge.mods.toml create mode 100644 neoforge/src/main/resources/solstice-neoforge.mixins.json delete mode 100644 settings.gradle create mode 100644 settings.gradle.kts delete mode 100644 src/main/java/me/alexdevs/solstice/Paths.java delete mode 100644 src/main/java/me/alexdevs/solstice/api/events/SolsticeEvents.java delete mode 100644 src/main/java/me/alexdevs/solstice/core/coreModule/commands/SolsticeCommand.java delete mode 100644 src/main/java/me/alexdevs/solstice/modules/inventorySee/commands/InventorySeeCommand.java delete mode 100644 src/main/resources/META-INF/neoforge.mods.toml diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 00056ddf..00000000 --- a/build.gradle +++ /dev/null @@ -1,135 +0,0 @@ -import com.modrinth.minotaur.dependencies.ModDependency -plugins { - id 'fabric-loom' version '1.9-SNAPSHOT' - id 'maven-publish' - id "com.modrinth.minotaur" version "2.+" -} - -version = "${project.mod_version}+${project.minecraft_version}" -group = project.maven_group - -base { - archivesName = project.archives_base_name -} - -repositories { - mavenLocal() - - maven { - name = 'ParchmentMC' - url = 'https://maven.parchmentmc.org' - } - - maven { url 'https://maven.nucleoid.xyz' } - - maven { - name = "TerraformersMC" - url = "https://maven.terraformersmc.com/" - } - maven { - name = "Ladysnake Libs" - url = 'https://maven.ladysnake.org/releases' - } -} - -loom { - accessWidenerPath = file("src/main/resources/solstice.accesswidener") -} - -dependencies { - // To change the versions see the gradle.properties file - minecraft "com.mojang:minecraft:${project.minecraft_version}" - - mappings loom.layered() { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-${project.minecraft_version}:${project.parchment_mappings}@zip") - } - - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - - include implementation("org.spongepowered:configurate-core:${project.configurate_version}") - include implementation("org.spongepowered:configurate-hocon:${project.configurate_version}") - include implementation("org.spongepowered:configurate-gson:${project.configurate_version}") - include "com.typesafe:config:1.4.3" - include "io.leangen.geantyref:geantyref:1.3.16" - - include modImplementation("me.lucko:fabric-permissions-api:${project.permissions_api_version}") - - include modImplementation("eu.pb4:placeholder-api:${project.placeholderapi_version}") - include modImplementation("eu.pb4:sgui:${project.sgui_version}") - - modCompileOnly "dev.emi:trinkets:${project.trinkets_version}" - modRuntimeOnly "dev.emi:trinkets:${project.trinkets_version}" - - modCompileOnly "net.luckperms:api:5.4" - modRuntimeOnly "net.luckperms:api:5.4" -} - -processResources { - inputs.property "version", project.version - - filesMatching("fabric.mod.json") { - expand "version": project.version - } -} - -tasks.withType(JavaCompile).configureEach { - it.options.release = 21 -} - -java { - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. - withSourcesJar() - - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 -} - -jar { - from("LICENSE") { - rename { "${it}_${project.base.archivesName.get()}"} - } -} - -modrinth { - token = System.getenv("MODRINTH_TOKEN") - projectId = 'uIvrDZas' - uploadFile = remapJar - gameVersions = [project.minecraft_version] - loaders = ['fabric'] - dependencies = [ - new ModDependency('P7dR8mSH', 'required') // Fabric API - ] -} - -// configure the maven publication -publishing { - publications { - create("mavenJava", MavenPublication) { - artifactId = project.archives_base_name - from components.java - } - } - - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. - repositories { - // Add repositories to publish to here. - // Notice: This block does NOT have the same function as the block in the top level. - // The repositories here will be used for publishing your artifact, not for - // retrieving dependencies. - - - maven { - name = "AlexDevsRepo" - url = "https://maven.alexdevs.me/releases" - credentials { - username = System.getenv("MAVEN_USERNAME") - password = System.getenv("MAVEN_PASSWORD") - } - } - } -} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..d1a91c0b --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,7 @@ +import net.fabricmc.loom.task.RemapJarTask + +plugins { + id("java") + id("fabric-loom") version "1.8-SNAPSHOT" apply false + id("net.neoforged.moddev") version "2.0.88" apply false +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 00000000..876c922b --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + `kotlin-dsl` +} + +repositories { + mavenCentral() +} diff --git a/buildSrc/src/main/kotlin/multiloader-common.gradle.kts b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts new file mode 100644 index 00000000..3fbbbe00 --- /dev/null +++ b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts @@ -0,0 +1,115 @@ +plugins { + id("java-library") + id("maven-publish") +} + +base { + archivesName = "${"mod_id"()}-${project.name}-${"minecraft_version"()}" +} + +java { + toolchain.languageVersion = JavaLanguageVersion.of("java_version"()) + withSourcesJar() + withJavadocJar() +} + +repositories { + mavenCentral() + + maven("https://maven.fabricmc.net/") + maven("https://maven.parchmentmc.org/") + maven("https://maven.neoforged.net/releases") + maven("https://maven.blamejared.com") + maven("https://mvn.devos.one/snapshots") + maven("https://maven.ladysnake.org/releases") + maven("https://maven.terraformersmc.com/") + maven("https://maven.nucleoid.xyz") + maven("https://maven.alexdevs.me/releases") + maven("https://maven.stardustmodding.org/releases") +} + +listOf("apiElements", "runtimeElements", "sourcesElements", "javadocElements").forEach { variant -> + configurations[variant].outgoing { + capability("${"mod_group_id"()}:${base.archivesName.get()}:${"mod_version"()}") + capability("${"mod_group_id"()}:${"mod_id"()}-${project.name}-${"minecraft_version"()}:${"mod_version"()}") + capability("${"mod_group_id"()}:${"mod_id"()}:${"mod_version"()}") + } + +// publishing.publications.configureEach { +// suppressPomMetadataWarningsFor(variant) +// } +} + +tasks.named("sourcesJar") { + from(rootProject.file("LICENSE")) { + rename { "${it}_${"mod_id"()}" } + } +} + +tasks.named("jar") { + from(rootProject.file("LICENSE")) { + rename { "${it}_${"mod_id"()}" } + } + + manifest { + attributes( + mapOf( + "Specification-Title" to "mod_name"(), + "Specification-Vendor" to "mod_authors"(), + "Specification-Version" to "mod_version"(), + "Implementation-Title" to project.name, + "Implementation-Version" to "mod_version"(), + "Implementation-Vendor" to "mod_authors"(), + "Built-On-Minecraft" to "minecraft_version"() + ) + ) + } +} + +tasks.processResources { + var expandProps = mapOf( + "mod_version" to "mod_version"(), + "mod_group_id" to "mod_group_id"(), + "minecraft_version" to "minecraft_version"(), + "minecraft_version_range" to "minecraft_version_range"(), + "fabric_version" to "fabric_version"(), + "fabric_loader_version" to "fabric_loader_version"(), + "mod_name" to "mod_name"(), + "mod_authors" to "mod_authors"(), + "mod_id" to "mod_id"(), + "mod_license" to "mod_license"(), + "mod_description" to "mod_description"(), + "neo_version" to "neo_version"(), + "neo_version_range" to "neo_version_range"(), + "neo_loader_version_range" to "neo_loader_version_range"(), + "mod_credits" to "mod_credits"(), + "java_version" to "java_version"() + ) + + filesMatching( + listOf( + "pack.mcmeta", "fabric.mod.json", "META-INF/mods.toml", "META-INF/neoforge.mods.toml", "*.mixins.json" + ) + ) { + expand(expandProps) + } + + inputs.properties(expandProps) +} + +publishing { + publications { + register("mavenJava") { + artifactId = base.archivesName.get() + from(components["java"]) + } + } + + repositories { + maven { + mavenLocal() + } + } +} + +operator fun String.invoke(): String = rootProject.ext[this] as? String ?: error("No property \"$this\"") diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts new file mode 100644 index 00000000..2c70b79f --- /dev/null +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id("multiloader-common") +} + +val commonJava by configurations.creating { + isCanBeResolved = true +} + +val commonResources by configurations.creating { + isCanBeResolved = true +} + +dependencies { + compileOnly(project(":common")) { + capabilities { + requireCapability("${"mod_group_id"()}:${"mod_id"()}") + } + } + + commonJava(project(path = ":common", configuration = "commonJava")) + commonResources(project(path = ":common", configuration = "commonResources")) +} + +tasks.named("compileJava") { + dependsOn(configurations["commonJava"]) + source(configurations["commonJava"]) +} + +tasks.processResources { + dependsOn(configurations["commonResources"]) + from(configurations["commonResources"]) +} + +tasks.named("javadoc").configure { + dependsOn(configurations["commonJava"]) + source(configurations["commonJava"]) +} + +tasks.named("sourcesJar") { + dependsOn(configurations["commonJava"]) + from(configurations["commonJava"]) + dependsOn(configurations["commonResources"]) + from(configurations["commonResources"]) +} + +operator fun String.invoke(): String = rootProject.ext[this] as? String ?: error("No property \"$this\"") diff --git a/common/build.gradle.kts b/common/build.gradle.kts new file mode 100644 index 00000000..1766ea37 --- /dev/null +++ b/common/build.gradle.kts @@ -0,0 +1,52 @@ +plugins { + id("multiloader-common") + id("net.neoforged.moddev") +} + +neoForge { + neoFormVersion = "neoform_version"() + + val at = file("src/main/resources/META-INF/accesstransformer.cfg") + + if (at.exists()) { + accessTransformers.from(at.absolutePath) + } + + parchment { + minecraftVersion = "parchment_minecraft"() + mappingsVersion = "parchment_version"() + } +} + +dependencies { + compileOnly("org.ow2.asm:asm-tree:9.8") + compileOnly("org.spongepowered:mixin:0.8.5") + compileOnly("io.github.llamalad7:mixinextras-common:0.3.5") + annotationProcessor("io.github.llamalad7:mixinextras-common:0.3.5") + + compileOnly("org.spongepowered:configurate-core:${"configurate_version"()}") + compileOnly("org.spongepowered:configurate-hocon:${"configurate_version"()}") + compileOnly("org.spongepowered:configurate-gson:${"configurate_version"()}") + compileOnly("com.typesafe:config:1.4.3") + compileOnly("io.leangen.geantyref:geantyref:1.3.16") + compileOnly("eu.pb4:placeholderapi:${"placeholderapi_nf_version"()}") + compileOnly("eu.pb4:sgui-neoforge:${"sgui_version"()}") + compileOnly("net.luckperms:api:5.4") +} + +val commonJava: Configuration by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true +} + +val commonResources: Configuration by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true +} + +artifacts { + add(commonJava.name, sourceSets.main.get().java.sourceDirectories.singleFile) + add(commonResources.name, sourceSets.main.get().resources.sourceDirectories.singleFile) +} + +operator fun String.invoke(): String = rootProject.ext[this] as? String ?: error("No property \"$this\"") diff --git a/common/src/main/java/me/alexdevs/solstice/Paths.java b/common/src/main/java/me/alexdevs/solstice/Paths.java new file mode 100644 index 00000000..b3f105ee --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/Paths.java @@ -0,0 +1,9 @@ +package me.alexdevs.solstice; + +import me.alexdevs.solstice.api.platform.PlatformHelper; + +import java.nio.file.Path; + +public class Paths { + public static final Path configDirectory = PlatformHelper.get().getConfigDir().resolve(Solstice.MOD_ID); +} diff --git a/src/main/java/me/alexdevs/solstice/Solstice.java b/common/src/main/java/me/alexdevs/solstice/Solstice.java similarity index 73% rename from src/main/java/me/alexdevs/solstice/Solstice.java rename to common/src/main/java/me/alexdevs/solstice/Solstice.java index 5cc90c3b..e9117f6d 100644 --- a/src/main/java/me/alexdevs/solstice/Solstice.java +++ b/common/src/main/java/me/alexdevs/solstice/Solstice.java @@ -3,16 +3,15 @@ import me.alexdevs.solstice.api.data.HoconDataManager; import me.alexdevs.solstice.api.events.SolsticeEvents; import me.alexdevs.solstice.api.events.WorldSaveCallback; +import me.alexdevs.solstice.api.events.proxy.ProxyServerLifecycleEvents; +import me.alexdevs.solstice.api.events.proxy.ProxyServerTickEvents; +import me.alexdevs.solstice.api.platform.PlatformHelper; import me.alexdevs.solstice.core.*; import me.alexdevs.solstice.data.PlayerDataManager; import me.alexdevs.solstice.data.ServerData; import me.alexdevs.solstice.integrations.ConnectorIntegration; import me.alexdevs.solstice.integrations.LuckPermsIntegration; import me.alexdevs.solstice.locale.LocaleManager; -import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; -import net.fabricmc.loader.api.FabricLoader; import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; import net.minecraft.world.level.storage.LevelResource; @@ -22,45 +21,35 @@ import java.util.concurrent.ConcurrentLinkedQueue; - -public class Solstice implements ModInitializer { +public class Solstice { public static final String MOD_ID = "solstice"; public static final Logger LOGGER = LoggerFactory.getLogger(Solstice.class); - public static final HoconDataManager configManager = new HoconDataManager(Paths.configDirectory.resolve("config.conf")); + public static final HoconDataManager configManager = new HoconDataManager(Paths.configDirectory.resolve( + "config.conf")); + public static final LocaleManager localeManager = new LocaleManager(Paths.configDirectory.resolve("locale.json")); public static final ServerData serverData = new ServerData(); public static final PlayerDataManager playerData = new PlayerDataManager(); - public static final Modules modules = new Modules(); + public static Modules modules = new Modules(); private static final ConcurrentLinkedQueue nextTickRunnables = new ConcurrentLinkedQueue<>(); public static MinecraftServer server; public static Scheduler scheduler = new Scheduler(1, nextTickRunnables); - public static final CooldownManager cooldown = new CooldownManager(); + public static CooldownManager cooldown = new CooldownManager(); public static final WarmUpManager warmUp = new WarmUpManager(); private static Solstice INSTANCE; - private static final UserCache userCache = new UserCache(FabricLoader.getInstance().getGameDir().resolve("usercache.json").toFile()); - public Solstice() { - INSTANCE = this; - } + private static final UserCache userCache = new UserCache(PlatformHelper.get() + .getGameDir() + .resolve("usercache.json") + .toFile()); - public static Solstice getInstance() { - return INSTANCE; - } - - public static void nextTick(Runnable runnable) { - nextTickRunnables.add(runnable); - } - - public static UserCache getUserCache() { - return userCache; - } + public void init() { + INSTANCE = this; - @Override - public void onInitialize() { - var modMeta = FabricLoader.getInstance().getModContainer(MOD_ID).get().getMetadata(); - LOGGER.info("Initializing Solstice v{}...", modMeta.getVersion()); + LOGGER.info("Initializing Solstice v{}...", PlatformHelper.get().getModVersion()); + PlatformHelper.get().init(); ConnectorIntegration.register(); LuckPermsIntegration.register(); @@ -85,30 +74,47 @@ public void onInitialize() { LOGGER.error("Error while loading Solstice locale!", e); } - ServerLifecycleEvents.SERVER_STARTING.register(server -> { + ProxyServerLifecycleEvents.SERVER_STARTING.register(server -> { Solstice.server = server; + var path = server.getWorldPath(LevelResource.ROOT).resolve("data").resolve(MOD_ID); + if (!path.toFile().exists()) { path.toFile().mkdirs(); } + serverData.setDataPath(path.resolve("server.json")); playerData.setDataPath(path.resolve("players")); - serverData.loadData(false); }); - ServerLifecycleEvents.SERVER_STARTED.register(server -> SolsticeEvents.READY.invoker().onReady(INSTANCE, server)); - ServerLifecycleEvents.SERVER_STOPPED.register(server -> scheduler.shutdownNow()); + + ProxyServerLifecycleEvents.SERVER_STARTED.register(server -> SolsticeEvents.READY.invoker() + .onReady(INSTANCE, server)); + ProxyServerLifecycleEvents.SERVER_STOPPED.register(server -> scheduler.shutdownNow()); + WorldSaveCallback.EVENT.register((server1, suppressLogs, flush, force) -> { serverData.save(); playerData.saveAll(); }); - ServerTickEvents.START_SERVER_TICK.register(server -> { + ProxyServerTickEvents.START_SERVER_TICK.register(server -> { nextTickRunnables.forEach(Runnable::run); nextTickRunnables.clear(); }); } + public static Solstice getInstance() { + return INSTANCE; + } + + public static void nextTick(Runnable runnable) { + nextTickRunnables.add(runnable); + } + + public static UserCache getUserCache() { + return userCache; + } + public void broadcast(Component text) { server.getPlayerList().broadcastSystemMessage(text, false); } diff --git a/src/main/java/me/alexdevs/solstice/api/PlayerMail.java b/common/src/main/java/me/alexdevs/solstice/api/PlayerMail.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/PlayerMail.java rename to common/src/main/java/me/alexdevs/solstice/api/PlayerMail.java diff --git a/src/main/java/me/alexdevs/solstice/api/Raycast.java b/common/src/main/java/me/alexdevs/solstice/api/Raycast.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/Raycast.java rename to common/src/main/java/me/alexdevs/solstice/api/Raycast.java diff --git a/src/main/java/me/alexdevs/solstice/api/ServerLocation.java b/common/src/main/java/me/alexdevs/solstice/api/ServerLocation.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/ServerLocation.java rename to common/src/main/java/me/alexdevs/solstice/api/ServerLocation.java diff --git a/src/main/java/me/alexdevs/solstice/api/color/Gradient.java b/common/src/main/java/me/alexdevs/solstice/api/color/Gradient.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/color/Gradient.java rename to common/src/main/java/me/alexdevs/solstice/api/color/Gradient.java diff --git a/src/main/java/me/alexdevs/solstice/api/color/RGBColor.java b/common/src/main/java/me/alexdevs/solstice/api/color/RGBColor.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/color/RGBColor.java rename to common/src/main/java/me/alexdevs/solstice/api/color/RGBColor.java diff --git a/src/main/java/me/alexdevs/solstice/api/command/Flags.java b/common/src/main/java/me/alexdevs/solstice/api/command/Flags.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/command/Flags.java rename to common/src/main/java/me/alexdevs/solstice/api/command/Flags.java diff --git a/src/main/java/me/alexdevs/solstice/api/command/LocalGameProfile.java b/common/src/main/java/me/alexdevs/solstice/api/command/LocalGameProfile.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/command/LocalGameProfile.java rename to common/src/main/java/me/alexdevs/solstice/api/command/LocalGameProfile.java diff --git a/src/main/java/me/alexdevs/solstice/api/command/TimeSpan.java b/common/src/main/java/me/alexdevs/solstice/api/command/TimeSpan.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/command/TimeSpan.java rename to common/src/main/java/me/alexdevs/solstice/api/command/TimeSpan.java diff --git a/src/main/java/me/alexdevs/solstice/api/command/flags/ArgumentFlag.java b/common/src/main/java/me/alexdevs/solstice/api/command/flags/ArgumentFlag.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/command/flags/ArgumentFlag.java rename to common/src/main/java/me/alexdevs/solstice/api/command/flags/ArgumentFlag.java diff --git a/src/main/java/me/alexdevs/solstice/api/command/flags/DoubleFlag.java b/common/src/main/java/me/alexdevs/solstice/api/command/flags/DoubleFlag.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/command/flags/DoubleFlag.java rename to common/src/main/java/me/alexdevs/solstice/api/command/flags/DoubleFlag.java diff --git a/src/main/java/me/alexdevs/solstice/api/command/flags/Flag.java b/common/src/main/java/me/alexdevs/solstice/api/command/flags/Flag.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/command/flags/Flag.java rename to common/src/main/java/me/alexdevs/solstice/api/command/flags/Flag.java diff --git a/src/main/java/me/alexdevs/solstice/api/command/flags/FloatFlag.java b/common/src/main/java/me/alexdevs/solstice/api/command/flags/FloatFlag.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/command/flags/FloatFlag.java rename to common/src/main/java/me/alexdevs/solstice/api/command/flags/FloatFlag.java diff --git a/src/main/java/me/alexdevs/solstice/api/command/flags/StringFlag.java b/common/src/main/java/me/alexdevs/solstice/api/command/flags/StringFlag.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/command/flags/StringFlag.java rename to common/src/main/java/me/alexdevs/solstice/api/command/flags/StringFlag.java diff --git a/src/main/java/me/alexdevs/solstice/api/data/GsonDataManager.java b/common/src/main/java/me/alexdevs/solstice/api/data/GsonDataManager.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/data/GsonDataManager.java rename to common/src/main/java/me/alexdevs/solstice/api/data/GsonDataManager.java diff --git a/src/main/java/me/alexdevs/solstice/api/data/HoconDataManager.java b/common/src/main/java/me/alexdevs/solstice/api/data/HoconDataManager.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/data/HoconDataManager.java rename to common/src/main/java/me/alexdevs/solstice/api/data/HoconDataManager.java diff --git a/src/main/java/me/alexdevs/solstice/api/data/serializers/DateSerializer.java b/common/src/main/java/me/alexdevs/solstice/api/data/serializers/DateSerializer.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/data/serializers/DateSerializer.java rename to common/src/main/java/me/alexdevs/solstice/api/data/serializers/DateSerializer.java diff --git a/src/main/java/me/alexdevs/solstice/api/events/CommandEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/CommandEvents.java similarity index 64% rename from src/main/java/me/alexdevs/solstice/api/events/CommandEvents.java rename to common/src/main/java/me/alexdevs/solstice/api/events/CommandEvents.java index 39ad20e2..3747b4fd 100644 --- a/src/main/java/me/alexdevs/solstice/api/events/CommandEvents.java +++ b/common/src/main/java/me/alexdevs/solstice/api/events/CommandEvents.java @@ -1,25 +1,26 @@ package me.alexdevs.solstice.api.events; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; import net.minecraft.commands.CommandSourceStack; public class CommandEvents { - public static final Event ALLOW_COMMAND = EventFactory.createArrayBacked(AllowCommand.class, callbacks -> - (source, command) -> { + public static final Event ALLOW_COMMAND = EventFactory.createArrayBacked( + AllowCommand.class, callbacks -> (source, command) -> { for (var callback : callbacks) { - if(!callback.allowCommand(source, command)) - return false; + if (!callback.allowCommand(source, command)) return false; } return true; - }); + } + ); - public static final Event COMMAND = EventFactory.createArrayBacked(Command.class, callbacks -> - (player, command) -> { + public static final Event COMMAND = EventFactory.createArrayBacked( + Command.class, callbacks -> (player, command) -> { for (var callback : callbacks) { callback.onCommand(player, command); } - }); + } + ); @FunctionalInterface public interface AllowCommand { diff --git a/src/main/java/me/alexdevs/solstice/api/events/PlayerActivityEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/PlayerActivityEvents.java similarity index 88% rename from src/main/java/me/alexdevs/solstice/api/events/PlayerActivityEvents.java rename to common/src/main/java/me/alexdevs/solstice/api/events/PlayerActivityEvents.java index f5a45ffc..7276935c 100644 --- a/src/main/java/me/alexdevs/solstice/api/events/PlayerActivityEvents.java +++ b/common/src/main/java/me/alexdevs/solstice/api/events/PlayerActivityEvents.java @@ -1,8 +1,8 @@ package me.alexdevs.solstice.api.events; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; import me.alexdevs.solstice.modules.afk.AfkModule; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; import net.minecraft.server.level.ServerPlayer; public final class PlayerActivityEvents { diff --git a/src/main/java/me/alexdevs/solstice/api/events/PlayerConnectionEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/PlayerConnectionEvents.java similarity index 90% rename from src/main/java/me/alexdevs/solstice/api/events/PlayerConnectionEvents.java rename to common/src/main/java/me/alexdevs/solstice/api/events/PlayerConnectionEvents.java index d232d3d7..2be06346 100644 --- a/src/main/java/me/alexdevs/solstice/api/events/PlayerConnectionEvents.java +++ b/common/src/main/java/me/alexdevs/solstice/api/events/PlayerConnectionEvents.java @@ -1,8 +1,8 @@ package me.alexdevs.solstice.api.events; import com.mojang.authlib.GameProfile; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; public class PlayerConnectionEvents { public static final Event WHITELIST_BYPASS = EventFactory.createArrayBacked(WhitelistBypass.class, callbacks -> diff --git a/src/main/java/me/alexdevs/solstice/api/events/PlayerTeleportCallback.java b/common/src/main/java/me/alexdevs/solstice/api/events/PlayerTeleportCallback.java similarity index 84% rename from src/main/java/me/alexdevs/solstice/api/events/PlayerTeleportCallback.java rename to common/src/main/java/me/alexdevs/solstice/api/events/PlayerTeleportCallback.java index 9254304a..28611ddd 100644 --- a/src/main/java/me/alexdevs/solstice/api/events/PlayerTeleportCallback.java +++ b/common/src/main/java/me/alexdevs/solstice/api/events/PlayerTeleportCallback.java @@ -1,8 +1,8 @@ package me.alexdevs.solstice.api.events; import me.alexdevs.solstice.api.ServerLocation; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; import net.minecraft.server.level.ServerPlayer; public interface PlayerTeleportCallback { diff --git a/src/main/java/me/alexdevs/solstice/api/events/RestartEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/RestartEvents.java similarity index 89% rename from src/main/java/me/alexdevs/solstice/api/events/RestartEvents.java rename to common/src/main/java/me/alexdevs/solstice/api/events/RestartEvents.java index 6d5a44be..a7061cca 100644 --- a/src/main/java/me/alexdevs/solstice/api/events/RestartEvents.java +++ b/common/src/main/java/me/alexdevs/solstice/api/events/RestartEvents.java @@ -1,8 +1,8 @@ package me.alexdevs.solstice.api.events; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; import me.alexdevs.solstice.modules.timeBar.TimeBar; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; public class RestartEvents { public static final Event SCHEDULED = EventFactory.createArrayBacked(Schedule.class, callbacks -> diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/SolsticeEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/SolsticeEvents.java new file mode 100644 index 00000000..c5abfd3c --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/SolsticeEvents.java @@ -0,0 +1,83 @@ +package me.alexdevs.solstice.api.events; + +import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; + +public final class SolsticeEvents { + public static final Event READY = EventFactory.createArrayBacked( + Ready.class, callbacks -> + (instance, server) -> { + for (Ready callback : callbacks) { + callback.onReady(instance, server); + } + } + ); + + public static final Event RELOAD = EventFactory.createArrayBacked( + Reload.class, callbacks -> + (instance) -> { + for (Reload callback : callbacks) { + callback.onReload(instance); + } + } + ); + + public static final Event WELCOME = EventFactory.createArrayBacked( + Welcome.class, callbacks -> + (player, server) -> { + for (Welcome callback : callbacks) { + callback.onWelcome(player, server); + } + } + ); + + public static final Event USERNAME_CHANGE = EventFactory.createArrayBacked( + UsernameChange.class, callbacks -> + (player, previousUsername) -> { + for (UsernameChange callback : callbacks) { + callback.onUsernameChange(player, previousUsername); + } + } + ); + + /** + * @deprecated Superseded by {@link me.alexdevs.solstice.api.events.CommandEvents} + */ + @Deprecated + public static final Event PLAYER_COMMAND = EventFactory.createArrayBacked( + PlayerCommand.class, callbacks -> + (player, command) -> { + for (PlayerCommand callback : callbacks) { + callback.onPlayerCommand(player, command); + } + } + ); + + @FunctionalInterface + public interface Ready { + void onReady(Solstice instance, MinecraftServer server); + } + + @FunctionalInterface + public interface Reload { + void onReload(Solstice instance); + } + + @FunctionalInterface + public interface Welcome { + void onWelcome(ServerPlayer player, MinecraftServer server); + } + + @FunctionalInterface + public interface UsernameChange { + void onUsernameChange(ServerPlayer player, String previousUsername); + } + + @FunctionalInterface + public interface PlayerCommand { + void onPlayerCommand(ServerPlayer player, String command); + } +} diff --git a/src/main/java/me/alexdevs/solstice/api/events/TimeBarEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/TimeBarEvents.java similarity index 93% rename from src/main/java/me/alexdevs/solstice/api/events/TimeBarEvents.java rename to common/src/main/java/me/alexdevs/solstice/api/events/TimeBarEvents.java index 91d648b0..6b626901 100644 --- a/src/main/java/me/alexdevs/solstice/api/events/TimeBarEvents.java +++ b/common/src/main/java/me/alexdevs/solstice/api/events/TimeBarEvents.java @@ -1,8 +1,8 @@ package me.alexdevs.solstice.api.events; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; import me.alexdevs.solstice.modules.timeBar.TimeBar; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; import net.minecraft.server.MinecraftServer; public class TimeBarEvents { diff --git a/src/main/java/me/alexdevs/solstice/api/events/WorldSaveCallback.java b/common/src/main/java/me/alexdevs/solstice/api/events/WorldSaveCallback.java similarity index 65% rename from src/main/java/me/alexdevs/solstice/api/events/WorldSaveCallback.java rename to common/src/main/java/me/alexdevs/solstice/api/events/WorldSaveCallback.java index c3c0c427..88bb1ff1 100644 --- a/src/main/java/me/alexdevs/solstice/api/events/WorldSaveCallback.java +++ b/common/src/main/java/me/alexdevs/solstice/api/events/WorldSaveCallback.java @@ -1,17 +1,17 @@ package me.alexdevs.solstice.api.events; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; import net.minecraft.server.MinecraftServer; public interface WorldSaveCallback { - Event EVENT = EventFactory.createArrayBacked(WorldSaveCallback.class, (callbacks) -> - (server, suppressLogs, flush, force) -> { + Event EVENT = EventFactory.createArrayBacked( + WorldSaveCallback.class, (callbacks) -> (server, suppressLogs, flush, force) -> { for (WorldSaveCallback callback : callbacks) { callback.onSave(server, suppressLogs, flush, force); } - - }); + } + ); void onSave(MinecraftServer server, boolean suppressLogs, boolean flush, boolean force); } \ No newline at end of file diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/backend/ArrayBackedEvent.java b/common/src/main/java/me/alexdevs/solstice/api/events/backend/ArrayBackedEvent.java new file mode 100644 index 00000000..933cf5ab --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/backend/ArrayBackedEvent.java @@ -0,0 +1,105 @@ +package me.alexdevs.solstice.api.events.backend; + +import net.minecraft.resources.ResourceLocation; + +import java.lang.reflect.Array; +import java.util.*; +import java.util.function.Function; + +class ArrayBackedEvent extends Event { + private final Function invokerFactory; + private final Object lock = new Object(); + private T[] handlers; + /** + * Registered event phases. + */ + private final Map> phases = new LinkedHashMap<>(); + /** + * Phases sorted in the correct dependency order. + */ + private final List> sortedPhases = new ArrayList<>(); + + @SuppressWarnings("unchecked") + ArrayBackedEvent(Class type, Function invokerFactory) { + this.invokerFactory = invokerFactory; + this.handlers = (T[]) Array.newInstance(type, 0); + update(); + } + + void update() { + this.invoker = invokerFactory.apply(handlers); + } + + @Override + public void register(T listener) { + register(DEFAULT_PHASE, listener); + } + + @Override + public void register(ResourceLocation phaseIdentifier, T listener) { + Objects.requireNonNull(phaseIdentifier, "Tried to register a listener for a null phase!"); + Objects.requireNonNull(listener, "Tried to register a null listener!"); + + synchronized (lock) { + getOrCreatePhase(phaseIdentifier, true).addListener(listener); + rebuildInvoker(handlers.length + 1); + } + } + + private EventPhaseData getOrCreatePhase(ResourceLocation id, boolean sortIfCreate) { + EventPhaseData phase = phases.get(id); + + if (phase == null) { + phase = new EventPhaseData<>(id, handlers.getClass().getComponentType()); + phases.put(id, phase); + sortedPhases.add(phase); + + if (sortIfCreate) { + NodeSorting.sort(sortedPhases, "event phases", Comparator.comparing(data -> data.id)); + } + } + + return phase; + } + + private void rebuildInvoker(int newLength) { + // Rebuild handlers. + if (sortedPhases.size() == 1) { + // Special case with a single phase: use the array of the phase directly. + handlers = sortedPhases.get(0).listeners; + } else { + @SuppressWarnings("unchecked") T[] newHandlers = (T[]) Array.newInstance( + handlers.getClass() + .getComponentType(), newLength + ); + int newHandlersIndex = 0; + + for (EventPhaseData existingPhase : sortedPhases) { + int length = existingPhase.listeners.length; + System.arraycopy(existingPhase.listeners, 0, newHandlers, newHandlersIndex, length); + newHandlersIndex += length; + } + + handlers = newHandlers; + } + + // Rebuild invoker. + update(); + } + + @Override + public void addPhaseOrdering(ResourceLocation firstPhase, ResourceLocation secondPhase) { + Objects.requireNonNull(firstPhase, "Tried to add an ordering for a null phase."); + Objects.requireNonNull(secondPhase, "Tried to add an ordering for a null phase."); + if (firstPhase.equals(secondPhase)) + throw new IllegalArgumentException("Tried to add a phase that depends on itself."); + + synchronized (lock) { + EventPhaseData first = getOrCreatePhase(firstPhase, false); + EventPhaseData second = getOrCreatePhase(secondPhase, false); + EventPhaseData.link(first, second); + NodeSorting.sort(this.sortedPhases, "event phases", Comparator.comparing(data -> data.id)); + rebuildInvoker(handlers.length); + } + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/backend/Event.java b/common/src/main/java/me/alexdevs/solstice/api/events/backend/Event.java new file mode 100644 index 00000000..c611d57a --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/backend/Event.java @@ -0,0 +1,66 @@ +package me.alexdevs.solstice.api.events.backend; + +import net.minecraft.resources.ResourceLocation; + +public abstract class Event { + /** + * The invoker field. This should be updated by the implementation to + * always refer to an instance containing all code that should be + * executed upon event emission. + */ + protected volatile T invoker; + + /** + * Returns the invoker instance. + * + *

An "invoker" is an object which hides multiple registered + * listeners of type T under one instance of type T, executing + * them and leaving early as necessary. + * + * @return The invoker instance. + */ + public final T invoker() { + return invoker; + } + + /** + * Register a listener to the event, in the default phase. + * Have a look at {@link #addPhaseOrdering} for an explanation of event phases. + * + * @param listener The desired listener. + */ + public abstract void register(T listener); + + /** + * The identifier of the default phase. + * Have a look at {@link EventFactory#createWithPhases} for an explanation of event phases. + */ + public static final ResourceLocation DEFAULT_PHASE = ResourceLocation.fromNamespaceAndPath("fabric", "default"); + + /** + * Register a listener to the event for the specified phase. + * Have a look at {@link EventFactory#createWithPhases} for an explanation of event phases. + * + * @param phase Identifier of the phase this listener should be registered for. It will be created if it didn't exist yet. + * @param listener The desired listener. + */ + public void register(ResourceLocation phase, T listener) { + // This is done to keep compatibility with existing Event subclasses, but they should really not be subclassing Event. + register(listener); + } + + /** + * Request that listeners registered for one phase be executed before listeners registered for another phase. + * Relying on the default phases supplied to {@link EventFactory#createWithPhases} should be preferred over manually + * registering phase ordering dependencies. + * + *

Incompatible ordering constraints such as cycles will lead to inconsistent behavior: + * some constraints will be respected and some will be ignored. If this happens, a warning will be logged. + * + * @param firstPhase The identifier of the phase that should run before the other. It will be created if it didn't exist yet. + * @param secondPhase The identifier of the phase that should run after the other. It will be created if it didn't exist yet. + */ + public void addPhaseOrdering(ResourceLocation firstPhase, ResourceLocation secondPhase) { + // This is not abstract to avoid breaking existing Event subclasses, but they should really not be subclassing Event. + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventFactory.java b/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventFactory.java new file mode 100644 index 00000000..1607f208 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventFactory.java @@ -0,0 +1,128 @@ +package me.alexdevs.solstice.api.events.backend; + +import net.minecraft.resources.ResourceLocation; + +import java.util.function.Function; + +public final class EventFactory { + private EventFactory() { + } + + /** + * Create an "array-backed" Event instance. + * + *

If your factory simply delegates to the listeners without adding custom behavior, + * consider using {@linkplain #createArrayBacked(Class, Object, Function) the other overload} + * if performance of this event is critical. + * + * @param type The listener class type. + * @param invokerFactory The invoker factory, combining multiple listeners into one instance. + * @param The listener type. + * + * @return The Event instance. + */ + public static Event createArrayBacked(Class type, Function invokerFactory) { + return EventFactoryImpl.createArrayBacked(type, invokerFactory); + } + + /** + * Create an "array-backed" Event instance with a custom empty invoker, + * for an event whose {@code invokerFactory} only delegates to the listeners. + *

    + *
  • If there is no listener, the custom empty invoker will be used.
  • + *
  • If there is only one listener, that one will be used as the invoker + * and the factory will not be called.
  • + *
  • Only when there are at least two listeners will the factory be used.
  • + *
+ * + *

Having a custom empty invoker (of type (...) -> {}) increases performance + * relative to iterating over an empty array; however, it only really matters + * if the event is executed thousands of times a second. + * + * @param type The listener class type. + * @param emptyInvoker The custom empty invoker. + * @param invokerFactory The invoker factory, combining multiple listeners into one instance. + * @param The listener type. + * + * @return The Event instance. + */ + public static Event createArrayBacked(Class type, T emptyInvoker, Function invokerFactory) { + return createArrayBacked( + type, listeners -> { + if (listeners.length == 0) { + return emptyInvoker; + } else if (listeners.length == 1) { + return listeners[0]; + } else { + return invokerFactory.apply(listeners); + } + } + ); + } + + /** + * Create an array-backed event with a list of default phases that get invoked in order. + * Exposing the identifiers of the default phases as {@code public static final} constants is encouraged. + * + *

An event phase is a named group of listeners, which may be ordered before or after other groups of listeners. + * This allows some listeners to take priority over other listeners. + * Adding separate events should be considered before making use of multiple event phases. + * + *

Phases may be freely added to events created with any of the factory functions, + * however using this function is preferred for widely used event phases. + * If more phases are necessary, discussion with the author of the Event is encouraged. + * + *

Refer to {@link Event#addPhaseOrdering} for an explanation of event phases. + * + * @param type The listener class type. + * @param invokerFactory The invoker factory, combining multiple listeners into one instance. + * @param defaultPhases The default phases of this event, in the correct order. Must contain {@link Event#DEFAULT_PHASE}. + * @param The listener type. + * + * @return The Event instance. + */ + public static Event createWithPhases( + Class type, + Function invokerFactory, + ResourceLocation... defaultPhases + ) { + EventFactoryImpl.ensureContainsDefault(defaultPhases); + EventFactoryImpl.ensureNoDuplicates(defaultPhases); + + Event event = createArrayBacked(type, invokerFactory); + + for (int i = 1; i < defaultPhases.length; ++i) { + event.addPhaseOrdering(defaultPhases[i - 1], defaultPhases[i]); + } + + return event; + } + + /** + * @deprecated This is not to be used in events anymore. + */ + @Deprecated + public static String getHandlerName(Object handler) { + return handler.getClass().getName(); + } + + /** + * @deprecated Always returns {@code false}, do not use. This is not to be used in events anymore, standard Java profilers will do fine. + */ + @Deprecated + public static boolean isProfilingEnabled() { + return false; + } + + /** + * Invalidate and re-create all existing "invoker" instances across + * events created by this EventFactory. Use this if, for instance, + * the profilingEnabled field changes. + * + * @deprecated Do not use, will be removed in a future release. + */ + @Deprecated(forRemoval = true) + public static void invalidate() { + EventFactoryImpl.invalidate(); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventFactoryImpl.java b/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventFactoryImpl.java new file mode 100644 index 00000000..efef8330 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventFactoryImpl.java @@ -0,0 +1,114 @@ +package me.alexdevs.solstice.api.events.backend; + +import com.google.common.collect.MapMaker; +import net.minecraft.resources.ResourceLocation; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Array; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; +import java.util.Collections; +import java.util.Set; +import java.util.function.Function; + +public final class EventFactoryImpl { + private static final Set> ARRAY_BACKED_EVENTS = Collections.newSetFromMap(new MapMaker().weakKeys() + .makeMap()); + + private EventFactoryImpl() { + } + + public static void invalidate() { + ARRAY_BACKED_EVENTS.forEach(ArrayBackedEvent::update); + } + + public static Event createArrayBacked(Class type, Function invokerFactory) { + ArrayBackedEvent event = new ArrayBackedEvent<>(type, invokerFactory); + ARRAY_BACKED_EVENTS.add(event); + return event; + } + + public static void ensureContainsDefault(ResourceLocation[] defaultPhases) { + for (ResourceLocation id : defaultPhases) { + if (id.equals(Event.DEFAULT_PHASE)) { + return; + } + } + + throw new IllegalArgumentException("The event phases must contain Event.DEFAULT_PHASE."); + } + + public static void ensureNoDuplicates(ResourceLocation[] defaultPhases) { + for (int i = 0; i < defaultPhases.length; ++i) { + for (int j = i + 1; j < defaultPhases.length; ++j) { + if (defaultPhases[i].equals(defaultPhases[j])) { + throw new IllegalArgumentException("Duplicate event phase: " + defaultPhases[i]); + } + } + } + } + + // Code originally by sfPlayer1. + // Unfortunately, it's slightly slower than just passing an empty array in the first place. + private static T buildEmptyInvoker(Class handlerClass, Function invokerSetup) { + // find the functional interface method + Method funcIfMethod = null; + + for (Method m : handlerClass.getMethods()) { + if ((m.getModifiers() & (Modifier.STRICT | Modifier.PRIVATE)) == 0) { + if (funcIfMethod != null) { + throw new IllegalStateException("Multiple virtual methods in " + + handlerClass + + "; cannot build empty invoker!"); + } + + funcIfMethod = m; + } + } + + if (funcIfMethod == null) { + throw new IllegalStateException("No virtual methods in " + handlerClass + "; cannot build empty invoker!"); + } + + Object defValue = null; + + try { + // concert to mh, determine its type without the "this" reference + MethodHandle target = MethodHandles.lookup().unreflect(funcIfMethod); + MethodType type = target.type().dropParameterTypes(0, 1); + + if (type.returnType() != void.class) { + // determine default return value by invoking invokerSetup.apply(T[0]) with all-jvm-default args (null for refs, false for boolean, etc.) + // explicitCastArguments is being used to cast Object=null to the jvm default value for the correct type + + // construct method desc (TLjava/lang/Object;Ljava/lang/Object;...)R where T = invoker ref ("this"), R = invoker ret type and args 1+ are Object for each non-"this" invoker arg + MethodType objTargetType = MethodType.genericMethodType(type.parameterCount()) + .changeReturnType(type.returnType()) + .insertParameterTypes(0, target.type().parameterType(0)); + // explicit cast to translate to the invoker args from Object to their real type, inferring jvm default values + MethodHandle objTarget = MethodHandles.explicitCastArguments(target, objTargetType); + + // build invocation args with 0 = "this", 1+ = null + Object[] args = new Object[target.type().parameterCount()]; + //noinspection unchecked + args[0] = invokerSetup.apply((T[]) Array.newInstance(handlerClass, 0)); + + // retrieve default by invoking invokerSetup.apply(T[0]).targetName(def,def,...) + defValue = objTarget.invokeWithArguments(args); + } + } catch (Throwable t) { + throw new RuntimeException(t); + } + + final Object returnValue = defValue; + //noinspection unchecked + return (T) Proxy.newProxyInstance( + EventFactoryImpl.class.getClassLoader(), + new Class[] { handlerClass }, + (proxy, method, args) -> returnValue + ); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventPhaseData.java b/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventPhaseData.java new file mode 100644 index 00000000..e86389d3 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/backend/EventPhaseData.java @@ -0,0 +1,28 @@ +package me.alexdevs.solstice.api.events.backend; + +import net.minecraft.resources.ResourceLocation; + +import java.lang.reflect.Array; +import java.util.Arrays; + +class EventPhaseData extends SortableNode> { + final ResourceLocation id; + T[] listeners; + + @SuppressWarnings("unchecked") + EventPhaseData(ResourceLocation id, Class listenerClass) { + this.id = id; + this.listeners = (T[]) Array.newInstance(listenerClass, 0); + } + + void addListener(T listener) { + int oldLength = listeners.length; + listeners = Arrays.copyOf(listeners, oldLength + 1); + listeners[oldLength] = listener; + } + + @Override + protected String getDescription() { + return id.toString(); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/backend/NodeSorting.java b/common/src/main/java/me/alexdevs/solstice/api/events/backend/NodeSorting.java new file mode 100644 index 00000000..0260fd88 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/backend/NodeSorting.java @@ -0,0 +1,159 @@ +package me.alexdevs.solstice.api.events.backend; + +import com.google.common.annotations.VisibleForTesting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; + +public class NodeSorting { + private static final Logger LOGGER = LoggerFactory.getLogger("fabric-api-base"); + + @VisibleForTesting public static boolean ENABLE_CYCLE_WARNING = true; + + /** + * Sort a list of nodes. + * + * @param sortedNodes The list of nodes to sort. Will be modified in-place. + * @param elementDescription A description of the elements, used for logging in the presence of cycles. + * @param comparator The comparator to break ties and to order elements within a cycle. + * + * @return {@code true} if all the constraints were satisfied, {@code false} if there was at least one cycle. + */ + public static > boolean sort( + List sortedNodes, + String elementDescription, + Comparator comparator + ) { + // FIRST KOSARAJU SCC VISIT + List toposort = new ArrayList<>(sortedNodes.size()); + + for (N node : sortedNodes) { + forwardVisit(node, null, toposort); + } + + clearStatus(toposort); + Collections.reverse(toposort); + + // SECOND KOSARAJU SCC VISIT + Map> nodeToScc = new IdentityHashMap<>(); + + for (N node : toposort) { + if (!node.visited) { + List sccNodes = new ArrayList<>(); + // Collect nodes in SCC. + backwardVisit(node, sccNodes); + // Sort nodes by id. + sccNodes.sort(comparator); + // Mark nodes as belonging to this SCC. + NodeScc scc = new NodeScc<>(sccNodes); + + for (N nodeInScc : sccNodes) { + nodeToScc.put(nodeInScc, scc); + } + } + } + + clearStatus(toposort); + + // Build SCC graph + for (NodeScc scc : nodeToScc.values()) { + for (N node : scc.nodes) { + for (N subsequentNode : node.subsequentNodes) { + NodeScc subsequentScc = nodeToScc.get(subsequentNode); + + if (subsequentScc != scc) { + scc.subsequentSccs.add(subsequentScc); + subsequentScc.inDegree++; + } + } + } + } + + // Order SCCs according to priorities. When there is a choice, use the SCC with the lowest id. + // The priority queue contains all SCCs that currently have 0 in-degree. + PriorityQueue> pq = new PriorityQueue<>(Comparator.comparing(scc -> scc.nodes.get(0), comparator)); + sortedNodes.clear(); + + for (NodeScc scc : nodeToScc.values()) { + if (scc.inDegree == 0) { + pq.add(scc); + // Prevent adding the same SCC multiple times, as nodeToScc may contain the same value multiple times. + scc.inDegree = -1; + } + } + + boolean noCycle = true; + + while (!pq.isEmpty()) { + NodeScc scc = pq.poll(); + sortedNodes.addAll(scc.nodes); + + if (scc.nodes.size() > 1) { + noCycle = false; + + if (ENABLE_CYCLE_WARNING) { + // Print cycle warning + StringBuilder builder = new StringBuilder(); + builder.append("Found cycle while sorting ").append(elementDescription).append(":\n"); + + for (N node : scc.nodes) { + builder.append("\t").append(node.getDescription()).append("\n"); + } + + LOGGER.warn(builder.toString()); + } + } + + for (NodeScc subsequentScc : scc.subsequentSccs) { + subsequentScc.inDegree--; + + if (subsequentScc.inDegree == 0) { + pq.add(subsequentScc); + } + } + } + + return noCycle; + } + + private static > void forwardVisit(N node, N parent, List toposort) { + if (!node.visited) { + // Not yet visited. + node.visited = true; + + for (N data : node.subsequentNodes) { + forwardVisit(data, node, toposort); + } + + toposort.add(node); + } + } + + private static > void clearStatus(List nodes) { + for (N node : nodes) { + node.visited = false; + } + } + + private static > void backwardVisit(N node, List sccNodes) { + if (!node.visited) { + node.visited = true; + sccNodes.add(node); + + for (N data : node.previousNodes) { + backwardVisit(data, sccNodes); + } + } + } + + private static class NodeScc> { + final List nodes; + final List> subsequentSccs = new ArrayList<>(); + int inDegree = 0; + + private NodeScc(List nodes) { + this.nodes = nodes; + } + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/backend/SortableNode.java b/common/src/main/java/me/alexdevs/solstice/api/events/backend/SortableNode.java new file mode 100644 index 00000000..2e1eb8ee --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/backend/SortableNode.java @@ -0,0 +1,24 @@ +package me.alexdevs.solstice.api.events.backend; + +import java.util.ArrayList; +import java.util.List; + +public abstract class SortableNode> { + final List subsequentNodes = new ArrayList<>(); + final List previousNodes = new ArrayList<>(); + boolean visited = false; + + /** + * @return Description of this node, used to print the cycle warning. + */ + protected abstract String getDescription(); + + public static > void link(N first, N second) { + if (first == second) { + throw new IllegalArgumentException("Cannot link a node to itself!"); + } + + first.subsequentNodes.add(second); + second.previousNodes.add(first); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyAttackBlockCallback.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyAttackBlockCallback.java new file mode 100644 index 00000000..3236fc42 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyAttackBlockCallback.java @@ -0,0 +1,46 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; + +/** + * Callback for left-clicking ("attacking") a block. + * Is hooked in before the spectator check, so make sure to check for the player's game mode as well! + * + *

On the logical client, the return values have the following meaning: + *

    + *
  • SUCCESS cancels further processing, causes a hand swing, and sends a packet to the server.
  • + *
  • CONSUME cancels further processing, and sends a packet to the server. It does NOT cause a hand swing.
  • + *
  • PASS falls back to further processing.
  • + *
  • FAIL cancels further processing and does not send a packet to the server.
  • + *
+ * + *

On the logical server, the return values have the following meaning: + *

    + *
  • PASS falls back to further processing.
  • + *
  • Any other value cancels further processing.
  • + *
+ */ +public interface ProxyAttackBlockCallback { + Event EVENT = EventFactory.createArrayBacked( + ProxyAttackBlockCallback.class, (listeners) -> (player, level, hand, pos, direction) -> { + for (ProxyAttackBlockCallback event : listeners) { + InteractionResult result = event.interact(player, level, hand, pos, direction); + + if (result != InteractionResult.PASS) { + return result; + } + } + + return InteractionResult.PASS; + } + ); + + InteractionResult interact(Player player, Level level, InteractionHand hand, BlockPos pos, Direction direction); +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyAttackEntityCallback.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyAttackEntityCallback.java new file mode 100644 index 00000000..1f97cc31 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyAttackEntityCallback.java @@ -0,0 +1,44 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.EntityHitResult; +import org.jetbrains.annotations.Nullable; + +/** + * Callback for left-clicking ("attacking") an entity. + * Is hooked in before the spectator check, so make sure to check for the player's game mode as well! + * + *

Upon return: + *

  • SUCCESS cancels further processing and, on the client, sends a packet to the server. + *
  • PASS falls back to further processing. + *
  • FAIL cancels further processing and does not send a packet to the server.
+ */ +public interface ProxyAttackEntityCallback { + Event EVENT = EventFactory.createArrayBacked( + ProxyAttackEntityCallback.class, (listeners) -> (player, level, hand, entity, hitResult) -> { + for (ProxyAttackEntityCallback event : listeners) { + InteractionResult result = event.interact(player, level, hand, entity, hitResult); + + if (result != InteractionResult.PASS) { + return result; + } + } + + return InteractionResult.PASS; + } + ); + + InteractionResult interact( + Player player, + Level level, + InteractionHand hand, + Entity entity, + @Nullable EntityHitResult hitResult + ); +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyCommandRegistrationCallback.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyCommandRegistrationCallback.java new file mode 100644 index 00000000..06cd8b65 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyCommandRegistrationCallback.java @@ -0,0 +1,25 @@ +package me.alexdevs.solstice.api.events.proxy; + +import com.mojang.brigadier.CommandDispatcher; +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.commands.CommandBuildContext; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; + +public interface ProxyCommandRegistrationCallback { + Event EVENT = EventFactory.createArrayBacked( + ProxyCommandRegistrationCallback.class, callbacks -> (dispatcher, buildContext, selection) -> { + for (var callback : callbacks) { + callback.onRegister(dispatcher, buildContext, selection); + } + } + ); + + void onRegister( + CommandDispatcher dispatcher, + CommandBuildContext buildContext, + Commands.CommandSelection selection + ); +} + diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyEntitySleepEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyEntitySleepEvents.java new file mode 100644 index 00000000..32070a7c --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyEntitySleepEvents.java @@ -0,0 +1,99 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; + +public class ProxyEntitySleepEvents { + /** + * An event that is called when an entity stops sleeping and wakes up. + */ + public static final Event STOP_SLEEPING = EventFactory.createArrayBacked( + StopSleeping.class, callbacks -> (entity, sleepingPos) -> { + for (StopSleeping callback : callbacks) { + callback.onStopSleeping(entity, sleepingPos); + } + } + ); + + /** + * An event that checks whether the current time of day is valid for sleeping. + * + *

Note that if sleeping during day time is allowed, the game will still reset the time to 0 if the usual + * conditions are met, unless forbidden with {@link #ALLOW_RESETTING_TIME}. + */ + public static final Event ALLOW_SLEEP_TIME = EventFactory.createArrayBacked( + AllowSleepTime.class, callbacks -> (player, sleepingPos, vanillaResult) -> { + for (AllowSleepTime callback : callbacks) { + InteractionResult result = callback.allowSleepTime(player, sleepingPos, vanillaResult); + + if (result != InteractionResult.PASS) { + return result; + } + } + + return InteractionResult.PASS; + } + ); + + /** + * An event that checks whether a sleeping player counts into skipping the current day and resetting the time to 0. + * + *

When this event is called, all vanilla time resetting checks have already succeeded, i.e. this event + * is used in addition to vanilla checks. + */ + public static final Event ALLOW_RESETTING_TIME = EventFactory.createArrayBacked( + AllowResettingTime.class, callbacks -> player -> { + for (AllowResettingTime callback : callbacks) { + if (!callback.allowResettingTime(player)) { + return false; + } + } + + return true; + } + ); + + @FunctionalInterface + public interface StopSleeping { + /** + * Called when an entity stops sleeping and wakes up. + * + * @param entity the sleeping entity + * @param sleepingPos the {@linkplain LivingEntity#getSleepingPos() sleeping position} of the entity + */ + void onStopSleeping(LivingEntity entity, BlockPos sleepingPos); + } + + @FunctionalInterface + public interface AllowSleepTime { + /** + * Checks whether the current time of day is valid for sleeping. + * + *

Non-{@linkplain InteractionResult#PASS passing} return values cancel further callbacks. + * + * @param player the sleeping player + * @param sleepingPos the (possibly still unset) {@linkplain LivingEntity#getSleepingPos() sleeping position} of the player + * @param vanillaResult {@code true} if vanilla allows the time, {@code false} otherwise + * + * @return {@link InteractionResult#SUCCESS} if the time is valid, {@link InteractionResult#FAIL} if it's not, + * {@link InteractionResult#PASS} to fall back to other callbacks + */ + InteractionResult allowSleepTime(Player player, BlockPos sleepingPos, boolean vanillaResult); + } + + @FunctionalInterface + public interface AllowResettingTime { + /** + * Checks whether a sleeping player counts into skipping the current day and resetting the time to 0. + * + * @param player the sleeping player + * + * @return {@code true} if allowed, {@code false} otherwise + */ + boolean allowResettingTime(Player player); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyPlayerBlockBreakEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyPlayerBlockBreakEvents.java new file mode 100644 index 00000000..b34c6fe3 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyPlayerBlockBreakEvents.java @@ -0,0 +1,64 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +/** + * Contains server side events triggered by block breaking. + */ +public final class ProxyPlayerBlockBreakEvents { + private ProxyPlayerBlockBreakEvents() { + } + + /** + * Callback before a block is broken. + * Only called on the server; however, updates are synced with the client. + * + *

If any listener cancels a block breaking action, that block breaking + * action is canceled and CANCELED event is fired. Otherwise, the + * AFTER event is fired.

+ */ + public static final Event BEFORE = EventFactory.createArrayBacked( + Before.class, (listeners) -> (level, player, pos, state, entity) -> { + for (Before event : listeners) { + boolean result = event.beforeBlockBreak(level, player, pos, state, entity); + + if (!result) { + return false; + } + } + + return true; + } + ); + + @FunctionalInterface + public interface Before { + /** + * Called before a block is broken and allows cancelling the block breaking. + * + *

Implementations should not modify the level or assume the block break has completed or failed.

+ * + * @param level the level in which the block is broken + * @param player the player breaking the block + * @param pos the position at which the block is broken + * @param state the block state before the block is broken + * @param blockEntity the block entity before the block is broken, can be {@code null} + * + * @return {@code false} to cancel block breaking action, or {@code true} to pass to next listener + */ + boolean beforeBlockBreak( + Level level, + Player player, + BlockPos pos, + BlockState state, + @Nullable BlockEntity blockEntity + ); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerLifecycleEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerLifecycleEvents.java new file mode 100644 index 00000000..136bfb8a --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerLifecycleEvents.java @@ -0,0 +1,59 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.server.MinecraftServer; + +public class ProxyServerLifecycleEvents { + public static final Event SERVER_STARTING = EventFactory.createArrayBacked( + Starting.class, callbacks -> (server) -> { + for (var callback : callbacks) { + callback.onServerStarting(server); + } + } + ); + + public static final Event SERVER_STARTED = EventFactory.createArrayBacked( + Started.class, callbacks -> (server) -> { + for (var callback : callbacks) { + callback.onServerStarted(server); + } + } + ); + + public static final Event SERVER_STOPPING = EventFactory.createArrayBacked( + Stopping.class, callbacks -> (server) -> { + for (var callback : callbacks) { + callback.onServerStopping(server); + } + } + ); + + public static final Event SERVER_STOPPED = EventFactory.createArrayBacked( + Stopped.class, callbacks -> (server) -> { + for (var callback : callbacks) { + callback.onServerStopped(server); + } + } + ); + + @FunctionalInterface + public interface Starting { + void onServerStarting(MinecraftServer server); + } + + @FunctionalInterface + public interface Started { + void onServerStarted(MinecraftServer server); + } + + @FunctionalInterface + public interface Stopping { + void onServerStopping(MinecraftServer server); + } + + @FunctionalInterface + public interface Stopped { + void onServerStopped(MinecraftServer server); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerLivingEntityEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerLivingEntityEvents.java new file mode 100644 index 00000000..eba7fc51 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerLivingEntityEvents.java @@ -0,0 +1,30 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.LivingEntity; + +public class ProxyServerLivingEntityEvents { + /** + * An event that is called when a living entity dies. + */ + public static final Event AFTER_DEATH = EventFactory.createArrayBacked( + AfterDeath.class, callbacks -> (entity, damageSource) -> { + for (AfterDeath callback : callbacks) { + callback.afterDeath(entity, damageSource); + } + } + ); + + @FunctionalInterface + public interface AfterDeath { + /** + * Called when a living entity dies. The death cannot be canceled at this point. + * + * @param entity the entity + * @param damageSource the source of the fatal damage + */ + void afterDeath(LivingEntity entity, DamageSource damageSource); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerMessageEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerMessageEvents.java new file mode 100644 index 00000000..323b021b --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerMessageEvents.java @@ -0,0 +1,72 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.network.chat.ChatType; +import net.minecraft.network.chat.PlayerChatMessage; +import net.minecraft.server.level.ServerPlayer; + +public class ProxyServerMessageEvents { + /** + * An event triggered when the server broadcasts a chat message sent by a player, + * typically from a client GUI or a player-executed command. Mods can use this to block + * the message. + * + *

If a listener returned {@code false}, the message will not be broadcast, + * the remaining listeners will not be called (if any), and {@link #CHAT_MESSAGE} + * event will not be triggered. + */ + public static final Event ALLOW_CHAT_MESSAGE = EventFactory.createArrayBacked( + AllowChatMessage.class, handlers -> (message, sender, params) -> { + for (AllowChatMessage handler : handlers) { + if (!handler.allowChatMessage(message, sender, params)) return false; + } + + return true; + } + ); + + /** + * An event triggered when the server broadcasts a chat message sent by a player, typically + * from a client GUI or a player-executed command. Is not called when {@linkplain + * #ALLOW_CHAT_MESSAGE chat messages are blocked}. + */ + public static final Event CHAT_MESSAGE = EventFactory.createArrayBacked( + ChatMessage.class, handlers -> (message, sender, params) -> { + for (ChatMessage handler : handlers) { + handler.onChatMessage(message, sender, params); + } + } + ); + + @FunctionalInterface + public interface AllowChatMessage { + /** + * Called when the server broadcasts a chat message sent by a player, typically + * from a client GUI or a player-executed command. Returning {@code false} + * prevents the message from being broadcast and the {@link #CHAT_MESSAGE} event + * from triggering. + * + * @param message the broadcast message with message decorators applied; use {@code message.getContent()} to get the text + * @param sender the player that sent the message + * @param params the {@link ChatType.Bound} + * + * @return {@code true} if the message should be broadcast, otherwise {@code false} + */ + boolean allowChatMessage(PlayerChatMessage message, ServerPlayer sender, ChatType.Bound params); + } + + @FunctionalInterface + public interface ChatMessage { + /** + * Called when the server broadcasts a chat message sent by a player, typically + * from a client GUI or a player-executed command. Is not called when {@linkplain + * #ALLOW_CHAT_MESSAGE chat messages are blocked}. + * + * @param message the broadcast message with message decorators applied; use {@code message.getContent()} to get the text + * @param sender the player that sent the message + * @param params the {@link ChatType.Bound} + */ + void onChatMessage(PlayerChatMessage message, ServerPlayer sender, ChatType.Bound params); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerPlayConnectionEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerPlayConnectionEvents.java new file mode 100644 index 00000000..f9c38bb5 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerPlayConnectionEvents.java @@ -0,0 +1,34 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; + +public class ProxyServerPlayConnectionEvents { + public static final Event JOIN = EventFactory.createArrayBacked( + Join.class, callbacks -> (player, server) -> { + for (Join callback : callbacks) { + callback.onJoin(player, server); + } + } + ); + + public static final Event DISCONNECT = EventFactory.createArrayBacked( + Disconnect.class, callbacks -> (player, server) -> { + for (Disconnect callback : callbacks) { + callback.onDisconnect(player, server); + } + } + ); + + @FunctionalInterface + public interface Join { + void onJoin(ServerPlayer player, MinecraftServer server); + } + + @FunctionalInterface + public interface Disconnect { + void onDisconnect(ServerPlayer player, MinecraftServer server); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerPlayerEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerPlayerEvents.java new file mode 100644 index 00000000..72396fe2 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerPlayerEvents.java @@ -0,0 +1,32 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.server.level.ServerPlayer; + +public class ProxyServerPlayerEvents { + /** + * An event that is called after a player has been respawned. + * + *

Mods may use this event for reference clean up on the old player. + */ + public static final Event AFTER_RESPAWN = EventFactory.createArrayBacked( + ProxyServerPlayerEvents.AfterRespawn.class, callbacks -> (oldPlayer, newPlayer, alive) -> { + for (AfterRespawn callback : callbacks) { + callback.afterRespawn(oldPlayer, newPlayer, alive); + } + } + ); + + @FunctionalInterface + public interface AfterRespawn { + /** + * Called after player a has been respawned. + * + * @param oldPlayer the old player + * @param newPlayer the new player + * @param alive whether the old player is still alive + */ + void afterRespawn(ServerPlayer oldPlayer, ServerPlayer newPlayer, boolean alive); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerTickEvents.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerTickEvents.java new file mode 100644 index 00000000..a2b5d184 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyServerTickEvents.java @@ -0,0 +1,33 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.server.MinecraftServer; + +public class ProxyServerTickEvents { + public static final Event START_SERVER_TICK = EventFactory.createArrayBacked( + Begin.class, callbacks -> (server) -> { + for (var callback : callbacks) { + callback.onStartTick(server); + } + } + ); + + public static final Event END_SERVER_TICK = EventFactory.createArrayBacked( + End.class, callbacks -> (server) -> { + for (var callback : callbacks) { + callback.onEndTick(server); + } + } + ); + + @FunctionalInterface + public interface Begin { + void onStartTick(MinecraftServer server); + } + + @FunctionalInterface + public interface End { + void onEndTick(MinecraftServer server); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseBlockCallback.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseBlockCallback.java new file mode 100644 index 00000000..1ef4549f --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseBlockCallback.java @@ -0,0 +1,36 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; + +/** + * Callback for right-clicking ("using") a block. + * Is hooked in before the spectator check, so make sure to check for the player's game mode as well! + * + *

Upon return: + *

  • SUCCESS cancels further processing and, on the client, sends a packet to the server. + *
  • PASS falls back to further processing. + *
  • FAIL cancels further processing and does not send a packet to the server.
+ */ +public interface ProxyUseBlockCallback { + Event EVENT = EventFactory.createArrayBacked( + ProxyUseBlockCallback.class, (listeners) -> (player, level, hand, hitResult) -> { + for (ProxyUseBlockCallback event : listeners) { + InteractionResult result = event.interact(player, level, hand, hitResult); + + if (result != InteractionResult.PASS) { + return result; + } + } + + return InteractionResult.PASS; + } + ); + + InteractionResult interact(Player player, Level level, InteractionHand hand, BlockHitResult hitResult); +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseEntityCallback.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseEntityCallback.java new file mode 100644 index 00000000..e223ff80 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseEntityCallback.java @@ -0,0 +1,57 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.EntityHitResult; +import org.jetbrains.annotations.Nullable; + +/** + * Callback for right-clicking ("using") an entity. + * Is hooked in before the spectator check, so make sure to check for the player's game mode as well! + * + *

On the logical client, the return values have the following meaning: + *

    + *
  • SUCCESS cancels further processing, causes a hand swing, and sends a packet to the server.
  • + *
  • CONSUME cancels further processing, and sends a packet to the server. It does NOT cause a hand swing.
  • + *
  • PASS falls back to further processing.
  • + *
  • FAIL cancels further processing and does not send a packet to the server.
  • + *
+ * + *

On the logical server, the return values have the following meaning: + *

    + *
  • PASS falls back to further processing.
  • + *
  • Any other value cancels further processing.
  • + *
+ * + *

Note that on the server, the {@link EntityHitResult} may be {@code null} if the client successfully interacted using + * the {@linkplain Player#interactOn(Entity, InteractionHand) position-less overload}. + * On the client, the {@link EntityHitResult} will never be null. + */ +public interface ProxyUseEntityCallback { + Event EVENT = EventFactory.createArrayBacked( + ProxyUseEntityCallback.class, (listeners) -> (player, level, hand, entity, hitResult) -> { + for (ProxyUseEntityCallback event : listeners) { + InteractionResult result = event.interact(player, level, hand, entity, hitResult); + + if (result != InteractionResult.PASS) { + return result; + } + } + + return InteractionResult.PASS; + } + ); + + InteractionResult interact( + Player player, + Level level, + InteractionHand hand, + Entity entity, + @Nullable EntityHitResult hitResult + ); +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseItemCallback.java b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseItemCallback.java new file mode 100644 index 00000000..6a981f80 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/events/proxy/ProxyUseItemCallback.java @@ -0,0 +1,37 @@ +package me.alexdevs.solstice.api.events.proxy; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +/** + * Callback for right-clicking ("using") an item. + * Is hooked in before the spectator check, so make sure to check for the player's game mode as well! + * + *

Upon return: + *

  • SUCCESS cancels further processing and, on the client, sends a packet to the server. + *
  • PASS falls back to further processing. + *
  • FAIL cancels further processing and does not send a packet to the server.
+ */ +public interface ProxyUseItemCallback { + Event EVENT = EventFactory.createArrayBacked( + ProxyUseItemCallback.class, listeners -> (player, level, hand) -> { + for (ProxyUseItemCallback event : listeners) { + InteractionResultHolder result = event.interact(player, level, hand); + + if (result.getResult() != InteractionResult.PASS) { + return result; + } + } + + return InteractionResultHolder.pass(ItemStack.EMPTY); + } + ); + + InteractionResultHolder interact(Player player, Level level, InteractionHand hand); +} diff --git a/src/main/java/me/alexdevs/solstice/api/module/Debug.java b/common/src/main/java/me/alexdevs/solstice/api/module/Debug.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/module/Debug.java rename to common/src/main/java/me/alexdevs/solstice/api/module/Debug.java diff --git a/src/main/java/me/alexdevs/solstice/api/module/ModCommand.java b/common/src/main/java/me/alexdevs/solstice/api/module/ModCommand.java similarity index 93% rename from src/main/java/me/alexdevs/solstice/api/module/ModCommand.java rename to common/src/main/java/me/alexdevs/solstice/api/module/ModCommand.java index 9cf30731..39b81b81 100644 --- a/src/main/java/me/alexdevs/solstice/api/module/ModCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/api/module/ModCommand.java @@ -3,10 +3,11 @@ import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.tree.LiteralCommandNode; -import me.lucko.fabric.api.permissions.v0.Permissions; +import me.alexdevs.solstice.api.permissions.Permissions; import net.minecraft.commands.CommandBuildContext; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; + import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; @@ -25,7 +26,11 @@ public ModCommand(T module) { this.module = module; } - public void register(CommandDispatcher dispatcher, CommandBuildContext commandRegistry, Commands.CommandSelection environment) { + public void register( + CommandDispatcher dispatcher, + CommandBuildContext commandRegistry, + Commands.CommandSelection environment + ) { this.dispatcher = dispatcher; this.commandRegistry = commandRegistry; this.environment = environment; @@ -97,6 +102,7 @@ public Predicate require(String subNode, boolean defaultValu * Generate the command node, this method gets called for every name. * * @param name Command name + * * @return Command node */ public abstract LiteralArgumentBuilder command(String name); diff --git a/src/main/java/me/alexdevs/solstice/api/module/ModuleBase.java b/common/src/main/java/me/alexdevs/solstice/api/module/ModuleBase.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/module/ModuleBase.java rename to common/src/main/java/me/alexdevs/solstice/api/module/ModuleBase.java diff --git a/src/main/java/me/alexdevs/solstice/api/module/ModuleEntrypoint.java b/common/src/main/java/me/alexdevs/solstice/api/module/ModuleEntrypoint.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/module/ModuleEntrypoint.java rename to common/src/main/java/me/alexdevs/solstice/api/module/ModuleEntrypoint.java diff --git a/src/main/java/me/alexdevs/solstice/api/module/Utils.java b/common/src/main/java/me/alexdevs/solstice/api/module/Utils.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/module/Utils.java rename to common/src/main/java/me/alexdevs/solstice/api/module/Utils.java diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/BooleanFunction.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/BooleanFunction.java new file mode 100644 index 00000000..17205f7e --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/BooleanFunction.java @@ -0,0 +1,18 @@ +package me.alexdevs.solstice.api.permissions; + +/** + * Represents a function that accepts a boolean-valued argument and produces a result. + * + *

This is the {@code boolean}-consuming primitive specialization for {@link java.util.function.Function}. + */ +@FunctionalInterface +public interface BooleanFunction { + /** + * Applies this function to the given argument. + * + * @param value the function argument + * @return the function result + */ + R apply(boolean value); +} + diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/OfflineOptionRequestEvent.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/OfflineOptionRequestEvent.java new file mode 100644 index 00000000..c5194bb6 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/OfflineOptionRequestEvent.java @@ -0,0 +1,33 @@ +package me.alexdevs.solstice.api.permissions; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +/** + * Simple option request event for (potentially) offline players. + */ +public interface OfflineOptionRequestEvent { + + Event EVENT = EventFactory.createArrayBacked( + OfflineOptionRequestEvent.class, (callbacks) -> (uuid, key) -> { + CompletableFuture> res = CompletableFuture.completedFuture(null); + for (OfflineOptionRequestEvent callback : callbacks) { + res = res.thenCompose(value -> { + if (value.isPresent()) { + return CompletableFuture.completedFuture(value); + } + return callback.onOptionRequest(uuid, key); + }); + } + return res; + } + ); + + @NotNull CompletableFuture> onOptionRequest(@NotNull UUID uuid, @NotNull String key); + +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/OfflinePermissionCheckEvent.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/OfflinePermissionCheckEvent.java new file mode 100644 index 00000000..500df5bd --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/OfflinePermissionCheckEvent.java @@ -0,0 +1,33 @@ +package me.alexdevs.solstice.api.permissions; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +/** + * Simple permissions check event for (potentially) offline players. + */ +public interface OfflinePermissionCheckEvent { + + Event EVENT = EventFactory.createArrayBacked( + OfflinePermissionCheckEvent.class, (callbacks) -> (uuid, permission) -> { + CompletableFuture res = CompletableFuture.completedFuture(TriState.DEFAULT); + for (OfflinePermissionCheckEvent callback : callbacks) { + res = res.thenCompose(triState -> { + if (triState != TriState.DEFAULT) { + return CompletableFuture.completedFuture(triState); + } + return callback.onPermissionCheck(uuid, permission); + }); + } + return res; + } + ); + + @NotNull CompletableFuture onPermissionCheck(@NotNull UUID uuid, @NotNull String permission); + +} + diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/OptionRequestEvent.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/OptionRequestEvent.java new file mode 100644 index 00000000..475f5eed --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/OptionRequestEvent.java @@ -0,0 +1,30 @@ +package me.alexdevs.solstice.api.permissions; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.commands.CommandSource; +import net.minecraft.commands.SharedSuggestionProvider; +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; + +/** + * Simple option request event for {@link CommandSource}s. + */ +public interface OptionRequestEvent { + + Event EVENT = EventFactory.createArrayBacked( + OptionRequestEvent.class, (callbacks) -> (source, key) -> { + for (OptionRequestEvent callback : callbacks) { + Optional value = callback.onOptionRequest(source, key); + if (value.isPresent()) { + return value; + } + } + return Optional.empty(); + } + ); + + @NotNull Optional onOptionRequest(@NotNull SharedSuggestionProvider source, @NotNull String key); +} + diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/Options.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/Options.java new file mode 100644 index 00000000..6ad14065 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/Options.java @@ -0,0 +1,400 @@ +package me.alexdevs.solstice.api.permissions; + +import com.mojang.authlib.GameProfile; +import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.world.entity.Entity; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + +/** + * A simple options (metadata) API. + */ +public interface Options { + + /** + * Gets the value of an option for the given source. + * + * @param source the source + * @param key the option key + * + * @return the option value + */ + static @NotNull Optional get(@NotNull SharedSuggestionProvider source, @NotNull String key) { + Objects.requireNonNull(source, "source"); + Objects.requireNonNull(key, "key"); + return OptionRequestEvent.EVENT.invoker().onOptionRequest(source, key); + } + + /** + * Gets the value of an option for the given source, falling back to the {@code defaultValue} + * if nothing is returned from the provider. + * + * @param source the source + * @param key the option key + * @param defaultValue the default value to use if nothing is returned + * + * @return the option value + */ + @Contract("_, _, !null -> !null") + static String get(@NotNull SharedSuggestionProvider source, @NotNull String key, String defaultValue) { + return get(source, key).orElse(defaultValue); + } + + /** + * Gets the value of an option for the given source, and runs it through the given {@code valueTransformer}. + * + *

If nothing is returned from the provider, an {@link Optional#empty() empty optional} is returned. + * (the transformer will never be passed a null argument)

+ * + *

The transformer is allowed to throw {@link IllegalArgumentException} or return null. This + * will also result in an {@link Optional#empty() empty optional} being returned.

+ * + *

For example, to parse and return an integer meta value, use:

+ *

+     *     get(source, "my-int-value", Integer::parseInt).orElse(0);
+     * 
+ * + * @param source the source + * @param key the option key + * @param valueTransformer the transformer used to transform the value + * @param the type of the transformed result + * + * @return the transformed option value + */ + static @NotNull Optional get( + @NotNull SharedSuggestionProvider source, + @NotNull String key, + @NotNull Function valueTransformer + ) { + return get(source, key).flatMap(value -> { + try { + return Optional.ofNullable(valueTransformer.apply(value)); + } catch (IllegalArgumentException e) { + return Optional.empty(); + } + }); + } + + /** + * Gets the value of an option for the given source, runs it through the given {@code valueTransformer}, + * and falls back to the {@code defaultValue} if nothing is returned. + * + *

If nothing is returned from the provider, the {@code defaultValue} is returned. + * (the transformer will never be passed a null argument)

+ * + *

The transformer is allowed to throw {@link IllegalArgumentException} or return null. This + * will also result in the {@code defaultValue} being returned.

+ * + *

For example, to parse and return an integer meta value, use:

+ *

+     *     get(source, "my-int-value", 0, Integer::parseInt);
+     * 
+ * + * @param source the source + * @param key the option key + * @param defaultValue the default value + * @param valueTransformer the transformer used to transform the value + * @param the type of the transformed result + * + * @return the transformed option value + */ + @Contract("_, _, !null, _ -> !null") + static T get( + @NotNull SharedSuggestionProvider source, + @NotNull String key, + T defaultValue, + @NotNull Function valueTransformer + ) { + return Options.get(source, key, valueTransformer).orElse(defaultValue); + } + + /** + * Gets the value of an option for the given entity. + * + * @param entity the entity + * @param key the option key + * + * @return the option value + */ + static @NotNull Optional get(@NotNull Entity entity, @NotNull String key) { + Objects.requireNonNull(entity, "entity"); + return get(Util.commandSourceFromEntity(entity), key); + } + + /** + * Gets the value of an option for the given entity, falling back to the {@code defaultValue} + * if nothing is returned from the provider. + * + * @param entity the entity + * @param key the option key + * @param defaultValue the default value to use if nothing is returned + * + * @return the option value + */ + @Contract("_, _, !null -> !null") + static String get(@NotNull Entity entity, @NotNull String key, String defaultValue) { + Objects.requireNonNull(entity, "entity"); + return get(Util.commandSourceFromEntity(entity), key, defaultValue); + } + + /** + * Gets the value of an option for the given entity, and runs it through the given {@code valueTransformer}. + * + *

If nothing is returned from the provider, an {@link Optional#empty() empty optional} is returned. + * (the transformer will never be passed a null argument)

+ * + *

The transformer is allowed to throw {@link IllegalArgumentException} or return null. This + * will also result in an {@link Optional#empty() empty optional} being returned.

+ * + *

For example, to parse and return an integer meta value, use:

+ *

+     *     get(entity, "my-int-value", Integer::parseInt).orElse(0);
+     * 
+ * + * @param entity the entity + * @param key the option key + * @param valueTransformer the transformer used to transform the value + * @param the type of the transformed result + * + * @return the transformed option value + */ + static @NotNull Optional get( + @NotNull Entity entity, + @NotNull String key, + @NotNull Function valueTransformer + ) { + Objects.requireNonNull(entity, "entity"); + return get(Util.commandSourceFromEntity(entity), key, valueTransformer); + } + + /** + * Gets the value of an option for the given entity, runs it through the given {@code valueTransformer}, + * and falls back to the {@code defaultValue} if nothing is returned. + * + *

If nothing is returned from the provider, the {@code defaultValue} is returned. + * (the transformer will never be passed a null argument)

+ * + *

The transformer is allowed to throw {@link IllegalArgumentException} or return null. This + * will also result in the {@code defaultValue} being returned.

+ * + *

For example, to parse and return an integer meta value, use:

+ *

+     *     get(entity, "my-int-value", 0, Integer::parseInt);
+     * 
+ * + * @param entity the entity + * @param key the option key + * @param defaultValue the default value + * @param valueTransformer the transformer used to transform the value + * @param the type of the transformed result + * + * @return the transformed option value + */ + @Contract("_, _, !null, _ -> !null") + static T get( + @NotNull Entity entity, + @NotNull String key, + T defaultValue, + @NotNull Function valueTransformer + ) { + Objects.requireNonNull(entity, "entity"); + return get(Util.commandSourceFromEntity(entity), key, defaultValue, valueTransformer); + } + + /** + * Gets the value of an option for the given (potentially) offline player. + * + * @param uuid the uuid of the player + * @param key the option key + * + * @return the option value + */ + static @NotNull CompletableFuture> get(@NotNull UUID uuid, @NotNull String key) { + Objects.requireNonNull(uuid, "uuid"); + Objects.requireNonNull(key, "key"); + return OfflineOptionRequestEvent.EVENT.invoker().onOptionRequest(uuid, key); + } + + /** + * Gets the value of an option for the given player, falling back to the {@code defaultValue} + * if nothing is returned from the provider. + * + * @param uuid the uuid of the player + * @param key the option key + * @param defaultValue the default value to use if nothing is returned + * + * @return the option value + */ + @Contract("_, _, !null -> !null") + static CompletableFuture get(@NotNull UUID uuid, @NotNull String key, String defaultValue) { + return get(uuid, key).thenApply(opt -> opt.orElse(defaultValue)); + } + + /** + * Gets the value of an option for the given player, and runs it through the given {@code valueTransformer}. + * + *

If nothing is returned from the provider, an {@link Optional#empty() empty optional} is returned. + * (the transformer will never be passed a null argument)

+ * + *

The transformer is allowed to throw {@link IllegalArgumentException} or return null. This + * will also result in an {@link Optional#empty() empty optional} being returned.

+ * + *

For example, to parse and return an integer meta value, use:

+ *

+     *     get(uuid, "my-int-value", Integer::parseInt).orElse(0);
+     * 
+ * + * @param uuid the uuid of the player + * @param key the option key + * @param valueTransformer the transformer used to transform the value + * @param the type of the transformed result + * + * @return the transformed option value + */ + static @NotNull CompletableFuture> get( + @NotNull UUID uuid, + @NotNull String key, + @NotNull Function valueTransformer + ) { + return get(uuid, key).thenApply(opt -> opt.flatMap(value -> { + try { + return Optional.ofNullable(valueTransformer.apply(value)); + } catch (IllegalArgumentException e) { + return Optional.empty(); + } + })); + } + + /** + * Gets the value of an option for the given player, runs it through the given {@code valueTransformer}, + * and falls back to the {@code defaultValue} if nothing is returned. + * + *

If nothing is returned from the provider, the {@code defaultValue} is returned. + * (the transformer will never be passed a null argument)

+ * + *

The transformer is allowed to throw {@link IllegalArgumentException} or return null. This + * will also result in the {@code defaultValue} being returned.

+ * + *

For example, to parse and return an integer meta value, use:

+ *

+     *     get(uuid, "my-int-value", 0, Integer::parseInt);
+     * 
+ * + * @param uuid the uuid of the player + * @param key the option key + * @param defaultValue the default value + * @param valueTransformer the transformer used to transform the value + * @param the type of the transformed result + * + * @return the transformed option value + */ + @Contract("_, _, !null, _ -> !null") + static CompletableFuture get( + @NotNull UUID uuid, + @NotNull String key, + T defaultValue, + @NotNull Function valueTransformer + ) { + return Options.get(uuid, key, valueTransformer).thenApply(opt -> opt.orElse(defaultValue)); + } + + /** + * Gets the value of an option for the given (potentially) offline player. + * + * @param profile the player profile + * @param key the option key + * + * @return the option value + */ + static @NotNull CompletableFuture> get(@NotNull GameProfile profile, @NotNull String key) { + Objects.requireNonNull(profile, "profile"); + return get(profile.getId(), key); + } + + /** + * Gets the value of an option for the given player, falling back to the {@code defaultValue} + * if nothing is returned from the provider. + * + * @param profile the player profile + * @param key the option key + * @param defaultValue the default value to use if nothing is returned + * + * @return the option value + */ + @Contract("_, _, !null -> !null") + static CompletableFuture get(@NotNull GameProfile profile, @NotNull String key, String defaultValue) { + Objects.requireNonNull(profile, "profile"); + return get(profile.getId(), key, defaultValue); + } + + /** + * Gets the value of an option for the given player, and runs it through the given {@code valueTransformer}. + * + *

If nothing is returned from the provider, an {@link Optional#empty() empty optional} is returned. + * (the transformer will never be passed a null argument)

+ * + *

The transformer is allowed to throw {@link IllegalArgumentException} or return null. This + * will also result in an {@link Optional#empty() empty optional} being returned.

+ * + *

For example, to parse and return an integer meta value, use:

+ *

+     *     get(uuid, "my-int-value", Integer::parseInt).orElse(0);
+     * 
+ * + * @param profile the player profile + * @param key the option key + * @param valueTransformer the transformer used to transform the value + * @param the type of the transformed result + * + * @return the transformed option value + */ + static @NotNull CompletableFuture> get( + @NotNull GameProfile profile, + @NotNull String key, + @NotNull Function valueTransformer + ) { + Objects.requireNonNull(profile, "profile"); + return get(profile.getId(), key, valueTransformer); + } + + /** + * Gets the value of an option for the given player, runs it through the given {@code valueTransformer}, + * and falls back to the {@code defaultValue} if nothing is returned. + * + *

If nothing is returned from the provider, the {@code defaultValue} is returned. + * (the transformer will never be passed a null argument)

+ * + *

The transformer is allowed to throw {@link IllegalArgumentException} or return null. This + * will also result in the {@code defaultValue} being returned.

+ * + *

For example, to parse and return an integer meta value, use:

+ *

+     *     get(uuid, "my-int-value", 0, Integer::parseInt);
+     * 
+ * + * @param profile the player profile + * @param key the option key + * @param defaultValue the default value + * @param valueTransformer the transformer used to transform the value + * @param the type of the transformed result + * + * @return the transformed option value + */ + @Contract("_, _, !null, _ -> !null") + static CompletableFuture get( + @NotNull GameProfile profile, + @NotNull String key, + T defaultValue, + @NotNull Function valueTransformer + ) { + Objects.requireNonNull(profile, "profile"); + return get(profile.getId(), key, defaultValue, valueTransformer); + } + +} \ No newline at end of file diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/PermissionCheckEvent.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/PermissionCheckEvent.java new file mode 100644 index 00000000..99e1655c --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/PermissionCheckEvent.java @@ -0,0 +1,28 @@ +package me.alexdevs.solstice.api.permissions; + +import me.alexdevs.solstice.api.events.backend.Event; +import me.alexdevs.solstice.api.events.backend.EventFactory; +import net.minecraft.commands.CommandSource; +import net.minecraft.commands.SharedSuggestionProvider; +import org.jetbrains.annotations.NotNull; + +/** + * Simple permissions check event for {@link CommandSource}s. + */ +public interface PermissionCheckEvent { + + Event EVENT = EventFactory.createArrayBacked( + PermissionCheckEvent.class, (callbacks) -> (source, permission) -> { + for (PermissionCheckEvent callback : callbacks) { + TriState state = callback.onPermissionCheck(source, permission); + if (state != TriState.DEFAULT) { + return state; + } + } + return TriState.DEFAULT; + } + ); + + @NotNull TriState onPermissionCheck(@NotNull SharedSuggestionProvider source, @NotNull String permission); + +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/Permissions.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/Permissions.java new file mode 100644 index 00000000..76d73a61 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/Permissions.java @@ -0,0 +1,277 @@ +package me.alexdevs.solstice.api.permissions; + +import com.mojang.authlib.GameProfile; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.entity.Entity; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.function.BooleanSupplier; +import java.util.function.Predicate; + +/** + * A simple permissions API. + */ +public interface Permissions { + + /** + * Gets the {@link TriState state} of a {@code permission} for the given source. + * + * @param source the source + * @param permission the permission + * + * @return the state of the permission + */ + static @NotNull TriState getPermissionValue(@NotNull SharedSuggestionProvider source, @NotNull String permission) { + Objects.requireNonNull(source, "source"); + Objects.requireNonNull(permission, "permission"); + return PermissionCheckEvent.EVENT.invoker().onPermissionCheck(source, permission); + } + + /** + * Performs a permission check, falling back to the {@code defaultValue} if the resultant + * state is {@link TriState#DEFAULT}. + * + * @param source the source to perform the check for + * @param permission the permission to check + * @param defaultValue the default value to use if nothing has been set + * + * @return the result of the permission check + */ + static boolean check(@NotNull SharedSuggestionProvider source, @NotNull String permission, boolean defaultValue) { + return getPermissionValue(source, permission).orElse(defaultValue); + } + + /** + * Performs a permission check, falling back to requiring the {@code defaultRequiredLevel} + * if the resultant state is {@link TriState#DEFAULT}. + * + * @param source the source to perform the check for + * @param permission the permission to check + * @param defaultRequiredLevel the required permission level to check for as a fallback + * + * @return the result of the permission check + */ + static boolean check( + @NotNull SharedSuggestionProvider source, + @NotNull String permission, + int defaultRequiredLevel + ) { + return getPermissionValue(source, permission).orElseGet(() -> source.hasPermission(defaultRequiredLevel)); + } + + /** + * Performs a permission check, falling back to {@code false} if the resultant state + * is {@link TriState#DEFAULT}. + * + * @param source the source to perform the check for + * @param permission the permission to check + * + * @return the result of the permission check + */ + static boolean check(@NotNull SharedSuggestionProvider source, @NotNull String permission) { + return getPermissionValue(source, permission).orElse(false); + } + + /** + * Creates a predicate which returns the result of performing a permission check, + * falling back to the {@code defaultValue} if the resultant state is {@link TriState#DEFAULT}. + * + * @param permission the permission to check + * @param defaultValue the default value to use if nothing has been set + * + * @return a predicate that will perform the permission check + */ + static @NotNull Predicate require(@NotNull String permission, boolean defaultValue) { + Objects.requireNonNull(permission, "permission"); + return player -> check(player, permission, defaultValue); + } + + /** + * Creates a predicate which returns the result of performing a permission check, + * falling back to requiring the {@code defaultRequiredLevel} if the resultant state is + * {@link TriState#DEFAULT}. + * + * @param permission the permission to check + * @param defaultRequiredLevel the required permission level to check for as a fallback + * + * @return a predicate that will perform the permission check + */ + static @NotNull Predicate require(@NotNull String permission, int defaultRequiredLevel) { + Objects.requireNonNull(permission, "permission"); + return player -> check(player, permission, defaultRequiredLevel); + } + + /** + * Creates a predicate which returns the result of performing a permission check, + * falling back to {@code false} if the resultant state is {@link TriState#DEFAULT}. + * + * @param permission the permission to check + * + * @return a predicate that will perform the permission check + */ + static @NotNull Predicate require(@NotNull String permission) { + Objects.requireNonNull(permission, "permission"); + return player -> check(player, permission); + } + + /** + * Gets the {@link TriState state} of a {@code permission} for the given entity. + * + * @param entity the entity + * @param permission the permission + * + * @return the state of the permission + */ + static @NotNull TriState getPermissionValue(@NotNull Entity entity, @NotNull String permission) { + Objects.requireNonNull(entity, "entity"); + return getPermissionValue(Util.commandSourceFromEntity(entity), permission); + } + + /** + * Performs a permission check, falling back to the {@code defaultValue} if the resultant + * state is {@link TriState#DEFAULT}. + * + * @param entity the entity to perform the check for + * @param permission the permission to check + * @param defaultValue the default value to use if nothing has been set + * + * @return the result of the permission check + */ + static boolean check(@NotNull Entity entity, @NotNull String permission, boolean defaultValue) { + Objects.requireNonNull(entity, "entity"); + return check(Util.commandSourceFromEntity(entity), permission, defaultValue); + } + + /** + * Performs a permission check, falling back to requiring the {@code defaultRequiredLevel} + * if the resultant state is {@link TriState#DEFAULT}. + * + * @param entity the entity to perform the check for + * @param permission the permission to check + * @param defaultRequiredLevel the required permission level to check for as a fallback + * + * @return the result of the permission check + */ + static boolean check(@NotNull Entity entity, @NotNull String permission, int defaultRequiredLevel) { + Objects.requireNonNull(entity, "entity"); + return check(Util.commandSourceFromEntity(entity), permission, defaultRequiredLevel); + } + + /** + * Performs a permission check, falling back to {@code false} if the resultant state + * is {@link TriState#DEFAULT}. + * + * @param entity the entity to perform the check for + * @param permission the permission to check + * + * @return the result of the permission check + */ + static boolean check(@NotNull Entity entity, @NotNull String permission) { + Objects.requireNonNull(entity, "entity"); + return check(Util.commandSourceFromEntity(entity), permission); + } + + /** + * Gets the {@link TriState state} of a {@code permission} for the given (potentially) offline player. + * + * @param uuid the uuid of the player + * @param permission the permission + * + * @return the state of the permission + */ + static @NotNull CompletableFuture getPermissionValue(@NotNull UUID uuid, @NotNull String permission) { + Objects.requireNonNull(uuid, "uuid"); + Objects.requireNonNull(permission, "permission"); + return OfflinePermissionCheckEvent.EVENT.invoker().onPermissionCheck(uuid, permission); + } + + /** + * Performs a permission check, falling back to the {@code defaultValue} if the resultant + * state is {@link TriState#DEFAULT}. + * + * @param uuid the uuid of the player to perform the check for + * @param permission the permission to check + * @param defaultValue the default value to use if nothing has been set + * + * @return the result of the permission check + */ + static CompletableFuture check(@NotNull UUID uuid, @NotNull String permission, boolean defaultValue) { + return getPermissionValue(uuid, permission).thenApplyAsync(state -> state.orElse(defaultValue)); + } + + /** + * Performs a permission check, falling back to {@code false} if the resultant state + * is {@link TriState#DEFAULT}. + * + * @param uuid the uuid of the player to perform the check for + * @param permission the permission to check + * + * @return the result of the permission check + */ + static CompletableFuture check(@NotNull UUID uuid, @NotNull String permission) { + return getPermissionValue(uuid, permission).thenApplyAsync(state -> state.orElse(false)); + } + + /** + * Performs a permission check, falling back to {@code false} if the resultant state + * is {@link TriState#DEFAULT}. + * + * @param profile the player profile to perform the check for + * @param permission the permission to check + * @param defaultValue the default value to use if nothing has been set + * + * @return the result of the permission check + */ + static CompletableFuture check( + @NotNull GameProfile profile, + @NotNull String permission, + boolean defaultValue + ) { + Objects.requireNonNull(profile, "profile"); + return check(profile.getId(), permission, defaultValue); + } + + /** + * Performs a permission check, falling back to {@code false} if the resultant state + * is {@link TriState#DEFAULT}. + * + * @param profile the player profile to perform the check for + * @param permission the permission to check + * + * @return the result of the permission check + */ + static CompletableFuture check(@NotNull GameProfile profile, @NotNull String permission) { + Objects.requireNonNull(profile, "profile"); + return check(profile.getId(), permission); + } + + /** + * Performs a permission check, falling back to requiring the {@code defaultRequiredLevel} + * if the resultant state is {@link TriState#DEFAULT}. + * + * @param profile the player profile to perform the check for + * @param permission the permission to check + * @param defaultRequiredLevel the required permission level to check for as a fallback + * @param server instance to check permission level + * + * @return the result of the permission check + */ + static CompletableFuture check( + @NotNull GameProfile profile, + @NotNull String permission, + int defaultRequiredLevel, + @NotNull MinecraftServer server + ) { + Objects.requireNonNull(profile, "profile"); + Objects.requireNonNull(server, "server"); + BooleanSupplier permissionLevelCheck = () -> server.getProfilePermissions(profile) >= defaultRequiredLevel; + return getPermissionValue(profile.getId(), permission).thenApplyAsync(state -> state.orElseGet( + permissionLevelCheck)); + } + +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/TriState.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/TriState.java new file mode 100644 index 00000000..7f030519 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/TriState.java @@ -0,0 +1,130 @@ +package me.alexdevs.solstice.api.permissions; + +import org.jetbrains.annotations.Nullable; + +import java.util.Objects; +import java.util.Optional; +import java.util.function.BooleanSupplier; +import java.util.function.Supplier; + +/** + * Represents a boolean value which can be true, false or refer to a default value. + */ +public enum TriState { + /** + * Represents the boolean value of {@code false}. + */ + FALSE, + /** + * Represents a value that refers to a "default" value, often as a fallback. + */ + DEFAULT, + /** + * Represents the boolean value of {@code true}. + */ + TRUE; + + /** + * Gets the corresponding tri-state from a boolean value. + * + * @param bool the boolean value + * + * @return {@link TriState#TRUE} or {@link TriState#FALSE} depending on the value of the boolean. + */ + public static TriState of(boolean bool) { + return bool ? TRUE : FALSE; + } + + /** + * Gets a tri-state from a nullable boxed boolean. + * + * @param bool the boolean value + * + * @return {@link TriState#DEFAULT} if {@code null}. + * Otherwise {@link TriState#TRUE} or {@link TriState#FALSE} depending on the value of the boolean. + */ + public static TriState of(@Nullable Boolean bool) { + return bool == null ? DEFAULT : of(bool.booleanValue()); + } + + /** + * Gets the value of the tri-state. + * + * @return true if the tri-state is {@link TriState#TRUE}, + * otherwise false. + */ + public boolean get() { + return this == TRUE; + } + + /** + * Gets the value of the tri-state as a boxed, nullable boolean. + * + * @return {@code null} if {@link TriState#DEFAULT}. + * Otherwise {@code true} if {@link TriState#TRUE} or {@code false} if {@link TriState#FALSE}. + */ + @Nullable + public Boolean getBoxed() { + return this == DEFAULT ? null : this.get(); + } + + /** + * Gets the value of this tri-state. + * If the value is {@link TriState#DEFAULT} then use the supplied value. + * + * @param value the value to fall back to + * + * @return the value of the tri-state or the supplied value if {@link TriState#DEFAULT}. + */ + public boolean orElse(boolean value) { + return this == DEFAULT ? value : this.get(); + } + + /** + * Gets the value of this tri-state. + * If the value is {@link TriState#DEFAULT} then use the supplied value. + * + * @param supplier the supplier used to get the value to fall back to + * + * @return the value of the tri-state or the value of the supplier if the tri-state is {@link TriState#DEFAULT}. + */ + public boolean orElseGet(BooleanSupplier supplier) { + return this == DEFAULT ? supplier.getAsBoolean() : this.get(); + } + + /** + * Maps the boolean value of this tri-state if it is {@link TriState#TRUE} or {@link TriState#FALSE}. + * + * @param mapper the mapper to use + * @param the type of object being supplier by the mapper + * + * @return an optional containing the mapped value; {@link Optional#empty()} if the tri-state is {@link TriState#DEFAULT} or the value provided by the mapper is {@code null}. + */ + public Optional map(BooleanFunction<@Nullable ? extends T> mapper) { + Objects.requireNonNull(mapper, "Mapper function cannot be null"); + + if (this == DEFAULT) { + return Optional.empty(); + } + + return Optional.ofNullable(mapper.apply(this.get())); + } + + /** + * Gets the value of this tri-state, or throws an exception if this tri-state's value is {@link TriState#DEFAULT}. + * + * @param exceptionSupplier the supplying function that produces an exception to be thrown + * @param Type of the exception to be thrown + * + * @return the value + * + * @throws X if the value is {@link TriState#DEFAULT} + */ + public boolean orElseThrow(Supplier exceptionSupplier) throws X { + if (this != DEFAULT) { + return this.get(); + } + + throw exceptionSupplier.get(); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/permissions/Util.java b/common/src/main/java/me/alexdevs/solstice/api/permissions/Util.java new file mode 100644 index 00000000..d81c005a --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/permissions/Util.java @@ -0,0 +1,24 @@ +package me.alexdevs.solstice.api.permissions; + +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; + +class Util { + static CommandSourceStack commandSourceFromEntity(Entity entity) { + if (entity instanceof ServerPlayer) { + return entity.createCommandSourceStack(); + } + Level world = entity.level(); + if (world instanceof ServerLevel) { +// return entity.createCommandSourceStack((ServerLevel) world); + return entity.createCommandSourceStack(); + } else { + throw new IllegalArgumentException("Entity '" + + entity + + "' is not a server entity. Try passing a CommandSource directly instead."); + } + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/platform/ModInfo.java b/common/src/main/java/me/alexdevs/solstice/api/platform/ModInfo.java new file mode 100644 index 00000000..acae1d9a --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/platform/ModInfo.java @@ -0,0 +1,4 @@ +package me.alexdevs.solstice.api.platform; + +public record ModInfo(String displayName, String version) { +} diff --git a/common/src/main/java/me/alexdevs/solstice/api/platform/PlatformHelper.java b/common/src/main/java/me/alexdevs/solstice/api/platform/PlatformHelper.java new file mode 100644 index 00000000..fc00dd8a --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/api/platform/PlatformHelper.java @@ -0,0 +1,34 @@ +package me.alexdevs.solstice.api.platform; + +import org.jetbrains.annotations.ApiStatus; + +import java.nio.file.Path; + +public abstract class PlatformHelper { + private static PlatformHelper INSTANCE; + + public static PlatformHelper get() { + return INSTANCE; + } + + @ApiStatus.Internal + public static void set(PlatformHelper helper) { + INSTANCE = helper; + } + + public abstract void init(); + + public abstract Path getGameDir(); + + public abstract Path getConfigDir(); + + public abstract boolean isModLoaded(String id); + + public abstract boolean isNativeForge(); + + public abstract Object getModContainer(); + + public abstract String getModVersion(); + + public abstract ModInfo getModInfo(String id); +} diff --git a/src/main/java/me/alexdevs/solstice/api/text/Components.java b/common/src/main/java/me/alexdevs/solstice/api/text/Components.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/api/text/Components.java rename to common/src/main/java/me/alexdevs/solstice/api/text/Components.java index f8f5d528..cd2eb326 100644 --- a/src/main/java/me/alexdevs/solstice/api/text/Components.java +++ b/common/src/main/java/me/alexdevs/solstice/api/text/Components.java @@ -3,11 +3,11 @@ import eu.pb4.placeholders.api.TextParserUtils; import eu.pb4.placeholders.api.parsers.NodeParser; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.api.text.parser.MarkdownParser; import me.alexdevs.solstice.core.coreModule.CoreModule; import me.alexdevs.solstice.modules.styling.StylingModule; import me.alexdevs.solstice.modules.styling.data.StylingConfig; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.PlayerChatMessage; diff --git a/src/main/java/me/alexdevs/solstice/api/text/Format.java b/common/src/main/java/me/alexdevs/solstice/api/text/Format.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/text/Format.java rename to common/src/main/java/me/alexdevs/solstice/api/text/Format.java diff --git a/src/main/java/me/alexdevs/solstice/api/text/RawPlaceholder.java b/common/src/main/java/me/alexdevs/solstice/api/text/RawPlaceholder.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/text/RawPlaceholder.java rename to common/src/main/java/me/alexdevs/solstice/api/text/RawPlaceholder.java diff --git a/src/main/java/me/alexdevs/solstice/api/text/parser/CodeParser.java b/common/src/main/java/me/alexdevs/solstice/api/text/parser/CodeParser.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/text/parser/CodeParser.java rename to common/src/main/java/me/alexdevs/solstice/api/text/parser/CodeParser.java diff --git a/src/main/java/me/alexdevs/solstice/api/text/parser/LinkParser.java b/common/src/main/java/me/alexdevs/solstice/api/text/parser/LinkParser.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/text/parser/LinkParser.java rename to common/src/main/java/me/alexdevs/solstice/api/text/parser/LinkParser.java diff --git a/src/main/java/me/alexdevs/solstice/api/text/parser/MarkdownComponentParser.java b/common/src/main/java/me/alexdevs/solstice/api/text/parser/MarkdownComponentParser.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/text/parser/MarkdownComponentParser.java rename to common/src/main/java/me/alexdevs/solstice/api/text/parser/MarkdownComponentParser.java diff --git a/src/main/java/me/alexdevs/solstice/api/text/parser/MarkdownParser.java b/common/src/main/java/me/alexdevs/solstice/api/text/parser/MarkdownParser.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/text/parser/MarkdownParser.java rename to common/src/main/java/me/alexdevs/solstice/api/text/parser/MarkdownParser.java diff --git a/src/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java b/common/src/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java rename to common/src/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java diff --git a/src/main/java/me/alexdevs/solstice/api/utils/MathUtils.java b/common/src/main/java/me/alexdevs/solstice/api/utils/MathUtils.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/utils/MathUtils.java rename to common/src/main/java/me/alexdevs/solstice/api/utils/MathUtils.java diff --git a/src/main/java/me/alexdevs/solstice/api/utils/PlayerUtils.java b/common/src/main/java/me/alexdevs/solstice/api/utils/PlayerUtils.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/utils/PlayerUtils.java rename to common/src/main/java/me/alexdevs/solstice/api/utils/PlayerUtils.java diff --git a/src/main/java/me/alexdevs/solstice/api/utils/RegistryUtils.java b/common/src/main/java/me/alexdevs/solstice/api/utils/RegistryUtils.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/api/utils/RegistryUtils.java rename to common/src/main/java/me/alexdevs/solstice/api/utils/RegistryUtils.java diff --git a/src/main/java/me/alexdevs/solstice/core/CooldownManager.java b/common/src/main/java/me/alexdevs/solstice/core/CooldownManager.java similarity index 80% rename from src/main/java/me/alexdevs/solstice/core/CooldownManager.java rename to common/src/main/java/me/alexdevs/solstice/core/CooldownManager.java index 47efd4da..db5c5d99 100644 --- a/src/main/java/me/alexdevs/solstice/core/CooldownManager.java +++ b/common/src/main/java/me/alexdevs/solstice/core/CooldownManager.java @@ -2,11 +2,12 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.command.TimeSpan; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.core.coreModule.CoreModule; -import me.lucko.fabric.api.permissions.v0.Permissions; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; + import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -16,10 +17,10 @@ public class CooldownManager { private final Map> cooldowns = new ConcurrentHashMap<>(); public CooldownManager() { - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { - var playerUuid = handler.getPlayer().getUUID(); - cooldowns.computeIfAbsent(playerUuid, k -> new ConcurrentHashMap<>()); - }); + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> cooldowns.computeIfAbsent( + player.getUUID(), + k -> new ConcurrentHashMap<>() + )); Solstice.scheduler.scheduleAtFixedRate(this::tickDown, 0, 1, TimeUnit.SECONDS); } @@ -42,8 +43,7 @@ public boolean isExempt(ServerPlayer player, String node) { } public boolean onCooldown(ServerPlayer player, String node) { - if (isExempt(player, node)) - return false; + if (isExempt(player, node)) return false; var uuid = player.getUUID(); var cooldown = cooldowns.computeIfAbsent(uuid, k -> new ConcurrentHashMap<>()); return cooldown.getOrDefault(node, 0) > 0; @@ -54,16 +54,16 @@ public Component getMessage(ServerPlayer player, String node) { var cooldown = cooldowns.computeIfAbsent(uuid, k -> new ConcurrentHashMap<>()); var value = cooldown.getOrDefault(node, 0); var locale = Solstice.localeManager.getLocale(CoreModule.ID); - return locale.get("~cooldown", Map.of( - "timespan", Component.nullToEmpty(TimeSpan.toShortString(value)) - )); + return locale.get("~cooldown", Map.of("timespan", Component.nullToEmpty(TimeSpan.toShortString(value)))); } /** * Check and start cooldown if the player is not on cooldown. - * @param player Player - * @param node Permission node + * + * @param player Player + * @param node Permission node * @param seconds Cooldown seconds + * * @return Whether to execute */ public boolean trigger(ServerPlayer player, String node, int seconds) { diff --git a/src/main/java/me/alexdevs/solstice/core/Modules.java b/common/src/main/java/me/alexdevs/solstice/core/Modules.java similarity index 51% rename from src/main/java/me/alexdevs/solstice/core/Modules.java rename to common/src/main/java/me/alexdevs/solstice/core/Modules.java index f76aa2fc..b933d654 100644 --- a/src/main/java/me/alexdevs/solstice/core/Modules.java +++ b/common/src/main/java/me/alexdevs/solstice/core/Modules.java @@ -1,51 +1,56 @@ package me.alexdevs.solstice.core; -import com.mojang.brigadier.CommandDispatcher; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyCommandRegistrationCallback; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.api.module.ModuleEntrypoint; import me.alexdevs.solstice.core.coreModule.CoreModule; -import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.commands.CommandBuildContext; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.commands.Commands; + import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.ServiceLoader; public class Modules { private final HashSet modules = new HashSet<>(); public Modules() { - CommandRegistrationCallback.EVENT.register(this::registerCommands); + ProxyCommandRegistrationCallback.EVENT.register((dispatcher, buildCtx, selection) -> { + for (var module : modules) { + for (var command : module.getCommands()) { + command.register(dispatcher, buildCtx, selection); + } + } + }); } public void register() { modules.add(new CoreModule()); - var fabric = FabricLoader.getInstance(); - var moduleContainers = fabric.getEntrypointContainers("solstice", ModuleEntrypoint.class); - for (var container : moduleContainers) { - var mod = container.getProvider(); - var modMeta = mod.getMetadata(); - Solstice.LOGGER.info("Registering module provider '{}' ({}) v{}", modMeta.getName(), modMeta.getId(), modMeta.getVersion()); - try { - var provider = container.getEntrypoint(); - var providerModules = provider.register(); - for (var entry : providerModules) { - var moduleId = entry.getId(); - if (modules.stream().anyMatch(m -> m.getId().equals(moduleId))) { - Solstice.LOGGER.warn("Module ID conflict: {}", entry.getId()); - continue; - } - - modules.add(entry); + for (var provider : ServiceLoader.load(ModuleEntrypoint.class)) { + registerModule(provider); + } + } + + private void registerModule(ModuleEntrypoint provider) { + Solstice.LOGGER.info("Registering module provider '{}'", provider.getClass().getName()); + + try { + var providerModules = provider.register(); + + for (var entry : providerModules) { + var moduleId = entry.getId(); + + if (modules.stream().anyMatch(m -> m.getId().equals(moduleId))) { + Solstice.LOGGER.warn("Module ID conflict: {}", entry.getId()); + continue; } - } catch (Exception e) { - Solstice.LOGGER.error("Error registering a module from {}", modMeta.getId(), e); + + modules.add(entry); } + } catch (Exception e) { + Solstice.LOGGER.error("Error registering a module from {}", provider.getClass().getName(), e); } } @@ -88,12 +93,4 @@ public void initModules() { } } } - - private void registerCommands(CommandDispatcher dispatcher, CommandBuildContext commandRegistry, Commands.CommandSelection environment) { - for (var module : modules) { - for (var command : module.getCommands()) { - command.register(dispatcher, commandRegistry, environment); - } - } - } } diff --git a/src/main/java/me/alexdevs/solstice/core/Scheduler.java b/common/src/main/java/me/alexdevs/solstice/core/Scheduler.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/Scheduler.java rename to common/src/main/java/me/alexdevs/solstice/core/Scheduler.java diff --git a/src/main/java/me/alexdevs/solstice/core/ToggleableConfig.java b/common/src/main/java/me/alexdevs/solstice/core/ToggleableConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/ToggleableConfig.java rename to common/src/main/java/me/alexdevs/solstice/core/ToggleableConfig.java diff --git a/src/main/java/me/alexdevs/solstice/core/UserCache.java b/common/src/main/java/me/alexdevs/solstice/core/UserCache.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/UserCache.java rename to common/src/main/java/me/alexdevs/solstice/core/UserCache.java diff --git a/src/main/java/me/alexdevs/solstice/core/WarmUpManager.java b/common/src/main/java/me/alexdevs/solstice/core/WarmUpManager.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/WarmUpManager.java rename to common/src/main/java/me/alexdevs/solstice/core/WarmUpManager.java diff --git a/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java similarity index 74% rename from src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java rename to common/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java index 20588a70..63cdc318 100644 --- a/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java +++ b/common/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java @@ -4,6 +4,7 @@ import me.alexdevs.solstice.api.ServerLocation; import me.alexdevs.solstice.api.events.SolsticeEvents; import me.alexdevs.solstice.api.events.WorldSaveCallback; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.core.coreModule.commands.PingCommand; import me.alexdevs.solstice.core.coreModule.commands.ServerStatCommand; @@ -11,8 +12,8 @@ import me.alexdevs.solstice.core.coreModule.data.CoreConfig; import me.alexdevs.solstice.core.coreModule.data.CoreLocale; import me.alexdevs.solstice.core.coreModule.data.CorePlayerData; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.world.entity.Entity; + import java.util.Date; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -29,20 +30,20 @@ public void init() { Solstice.configManager.registerData(ID, CoreConfig.class, CoreConfig::new); Solstice.localeManager.registerShared(CoreLocale.SHARED); Solstice.localeManager.registerModule(ID, CoreLocale.MODULE); - Solstice.playerData.registerData(ID, CorePlayerData.class, CorePlayerData::new); commands.add(new SolsticeCommand(this)); commands.add(new ServerStatCommand(this)); commands.add(new PingCommand(this)); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { - Solstice.getUserCache().add(handler.getPlayer().getGameProfile()); - var player = handler.getPlayer(); + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { + Solstice.getUserCache().add(player.getGameProfile()); + var playerData = Solstice.playerData.get(player).getData(CorePlayerData.class); + playerData.username = player.getGameProfile().getName(); playerData.lastSeenDate = new Date(); - playerData.ipAddress = handler.getPlayer().getIpAddress(); + playerData.ipAddress = player.getIpAddress(); if (playerData.firstJoinedDate == null) { Solstice.LOGGER.info("Player {} joined for the first time!", player.getGameProfile().getName()); @@ -51,18 +52,27 @@ public void init() { } if (playerData.username != null && !playerData.username.equals(player.getGameProfile().getName())) { - Solstice.LOGGER.info("Player {} has changed their username from {}", player.getGameProfile().getName(), playerData.username); + Solstice.LOGGER.info( + "Player {} has changed their username from {}", + player.getGameProfile().getName(), + playerData.username + ); + SolsticeEvents.USERNAME_CHANGE.invoker().onUsernameChange(player, playerData.username); } }); - ServerPlayConnectionEvents.DISCONNECT.register((handler, client) -> { - var playerData = Solstice.playerData.get(handler.getPlayer()).getData(CorePlayerData.class); + ProxyServerPlayConnectionEvents.DISCONNECT.register((player, client) -> { + var playerData = Solstice.playerData.get(player).getData(CorePlayerData.class); + playerData.lastSeenDate = new Date(); - playerData.logoffPosition = new ServerLocation(handler.getPlayer()); - Solstice.scheduler.schedule(() -> { - Solstice.playerData.dispose(handler.getPlayer().getUUID()); - }, 1, TimeUnit.SECONDS); + playerData.logoffPosition = new ServerLocation(player); + + Solstice.scheduler.schedule( + () -> { + Solstice.playerData.dispose(player.getUUID()); + }, 1, TimeUnit.SECONDS + ); }); WorldSaveCallback.EVENT.register((server, suppressLogs, flush, force) -> { @@ -81,8 +91,8 @@ public static CorePlayerData getPlayerData(UUID uuid) { public static String getUsername(UUID uuid) { var profile = Solstice.server.getProfileCache().get(uuid); - if(profile.isPresent()) - return profile.get().getName(); + + if (profile.isPresent()) return profile.get().getName(); return uuid.toString(); } diff --git a/src/main/java/me/alexdevs/solstice/core/coreModule/commands/PingCommand.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/PingCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/coreModule/commands/PingCommand.java rename to common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/PingCommand.java diff --git a/src/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java rename to common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java diff --git a/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/SolsticeCommand.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/SolsticeCommand.java new file mode 100644 index 00000000..c9a39f26 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/SolsticeCommand.java @@ -0,0 +1,139 @@ +package me.alexdevs.solstice.core.coreModule.commands; + +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; +import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.SolsticeEvents; +import me.alexdevs.solstice.api.module.Debug; +import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.platform.PlatformHelper; +import me.alexdevs.solstice.api.text.Format; +import me.alexdevs.solstice.core.coreModule.CoreModule; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.Style; + +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; + +import static net.minecraft.commands.Commands.literal; + +public class SolsticeCommand extends ModCommand { + public SolsticeCommand(CoreModule module) { + super(module); + } + + @Override + public List getNames() { + return List.of("solstice", "sol"); + } + + @Override + public LiteralArgumentBuilder command(String name) { + return literal(name).requires(require(true)).executes(context -> { + var modInfo = PlatformHelper.get().getModInfo(Solstice.MOD_ID); + + if (modInfo == null) { + context.getSource() + .sendSuccess(() -> Component.nullToEmpty("Could not find self in mod list???"), false); + return 1; + } + + var placeholders = Map.of( + "name", + Component.nullToEmpty(modInfo.displayName()), + "version", + Component.nullToEmpty(modInfo.version()) + ); + + var text = Format.parse("${name} v${version}", placeholders); + context.getSource().sendSuccess(() -> text, false); + + return 1; + }).then(literal("reload").requires(require("reload", 3)).executes(context -> { + try { + Solstice.configManager.loadData(true); + Solstice.localeManager.reload(); + } catch (Exception e) { + Solstice.LOGGER.error("Failed to reload Solstice", e); + context.getSource().sendSuccess( + () -> Component.nullToEmpty("Failed to load Solstice config. Check console for more info."), + true + ); + return 1; + } + + SolsticeEvents.RELOAD.invoker().onReload(Solstice.getInstance()); + + context.getSource().sendSuccess(() -> Component.nullToEmpty("Reloaded Solstice config"), true); + + return 1; + })).then(literal("debug").requires(require("debug", 4)).then(literal("gen-command-list").executes(context -> { + var builder = new StringBuilder(); + + var list = new ArrayList<>(Debug.commandDebugList); + + list.sort(Comparator.comparing(Debug.CommandDebug::module)); + + builder.append(String.format("| %s | %s | %s | %s |\n", "Module", "Command", "Aliases", "Permission")); + builder.append("|---|---|---|---|\n"); + for (var command : list) { + builder.append(String.format( + "| %s | %s | %s | %s |\n", + command.module(), + command.command(), + String.join(" ", command.commands()), + command.permission() + )); + } + + var output = builder.toString(); + var file = PlatformHelper.get().getGameDir().resolve("solstice-commands.md").toFile(); + + try (var fw = new FileWriter(file)) { + fw.write(output); + } catch (IOException e) { + throw new SimpleCommandExceptionType(Component.nullToEmpty(e.getMessage())).create(); + } + + context.getSource().sendSuccess(() -> Component.nullToEmpty("Generated 'solstice-commands.md'"), true); + + return 1; + })).then(literal("tags").executes(context -> { + var player = context.getSource().getPlayerOrException(); + + var hand = player.getUsedItemHand(); + var itemStack = player.getItemInHand(hand); + + var entry = itemStack.getItemHolder().unwrapKey().get(); + var entryString = String.format("Tags for [%s / %s]:", entry.registry(), entry.location()); + + var text = Component.empty(); + text.append(Component.nullToEmpty(entryString)); + var tags = itemStack.getTags().iterator(); + while (tags.hasNext()) { + var tag = tags.next(); + text.append(Component.nullToEmpty("\n")); + text.append(Component.literal(" #" + tag.location()) + .setStyle(Style.EMPTY.withHoverEvent(new HoverEvent( + HoverEvent.Action.SHOW_TEXT, + Component.nullToEmpty("Click to copy") + )) + .withClickEvent(new ClickEvent( + ClickEvent.Action.COPY_TO_CLIPBOARD, + "#" + tag.location() + )))); + } + + context.getSource().sendSuccess(() -> text, false); + + return 1; + }))); + } +} diff --git a/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java rename to common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java diff --git a/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreLocale.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreLocale.java rename to common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreLocale.java diff --git a/src/main/java/me/alexdevs/solstice/core/coreModule/data/CorePlayerData.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CorePlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/core/coreModule/data/CorePlayerData.java rename to common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CorePlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/data/PlayerData.java b/common/src/main/java/me/alexdevs/solstice/data/PlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/data/PlayerData.java rename to common/src/main/java/me/alexdevs/solstice/data/PlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/data/PlayerDataManager.java b/common/src/main/java/me/alexdevs/solstice/data/PlayerDataManager.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/data/PlayerDataManager.java rename to common/src/main/java/me/alexdevs/solstice/data/PlayerDataManager.java diff --git a/src/main/java/me/alexdevs/solstice/data/ServerData.java b/common/src/main/java/me/alexdevs/solstice/data/ServerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/data/ServerData.java rename to common/src/main/java/me/alexdevs/solstice/data/ServerData.java diff --git a/src/main/java/me/alexdevs/solstice/integrations/ConnectorIntegration.java b/common/src/main/java/me/alexdevs/solstice/integrations/ConnectorIntegration.java similarity index 53% rename from src/main/java/me/alexdevs/solstice/integrations/ConnectorIntegration.java rename to common/src/main/java/me/alexdevs/solstice/integrations/ConnectorIntegration.java index 26df3947..5ebeb5ee 100644 --- a/src/main/java/me/alexdevs/solstice/integrations/ConnectorIntegration.java +++ b/common/src/main/java/me/alexdevs/solstice/integrations/ConnectorIntegration.java @@ -1,17 +1,20 @@ package me.alexdevs.solstice.integrations; import me.alexdevs.solstice.Solstice; -import net.fabricmc.loader.api.FabricLoader; +import me.alexdevs.solstice.api.platform.PlatformHelper; public class ConnectorIntegration { public static final String CONNECTOR_ID = "connector"; private static boolean isForge = false; public static void register() { - var optContainer = FabricLoader.getInstance().getModContainer(CONNECTOR_ID); - if (optContainer.isPresent()) { + if (PlatformHelper.get().isNativeForge()) { isForge = true; - Solstice.LOGGER.warn("Sinytra connector detected. Support may be limited!"); + } else { + if (PlatformHelper.get().isModLoaded(CONNECTOR_ID)) { + isForge = true; + Solstice.LOGGER.warn("Sinytra connector detected. Support may be limited!"); + } } } diff --git a/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java b/common/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java similarity index 63% rename from src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java rename to common/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java index 96d56ee2..c9796f4d 100644 --- a/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java +++ b/common/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java @@ -1,12 +1,12 @@ package me.alexdevs.solstice.integrations; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerLifecycleEvents; import me.alexdevs.solstice.api.events.SolsticeEvents; -import me.lucko.fabric.api.permissions.v0.OfflinePermissionCheckEvent; -import me.lucko.fabric.api.permissions.v0.PermissionCheckEvent; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.fabricmc.fabric.api.util.TriState; -import net.fabricmc.loader.api.FabricLoader; +import me.alexdevs.solstice.api.permissions.OfflinePermissionCheckEvent; +import me.alexdevs.solstice.api.permissions.PermissionCheckEvent; +import me.alexdevs.solstice.api.permissions.TriState; +import me.alexdevs.solstice.api.platform.PlatformHelper; import net.luckperms.api.LuckPerms; import net.luckperms.api.LuckPermsProvider; import net.luckperms.api.event.node.NodeAddEvent; @@ -37,18 +37,20 @@ public class LuckPermsIntegration { public static void register() { if (!isAvailable()) { - Solstice.LOGGER.warn("LuckPerms not available! It is recommended to install LuckPerms to configure permissions and groups."); + Solstice.LOGGER.warn( + "LuckPerms not available! It is recommended to install LuckPerms to configure permissions and groups."); return; } - var container = FabricLoader.getInstance().getModContainer(Solstice.MOD_ID).get(); - - ServerLifecycleEvents.SERVER_STARTED.register(server -> { + ProxyServerLifecycleEvents.SERVER_STARTED.register(server -> { luckPerms = LuckPermsProvider.get(); available = true; + var eventBus = luckPerms.getEventBus(); if (!ConnectorIntegration.isForge()) { + var container = PlatformHelper.get().getModContainer(); + eventBus.subscribe(container, UserDataRecalculateEvent.class, Listeners::onDataRecalculate); eventBus.subscribe(container, NodeAddEvent.class, Listeners::onNodeAdded); eventBus.subscribe(container, NodeRemoveEvent.class, Listeners::onNodeRemoved); @@ -76,15 +78,15 @@ public static void register() { OfflinePermissionCheckEvent.EVENT.register((uuid, permission) -> { var future = new CompletableFuture(); + checkPermission(uuid, permission).thenAcceptAsync(result -> { - future.complete( - switch (result) { - case TRUE -> TriState.TRUE; - case FALSE -> TriState.FALSE; - case UNDEFINED -> TriState.DEFAULT; - } - ); + future.complete(switch (result) { + case TRUE -> TriState.TRUE; + case FALSE -> TriState.FALSE; + case UNDEFINED -> TriState.DEFAULT; + }); }); + return future; }); } @@ -97,7 +99,7 @@ public static void register() { } public static boolean isAvailable() { - return FabricLoader.getInstance().isModLoaded("luckperms"); + return PlatformHelper.get().isModLoaded("luckperms"); } public static @Nullable String getPrefix(ServerPlayer player) { @@ -105,15 +107,17 @@ public static boolean isAvailable() { return null; } - return prefixMap.computeIfAbsent(player.getUUID(), uuid -> { - try { - var playerMeta = luckPerms.getPlayerAdapter(ServerPlayer.class).getMetaData(player); - return Optional.ofNullable(playerMeta.getPrefix()); - } catch (IllegalStateException e) { - // Fake player may throw with IllegalStateException - return Optional.empty(); - } - }).orElse(null); + return prefixMap.computeIfAbsent( + player.getUUID(), uuid -> { + try { + var playerMeta = luckPerms.getPlayerAdapter(ServerPlayer.class).getMetaData(player); + return Optional.ofNullable(playerMeta.getPrefix()); + } catch (IllegalStateException e) { + // Fake player may throw with IllegalStateException + return Optional.empty(); + } + } + ).orElse(null); } public static @Nullable String getSuffix(ServerPlayer player) { @@ -121,15 +125,17 @@ public static boolean isAvailable() { return null; } - return suffixMap.computeIfAbsent(player.getUUID(), uuid -> { - try { - var playerMeta = luckPerms.getPlayerAdapter(ServerPlayer.class).getMetaData(player); - return Optional.ofNullable(playerMeta.getSuffix()); - } catch (IllegalStateException e) { - // Fake player may throw with IllegalStateException - return Optional.empty(); - } - }).orElse(null); + return suffixMap.computeIfAbsent( + player.getUUID(), uuid -> { + try { + var playerMeta = luckPerms.getPlayerAdapter(ServerPlayer.class).getMetaData(player); + return Optional.ofNullable(playerMeta.getSuffix()); + } catch (IllegalStateException e) { + // Fake player may throw with IllegalStateException + return Optional.empty(); + } + } + ).orElse(null); } public static boolean isInGroup(ServerPlayer player, String group) { @@ -162,15 +168,12 @@ public static CompletableFuture checkPermission(UUID uuid, String perm if (user == null) { future.complete(Tristate.UNDEFINED); } else { - future.complete(user - .getCachedData() - .getPermissionData() - .checkPermission(permission)); + future.complete(user.getCachedData().getPermissionData().checkPermission(permission)); } } else { - luckPerms.getUserManager().loadUser(uuid).thenAccept(user -> future - .complete(user - .getCachedData() + luckPerms.getUserManager() + .loadUser(uuid) + .thenAccept(user -> future.complete(user.getCachedData() .getPermissionData() .checkPermission(permission))); } @@ -199,40 +202,46 @@ public static void onDataRecalculate(UserDataRecalculateEvent event) { public static void onNodeAdded(NodeAddEvent event) { if (event.isGroup()) { - Solstice.scheduler.scheduleSync(() -> { - if (event.getNode().getType() == NodeType.PREFIX) { - prefixMap.clear(); - } else if (event.getNode().getType() == NodeType.SUFFIX) { - suffixMap.clear(); - } - - recalculateUsersCache(); - }, 50, TimeUnit.MILLISECONDS); + Solstice.scheduler.scheduleSync( + () -> { + if (event.getNode().getType() == NodeType.PREFIX) { + prefixMap.clear(); + } else if (event.getNode().getType() == NodeType.SUFFIX) { + suffixMap.clear(); + } + + recalculateUsersCache(); + }, 50, TimeUnit.MILLISECONDS + ); } } public static void onNodeRemoved(NodeRemoveEvent event) { if (event.isGroup()) { - Solstice.scheduler.scheduleSync(() -> { - if (event.getNode().getType() == NodeType.PREFIX) { - prefixMap.clear(); - } else if (event.getNode().getType() == NodeType.SUFFIX) { - suffixMap.clear(); - } - - recalculateUsersCache(); - }, 50, TimeUnit.MILLISECONDS); + Solstice.scheduler.scheduleSync( + () -> { + if (event.getNode().getType() == NodeType.PREFIX) { + prefixMap.clear(); + } else if (event.getNode().getType() == NodeType.SUFFIX) { + suffixMap.clear(); + } + + recalculateUsersCache(); + }, 50, TimeUnit.MILLISECONDS + ); } } public static void onNodeCleared(NodeClearEvent event) { if (event.isGroup()) { - Solstice.scheduler.scheduleSync(() -> { - prefixMap.clear(); - suffixMap.clear(); - - recalculateUsersCache(); - }, 50, TimeUnit.MILLISECONDS); + Solstice.scheduler.scheduleSync( + () -> { + prefixMap.clear(); + suffixMap.clear(); + + recalculateUsersCache(); + }, 50, TimeUnit.MILLISECONDS + ); } } } diff --git a/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsApiProxy.java b/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsApiProxy.java new file mode 100644 index 00000000..84c439e1 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsApiProxy.java @@ -0,0 +1,24 @@ +package me.alexdevs.solstice.integrations; + +import net.minecraft.world.Container; +import net.minecraft.world.entity.LivingEntity; +import org.jetbrains.annotations.ApiStatus; + +import java.util.Map; +import java.util.Optional; + +public abstract class TrinketsApiProxy { + private static TrinketsApiProxy INSTANCE; + + public static TrinketsApiProxy get() { + return INSTANCE; + } + + @ApiStatus.Internal + public static void set(TrinketsApiProxy proxy) { + INSTANCE = proxy; + } + + // Basically, this does getTrinketComponent(target).getInventory().mapValues((map) -> map.mapValues(inv -> inv.values())) + public abstract Optional>> getTrinketComponentInventory(LivingEntity target); +} diff --git a/src/main/java/me/alexdevs/solstice/integrations/TrinketsIntegration.java b/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsIntegration.java similarity index 52% rename from src/main/java/me/alexdevs/solstice/integrations/TrinketsIntegration.java rename to common/src/main/java/me/alexdevs/solstice/integrations/TrinketsIntegration.java index 20130fc9..c598241a 100644 --- a/src/main/java/me/alexdevs/solstice/integrations/TrinketsIntegration.java +++ b/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsIntegration.java @@ -1,9 +1,9 @@ package me.alexdevs.solstice.integrations; -import net.fabricmc.loader.api.FabricLoader; +import me.alexdevs.solstice.api.platform.PlatformHelper; public class TrinketsIntegration { public static boolean isAvailable() { - return FabricLoader.getInstance().isModLoaded("trinkets"); + return PlatformHelper.get().isModLoaded("trinkets"); } } diff --git a/src/main/java/me/alexdevs/solstice/locale/Locale.java b/common/src/main/java/me/alexdevs/solstice/locale/Locale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/locale/Locale.java rename to common/src/main/java/me/alexdevs/solstice/locale/Locale.java diff --git a/src/main/java/me/alexdevs/solstice/locale/LocaleManager.java b/common/src/main/java/me/alexdevs/solstice/locale/LocaleManager.java similarity index 99% rename from src/main/java/me/alexdevs/solstice/locale/LocaleManager.java rename to common/src/main/java/me/alexdevs/solstice/locale/LocaleManager.java index 6fb73040..a7dfadc8 100644 --- a/src/main/java/me/alexdevs/solstice/locale/LocaleManager.java +++ b/common/src/main/java/me/alexdevs/solstice/locale/LocaleManager.java @@ -24,6 +24,7 @@ public class LocaleManager { .setPrettyPrinting() .setDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX") .create(); + private static final Pattern sharedRegex = Pattern.compile("^shared\\.(.+)$"); private static final Pattern moduleRegex = Pattern.compile("^module\\.(\\w+)\\.(.+)$"); private final Path path; diff --git a/src/main/java/me/alexdevs/solstice/mixin/SolsticeMixinConfigPlugin.java b/common/src/main/java/me/alexdevs/solstice/mixin/SolsticeMixinConfigPlugin.java similarity index 99% rename from src/main/java/me/alexdevs/solstice/mixin/SolsticeMixinConfigPlugin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/SolsticeMixinConfigPlugin.java index cf2cc0df..8987a30c 100644 --- a/src/main/java/me/alexdevs/solstice/mixin/SolsticeMixinConfigPlugin.java +++ b/common/src/main/java/me/alexdevs/solstice/mixin/SolsticeMixinConfigPlugin.java @@ -22,8 +22,10 @@ public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { var moduleMixin = mixinClassName.replace(packageBase, ""); var parts = moduleMixin.split("\\."); var module = parts[0].toLowerCase(); + return config.isEnabled(module); } + return true; } diff --git a/src/main/java/me/alexdevs/solstice/mixin/events/CommandEventsMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/events/CommandEventsMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/events/CommandEventsMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/events/CommandEventsMixin.java diff --git a/common/src/main/java/me/alexdevs/solstice/mixin/events/LivingEntityMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/events/LivingEntityMixin.java new file mode 100644 index 00000000..17d92fff --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/mixin/events/LivingEntityMixin.java @@ -0,0 +1,40 @@ +package me.alexdevs.solstice.mixin.events; + +import me.alexdevs.solstice.api.events.proxy.ProxyEntitySleepEvents; +import me.alexdevs.solstice.api.events.proxy.ProxyServerLivingEntityEvents; +import net.minecraft.core.BlockPos; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.LivingEntity; +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.Optional; + +@Mixin(LivingEntity.class) +public abstract class LivingEntityMixin { + @Shadow + public abstract Optional getSleepingPos(); + + @Inject( + method = "die", at = @At( + value = "INVOKE", + target = "net/minecraft/world/level/Level.broadcastEntityEvent(Lnet/minecraft/world/entity/Entity;B)V" + ) + ) + private void notifyDeath(DamageSource source, CallbackInfo ci) { + ProxyServerLivingEntityEvents.AFTER_DEATH.invoker().afterDeath((LivingEntity) (Object) this, source); + } + + @Inject(method = "stopSleeping", at = @At("HEAD")) + private void onWakeUp(CallbackInfo info) { + BlockPos sleepingPos = getSleepingPos().orElse(null); + + // If actually asleep - this method is often called with data loading, syncing etc. "just to be sure" + if (sleepingPos != null) { + ProxyEntitySleepEvents.STOP_SLEEPING.invoker().onStopSleeping((LivingEntity) (Object) this, sleepingPos); + } + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerListMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerListMixin.java new file mode 100644 index 00000000..332e824f --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerListMixin.java @@ -0,0 +1,46 @@ +package me.alexdevs.solstice.mixin.events; + +import me.alexdevs.solstice.api.events.proxy.ProxyServerMessageEvents; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayerEvents; +import net.minecraft.network.chat.ChatType; +import net.minecraft.network.chat.PlayerChatMessage; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.players.PlayerList; +import net.minecraft.world.entity.Entity; +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; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(PlayerList.class) +public class PlayerListMixin { + @Inject( + method = "broadcastChatMessage(Lnet/minecraft/network/chat/PlayerChatMessage;Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/network/chat/ChatType$Bound;)V", + at = @At("HEAD"), + cancellable = true + ) + private void onSendChatMessage( + PlayerChatMessage message, + ServerPlayer sender, + ChatType.Bound params, + CallbackInfo ci + ) { + if (!ProxyServerMessageEvents.ALLOW_CHAT_MESSAGE.invoker().allowChatMessage(message, sender, params)) { + ci.cancel(); + return; + } + + ProxyServerMessageEvents.CHAT_MESSAGE.invoker().onChatMessage(message, sender, params); + } + + @Inject(method = "respawn", at = @At("TAIL")) + private void afterRespawn( + ServerPlayer oldPlayer, + boolean alive, + Entity.RemovalReason removalReason, + CallbackInfoReturnable cir + ) { + ProxyServerPlayerEvents.AFTER_RESPAWN.invoker().afterRespawn(oldPlayer, cir.getReturnValue(), alive); + } +} diff --git a/common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerMixin.java new file mode 100644 index 00000000..af2030f1 --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerMixin.java @@ -0,0 +1,18 @@ +package me.alexdevs.solstice.mixin.events; + +import me.alexdevs.solstice.api.events.proxy.ProxyEntitySleepEvents; +import net.minecraft.world.entity.player.Player; +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.CallbackInfoReturnable; + +@Mixin(Player.class) +public class PlayerMixin { + @Inject(method = "isSleepingLongEnough", at = @At("RETURN"), cancellable = true) + private void onIsSleepingLongEnough(CallbackInfoReturnable info) { + if (info.getReturnValueZ()) { + info.setReturnValue(ProxyEntitySleepEvents.ALLOW_RESETTING_TIME.invoker().allowResettingTime((Player) (Object) this)); + } + } +} diff --git a/src/main/java/me/alexdevs/solstice/mixin/events/WorldSaveEventMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/events/WorldSaveEventMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/events/WorldSaveEventMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/events/WorldSaveEventMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/admin/ConnectionBypassMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/admin/ConnectionBypassMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/admin/ConnectionBypassMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/admin/ConnectionBypassMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/afk/FixPlayerSleepPercentageMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/afk/FixPlayerSleepPercentageMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/afk/FixPlayerSleepPercentageMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/afk/FixPlayerSleepPercentageMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/back/PreTeleportMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/back/PreTeleportMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/back/PreTeleportMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/back/PreTeleportMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/ban/CustomBanMessageMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/ban/CustomBanMessageMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/ban/CustomBanMessageMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/ban/CustomBanMessageMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/miscellaneous/BypassSleepingInBedCheckMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/miscellaneous/BypassSleepingInBedCheckMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/miscellaneous/BypassSleepingInBedCheckMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/miscellaneous/BypassSleepingInBedCheckMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/sign/FormatSignMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/sign/FormatSignMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/sign/FormatSignMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/sign/FormatSignMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/spawn/OverrideSpawnPointMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/spawn/OverrideSpawnPointMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/spawn/OverrideSpawnPointMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/spawn/OverrideSpawnPointMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomAdvancementMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomAdvancementMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomAdvancementMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomAdvancementMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomChatMessageMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomChatMessageMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomChatMessageMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomChatMessageMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomConnectionMessagesMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomConnectionMessagesMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomConnectionMessagesMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomConnectionMessagesMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomDeathMessageMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomDeathMessageMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomDeathMessageMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomDeathMessageMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomSentMessageMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomSentMessageMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomSentMessageMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/CustomSentMessageMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/styling/InjectCustomChatMessageMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/InjectCustomChatMessageMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/styling/InjectCustomChatMessageMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/InjectCustomChatMessageMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/styling/PlayerDisconnectMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/PlayerDisconnectMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/styling/PlayerDisconnectMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/styling/PlayerDisconnectMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/tablist/CustomPlayerListNameMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/tablist/CustomPlayerListNameMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/tablist/CustomPlayerListNameMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/tablist/CustomPlayerListNameMixin.java diff --git a/src/main/java/me/alexdevs/solstice/mixin/modules/tablist/UpdatePlayerListMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/tablist/UpdatePlayerListMixin.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/mixin/modules/tablist/UpdatePlayerListMixin.java rename to common/src/main/java/me/alexdevs/solstice/mixin/modules/tablist/UpdatePlayerListMixin.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ModuleProvider.java b/common/src/main/java/me/alexdevs/solstice/modules/ModuleProvider.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ModuleProvider.java rename to common/src/main/java/me/alexdevs/solstice/modules/ModuleProvider.java diff --git a/src/main/java/me/alexdevs/solstice/modules/admin/AdminModule.java b/common/src/main/java/me/alexdevs/solstice/modules/admin/AdminModule.java similarity index 96% rename from src/main/java/me/alexdevs/solstice/modules/admin/AdminModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/admin/AdminModule.java index 06b37daf..b44e0037 100644 --- a/src/main/java/me/alexdevs/solstice/modules/admin/AdminModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/admin/AdminModule.java @@ -3,7 +3,7 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.events.PlayerConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; -import me.lucko.fabric.api.permissions.v0.Permissions; +import me.alexdevs.solstice.api.permissions.Permissions; public class AdminModule extends ModuleBase { public static final String ID = "admin"; diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/AfkModule.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/AfkModule.java similarity index 78% rename from src/main/java/me/alexdevs/solstice/modules/afk/AfkModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/AfkModule.java index 52af7249..5ff43c73 100644 --- a/src/main/java/me/alexdevs/solstice/modules/afk/AfkModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/afk/AfkModule.java @@ -8,15 +8,12 @@ import me.alexdevs.solstice.api.events.CommandEvents; import me.alexdevs.solstice.api.events.PlayerActivityEvents; import me.alexdevs.solstice.api.events.SolsticeEvents; +import me.alexdevs.solstice.api.events.proxy.*; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.api.text.Format; import me.alexdevs.solstice.modules.afk.commands.ActiveTimeCommand; import me.alexdevs.solstice.modules.afk.commands.AfkCommand; import me.alexdevs.solstice.modules.afk.data.*; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; -import net.fabricmc.fabric.api.event.player.*; -import net.fabricmc.fabric.api.message.v1.ServerMessageEvents; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; @@ -24,6 +21,7 @@ import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; + import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -66,32 +64,31 @@ public void init() { this.commands.add(new AfkCommand(this)); this.commands.add(new ActiveTimeCommand(this)); - Placeholders.register(ResourceLocation.fromNamespaceAndPath(Solstice.MOD_ID, "afk"), (context, arg) -> { - if (!context.hasPlayer()) - return PlaceholderResult.invalid("No player!"); + Placeholders.register( + ResourceLocation.fromNamespaceAndPath(Solstice.MOD_ID, "afk"), (context, arg) -> { + if (!context.hasPlayer()) return PlaceholderResult.invalid("No player!"); - var player = context.player(); + var player = context.player(); - if (isPlayerAfk(player)) - return PlaceholderResult.value(Format.parse(getConfig().tag)); - else - return PlaceholderResult.value(""); - }); + if (isPlayerAfk(player)) return PlaceholderResult.value(Format.parse(getConfig().tag)); + else return PlaceholderResult.value(""); + } + ); SolsticeEvents.READY.register((instance, server) -> { Solstice.scheduler.scheduleAtFixedRate(this::updateActiveTime, 0, 1, TimeUnit.SECONDS); calculateLeaderboard(); }); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { - activities.put(handler.getPlayer().getUUID(), new PlayerActivityState(handler.getPlayer(), server.getTickCount())); + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { + activities.put(player.getUUID(), new PlayerActivityState(player, server.getTickCount())); }); - ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> { - activities.remove(handler.getPlayer().getUUID()); + ProxyServerPlayConnectionEvents.DISCONNECT.register((player, server) -> { + activities.remove(player.getUUID()); }); - ServerTickEvents.END_SERVER_TICK.register(this::tick); + ProxyServerTickEvents.END_SERVER_TICK.register(this::tick); PlayerActivityEvents.AFK.register((player) -> { var config = getConfig(); @@ -100,9 +97,12 @@ public void init() { player.serverLevel().updateSleepingPlayerList(); } - Solstice.LOGGER.info("{} is AFK. Active time: {} seconds.", player.getGameProfile().getName(), getActiveTime(player.getUUID())); - if (!config.announce) - return; + Solstice.LOGGER.info( + "{} is AFK. Active time: {} seconds.", + player.getGameProfile().getName(), + getActiveTime(player.getUUID()) + ); + if (!config.announce) return; var playerContext = PlaceholderContext.of(player); @@ -116,9 +116,13 @@ public void init() { player.serverLevel().updateSleepingPlayerList(); } - Solstice.LOGGER.info("{} is no longer AFK due to {}. Active time: {} seconds.", player.getGameProfile().getName(), reason.name(), getActiveTime(player.getUUID())); - if (!config.announce) - return; + Solstice.LOGGER.info( + "{} is no longer AFK due to {}. Active time: {} seconds.", + player.getGameProfile().getName(), + reason.name(), + getActiveTime(player.getUUID()) + ); + if (!config.announce) return; var playerContext = PlaceholderContext.of(player); @@ -133,13 +137,17 @@ public AfkServerData getServerData() { } private void updateActiveTime() { - var activePlayers = Solstice.server.getPlayerList().getPlayers() - .stream().filter(player -> !isPlayerAfk(player)); + var activePlayers = Solstice.server.getPlayerList() + .getPlayers() + .stream() + .filter(player -> !isPlayerAfk(player)); activePlayers.forEach(player -> { - var activity = activities.computeIfAbsent(player.getUUID(), uuid -> new PlayerActivityState(player, player.getServer().getTickCount())); - if (!activity.activeTimeEnabled) - return; + var activity = activities.computeIfAbsent( + player.getUUID(), + uuid -> new PlayerActivityState(player, player.getServer().getTickCount()) + ); + if (!activity.activeTimeEnabled) return; var playerData = getPlayerData(player.getUUID()); playerData.activeTime++; @@ -175,11 +183,13 @@ private void tryInsertLeaderboard(ServerPlayer player, int activeTime) { private void tick(MinecraftServer server) { var config = getConfig(); - if (!config.enable) - return; + if (!config.enable) return; server.getPlayerList().getPlayers().forEach(player -> { - var activity = activities.computeIfAbsent(player.getUUID(), uuid -> new PlayerActivityState(player, server.getTickCount())); + var activity = activities.computeIfAbsent( + player.getUUID(), + uuid -> new PlayerActivityState(player, server.getTickCount()) + ); var curLocation = new ServerLocation(player); var oldLocation = activity.location; @@ -193,7 +203,9 @@ private void tick(MinecraftServer server) { // Suppose the player in a vehicle will look around, so we only check for movement when not in a vehicle. if (player.getVehicle() == null) { // Defeats some anti-afk stuff, like pools. Works best when no lag. - if ((player.isShiftKeyDown() && speed >= sneakSpeed) || (player.isSprinting() && speed >= sprintSpeed) || (speed >= walkSpeed)) { + if ((player.isShiftKeyDown() && speed >= sneakSpeed) || + (player.isSprinting() && speed >= sprintSpeed) || + (speed >= walkSpeed)) { if (getConfig().triggers.onMovement) { clearAfk(player, AfkTriggerReason.MOVEMENT); } @@ -230,8 +242,7 @@ public boolean isPlayerAfk(ServerPlayer player) { } public void setPlayerAfk(ServerPlayer player, boolean isAfk) { - if (!activities.containsKey(player.getUUID())) - return; + if (!activities.containsKey(player.getUUID())) return; var config = getConfig(); var activity = activities.get(player.getUUID()); @@ -253,8 +264,7 @@ public void forceRecalculateLeaderboard() { private void calculateLeaderboard() { var serverData = getServerData(); - if (!serverData.forceCalculateLeaderboard) - return; + if (!serverData.forceCalculateLeaderboard) return; serverData.forceCalculateLeaderboard = false; @@ -262,8 +272,7 @@ private void calculateLeaderboard() { var temp = new ArrayList(); for (var name : userCache.getAllNames()) { var profile = userCache.getByName(name); - if (profile.isEmpty()) - continue; + if (profile.isEmpty()) continue; var playerData = Solstice.playerData.get(profile.get().getId()).getData(AfkPlayerData.class); if (playerData.activeTime > 0) { @@ -294,14 +303,12 @@ public List getCurrentActivePlayers() { } private void clearAfk(ServerPlayer player, AfkTriggerReason reason) { - if (!activities.containsKey(player.getUUID())) - return; + if (!activities.containsKey(player.getUUID())) return; var activity = activities.get(player.getUUID()); activity.lastUpdate = Solstice.server.getTickCount(); - if (!activity.afkEnabled) - return; + if (!activity.afkEnabled) return; if (activity.isAfk) { activity.isAfk = false; @@ -311,42 +318,42 @@ private void clearAfk(ServerPlayer player, AfkTriggerReason reason) { } private void registerTriggers() { - AttackBlockCallback.EVENT.register((player, world, hand, pos, direction) -> { + ProxyAttackBlockCallback.EVENT.register((player, world, hand, pos, direction) -> { if (getConfig().triggers.onBlockAttack) { clearAfk((ServerPlayer) player, AfkTriggerReason.BLOCK_ATTACK); } return InteractionResult.PASS; }); - AttackEntityCallback.EVENT.register((player, world, hand, entity, hitResult) -> { + ProxyAttackEntityCallback.EVENT.register((player, world, hand, entity, hitResult) -> { if (getConfig().triggers.onEntityAttack) { clearAfk((ServerPlayer) player, AfkTriggerReason.ENTITY_ATTACK); } return InteractionResult.PASS; }); - UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> { + ProxyUseBlockCallback.EVENT.register((player, world, hand, hitResult) -> { if (getConfig().triggers.onBlockInteract) { clearAfk((ServerPlayer) player, AfkTriggerReason.BLOCK_INTERACT); } return InteractionResult.PASS; }); - UseEntityCallback.EVENT.register((player, world, hand, entity, hitResult) -> { + ProxyUseEntityCallback.EVENT.register((player, world, hand, entity, hitResult) -> { if (getConfig().triggers.onEntityInteract) { clearAfk((ServerPlayer) player, AfkTriggerReason.ENTITY_INTERACT); } return InteractionResult.PASS; }); - UseItemCallback.EVENT.register((player, world, hand) -> { + ProxyUseItemCallback.EVENT.register((player, world, hand) -> { if (getConfig().triggers.onItemUse) { clearAfk((ServerPlayer) player, AfkTriggerReason.ITEM_USE); } return InteractionResultHolder.pass(player.getItemInHand(hand)); }); - ServerMessageEvents.ALLOW_CHAT_MESSAGE.register((message, sender, params) -> { + ProxyServerMessageEvents.ALLOW_CHAT_MESSAGE.register((message, sender, params) -> { if (getConfig().triggers.onChat) { clearAfk(sender, AfkTriggerReason.CHAT_MESSAGE); } @@ -354,8 +361,7 @@ private void registerTriggers() { }); CommandEvents.ALLOW_COMMAND.register((source, command) -> { - if (!source.isPlayer()) - return true; + if (!source.isPlayer()) return true; if (getConfig().triggers.onCommand) { clearAfk(source.getPlayer(), AfkTriggerReason.COMMAND); diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/commands/ActiveTimeCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/commands/ActiveTimeCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/afk/commands/ActiveTimeCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/commands/ActiveTimeCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/commands/AfkCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/commands/AfkCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/afk/commands/AfkCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/commands/AfkCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/afk/data/AfkConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/afk/data/AfkLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkPlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkPlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/afk/data/AfkPlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkPlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkServerData.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkServerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/afk/data/AfkServerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/data/AfkServerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/data/LeaderboardEntry.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/data/LeaderboardEntry.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/afk/data/LeaderboardEntry.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/data/LeaderboardEntry.java diff --git a/src/main/java/me/alexdevs/solstice/modules/afk/data/PlayerActivityState.java b/common/src/main/java/me/alexdevs/solstice/modules/afk/data/PlayerActivityState.java similarity index 93% rename from src/main/java/me/alexdevs/solstice/modules/afk/data/PlayerActivityState.java rename to common/src/main/java/me/alexdevs/solstice/modules/afk/data/PlayerActivityState.java index 23830230..b1dee4ce 100644 --- a/src/main/java/me/alexdevs/solstice/modules/afk/data/PlayerActivityState.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/afk/data/PlayerActivityState.java @@ -2,8 +2,8 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.ServerLocation; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.afk.AfkModule; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.server.level.ServerPlayer; public class PlayerActivityState { diff --git a/src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/AutoAnnouncementModule.java b/common/src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/AutoAnnouncementModule.java similarity index 97% rename from src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/AutoAnnouncementModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/AutoAnnouncementModule.java index 652e0bc8..16f11a39 100644 --- a/src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/AutoAnnouncementModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/AutoAnnouncementModule.java @@ -4,9 +4,9 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.events.SolsticeEvents; import me.alexdevs.solstice.api.module.ModuleBase; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.api.text.Format; import me.alexdevs.solstice.modules.autoAnnouncement.data.AutoAnnouncementConfig; -import me.lucko.fabric.api.permissions.v0.Permissions; import java.util.Random; import java.util.concurrent.ScheduledFuture; diff --git a/src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/data/AutoAnnouncementConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/data/AutoAnnouncementConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/data/AutoAnnouncementConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/autoAnnouncement/data/AutoAnnouncementConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/back/BackModule.java b/common/src/main/java/me/alexdevs/solstice/modules/back/BackModule.java similarity index 73% rename from src/main/java/me/alexdevs/solstice/modules/back/BackModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/back/BackModule.java index 6ce96c94..b3247a92 100644 --- a/src/main/java/me/alexdevs/solstice/modules/back/BackModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/back/BackModule.java @@ -3,12 +3,13 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.ServerLocation; import me.alexdevs.solstice.api.events.PlayerTeleportCallback; +import me.alexdevs.solstice.api.events.proxy.ProxyServerLivingEntityEvents; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.back.commands.BackCommand; import me.alexdevs.solstice.modules.back.data.BackLocale; -import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.server.level.ServerPlayer; + import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -26,14 +27,18 @@ public void init() { commands.add(new BackCommand(this)); - ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> lastPlayerPositions.remove(handler.getPlayer().getUUID())); + ProxyServerPlayConnectionEvents.DISCONNECT.register((player, server) -> lastPlayerPositions.remove(player.getUUID())); - PlayerTeleportCallback.EVENT.register((player, origin, destination) -> lastPlayerPositions.put(player.getUUID(), origin)); + PlayerTeleportCallback.EVENT.register((player, origin, destination) -> lastPlayerPositions.put( + player.getUUID(), + origin + )); - ServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { + ProxyServerLivingEntityEvents.AFTER_DEATH.register((entity, damageSource) -> { if (entity.isAlwaysTicking()) { try { var player = (ServerPlayer) entity; + lastPlayerPositions.put(entity.getUUID(), new ServerLocation(player)); } catch (ClassCastException e) { // They were, in fact, not a player. diff --git a/src/main/java/me/alexdevs/solstice/modules/back/commands/BackCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/back/commands/BackCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/back/commands/BackCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/back/commands/BackCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/back/data/BackLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/back/data/BackLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/back/data/BackLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/back/data/BackLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ban/BanModule.java b/common/src/main/java/me/alexdevs/solstice/modules/ban/BanModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ban/BanModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/ban/BanModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ban/commands/BanCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/ban/commands/BanCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ban/commands/BanCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/ban/commands/BanCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ban/commands/TempBanCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/ban/commands/TempBanCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ban/commands/TempBanCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/ban/commands/TempBanCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ban/commands/UnbanCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/ban/commands/UnbanCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ban/commands/UnbanCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/ban/commands/UnbanCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ban/data/BanLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/ban/data/BanLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ban/data/BanLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/ban/data/BanLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ban/formatters/BanMessageFormatter.java b/common/src/main/java/me/alexdevs/solstice/modules/ban/formatters/BanMessageFormatter.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ban/formatters/BanMessageFormatter.java rename to common/src/main/java/me/alexdevs/solstice/modules/ban/formatters/BanMessageFormatter.java diff --git a/src/main/java/me/alexdevs/solstice/modules/broadcast/BroadcastModule.java b/common/src/main/java/me/alexdevs/solstice/modules/broadcast/BroadcastModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/broadcast/BroadcastModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/broadcast/BroadcastModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/broadcast/commands/BroadcastCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/broadcast/commands/BroadcastCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/broadcast/commands/BroadcastCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/broadcast/commands/BroadcastCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/broadcast/commands/PlainBroadcastCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/broadcast/commands/PlainBroadcastCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/broadcast/commands/PlainBroadcastCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/broadcast/commands/PlainBroadcastCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/broadcast/data/BroadcastConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/broadcast/data/BroadcastConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/broadcast/data/BroadcastConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/broadcast/data/BroadcastConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/commandSpy/CommandSpyModule.java b/common/src/main/java/me/alexdevs/solstice/modules/commandSpy/CommandSpyModule.java similarity index 97% rename from src/main/java/me/alexdevs/solstice/modules/commandSpy/CommandSpyModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/commandSpy/CommandSpyModule.java index 76114183..8413a98e 100644 --- a/src/main/java/me/alexdevs/solstice/modules/commandSpy/CommandSpyModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/commandSpy/CommandSpyModule.java @@ -3,10 +3,11 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.events.CommandEvents; import me.alexdevs.solstice.api.module.ModuleBase; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.commandSpy.data.CommandSpyConfig; import me.alexdevs.solstice.modules.commandSpy.data.CommandSpyLocale; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.network.chat.Component; + import java.util.Map; public class CommandSpyModule extends ModuleBase.Toggleable { diff --git a/src/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/commandSpy/data/CommandSpyLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/customName/CustomNameModule.java b/common/src/main/java/me/alexdevs/solstice/modules/customName/CustomNameModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/customName/CustomNameModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/customName/CustomNameModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/customName/commands/NicknameCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/customName/commands/NicknameCommand.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/customName/commands/NicknameCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/customName/commands/NicknameCommand.java index f3443b2f..0a9cdfa7 100644 --- a/src/main/java/me/alexdevs/solstice/modules/customName/commands/NicknameCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/customName/commands/NicknameCommand.java @@ -6,8 +6,8 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import me.alexdevs.solstice.api.command.LocalGameProfile; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.customName.CustomNameModule; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; diff --git a/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNameLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNamePlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNamePlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNamePlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/customName/data/CustomNamePlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/enderchest/EnderChestModule.java b/common/src/main/java/me/alexdevs/solstice/modules/enderchest/EnderChestModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/enderchest/EnderChestModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/enderchest/EnderChestModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/enderchest/commands/EnderChestCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/enderchest/commands/EnderChestCommand.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/enderchest/commands/EnderChestCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/enderchest/commands/EnderChestCommand.java index 0ba56713..50464068 100644 --- a/src/main/java/me/alexdevs/solstice/modules/enderchest/commands/EnderChestCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/enderchest/commands/EnderChestCommand.java @@ -5,10 +5,10 @@ import eu.pb4.sgui.api.gui.SimpleGui; import me.alexdevs.solstice.api.command.LocalGameProfile; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.api.utils.PlayerUtils; import me.alexdevs.solstice.modules.enderchest.EnderChestModule; import me.alexdevs.solstice.modules.inventorySee.ImmutableSlot; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; @@ -114,7 +114,6 @@ public void onClose() { } container.setTitle(title); - container.open(); } } diff --git a/src/main/java/me/alexdevs/solstice/modules/enderchest/data/EnderChestLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/enderchest/data/EnderChestLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/enderchest/data/EnderChestLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/enderchest/data/EnderChestLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/experiments/ExperimentsModule.java b/common/src/main/java/me/alexdevs/solstice/modules/experiments/ExperimentsModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/experiments/ExperimentsModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/experiments/ExperimentsModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/experiments/commands/FlagsCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/experiments/commands/FlagsCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/experiments/commands/FlagsCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/experiments/commands/FlagsCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/experiments/commands/TimeSpanCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/experiments/commands/TimeSpanCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/experiments/commands/TimeSpanCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/experiments/commands/TimeSpanCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/extinguish/ExtinguishModule.java b/common/src/main/java/me/alexdevs/solstice/modules/extinguish/ExtinguishModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/extinguish/ExtinguishModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/extinguish/ExtinguishModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/extinguish/commands/ExtinguishCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/extinguish/commands/ExtinguishCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/extinguish/commands/ExtinguishCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/extinguish/commands/ExtinguishCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/feed/FeedModule.java b/common/src/main/java/me/alexdevs/solstice/modules/feed/FeedModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/feed/FeedModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/feed/FeedModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/feed/commands/FeedCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/feed/commands/FeedCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/feed/commands/FeedCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/feed/commands/FeedCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/fly/FlyModule.java b/common/src/main/java/me/alexdevs/solstice/modules/fly/FlyModule.java similarity index 80% rename from src/main/java/me/alexdevs/solstice/modules/fly/FlyModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/fly/FlyModule.java index ce31848a..e40e836e 100644 --- a/src/main/java/me/alexdevs/solstice/modules/fly/FlyModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/fly/FlyModule.java @@ -1,11 +1,11 @@ package me.alexdevs.solstice.modules.fly; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.fly.commands.FlyCommand; import me.alexdevs.solstice.modules.fly.data.FlyLocale; import me.alexdevs.solstice.modules.fly.data.FlyPlayerData; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; public class FlyModule extends ModuleBase.Toggleable { public static final String ID = "fly"; @@ -21,11 +21,10 @@ public void init() { commands.add(new FlyCommand(this)); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { - var player = handler.getPlayer(); - + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { var data = Solstice.playerData.get(player).getData(FlyPlayerData.class); - if(data.flightEnabled) { + + if (data.flightEnabled) { var abilities = player.getAbilities(); abilities.mayfly = true; player.onUpdateAbilities(); diff --git a/src/main/java/me/alexdevs/solstice/modules/fly/commands/FlyCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/fly/commands/FlyCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/fly/commands/FlyCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/fly/commands/FlyCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/fly/data/FlyLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/fly/data/FlyLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/fly/data/FlyLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/fly/data/FlyLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/fly/data/FlyPlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/fly/data/FlyPlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/fly/data/FlyPlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/fly/data/FlyPlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/god/GodModule.java b/common/src/main/java/me/alexdevs/solstice/modules/god/GodModule.java similarity index 79% rename from src/main/java/me/alexdevs/solstice/modules/god/GodModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/god/GodModule.java index cdc0b5d3..fe56e8e3 100644 --- a/src/main/java/me/alexdevs/solstice/modules/god/GodModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/god/GodModule.java @@ -1,11 +1,11 @@ package me.alexdevs.solstice.modules.god; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.god.commands.GodCommand; import me.alexdevs.solstice.modules.god.data.GodLocale; import me.alexdevs.solstice.modules.god.data.GodPlayerData; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; public class GodModule extends ModuleBase.Toggleable { public static final String ID = "god"; @@ -21,11 +21,10 @@ public void init() { commands.add(new GodCommand(this)); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { - var player = handler.getPlayer(); - + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { var data = Solstice.playerData.get(player).getData(GodPlayerData.class); - if(data.invulnerabilityEnabled) { + + if (data.invulnerabilityEnabled) { var abilities = player.getAbilities(); abilities.invulnerable = true; player.onUpdateAbilities(); diff --git a/src/main/java/me/alexdevs/solstice/modules/god/commands/GodCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/god/commands/GodCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/god/commands/GodCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/god/commands/GodCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/god/data/GodLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/god/data/GodLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/god/data/GodLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/god/data/GodLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/god/data/GodPlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/god/data/GodPlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/god/data/GodPlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/god/data/GodPlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/hat/HatModule.java b/common/src/main/java/me/alexdevs/solstice/modules/hat/HatModule.java similarity index 99% rename from src/main/java/me/alexdevs/solstice/modules/hat/HatModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/hat/HatModule.java index 200f3c3b..57c23f0e 100644 --- a/src/main/java/me/alexdevs/solstice/modules/hat/HatModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/hat/HatModule.java @@ -7,6 +7,7 @@ import me.alexdevs.solstice.modules.hat.data.HatLocale; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; + import java.util.List; import java.util.stream.Stream; diff --git a/src/main/java/me/alexdevs/solstice/modules/hat/commands/HatCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/hat/commands/HatCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/hat/commands/HatCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/hat/commands/HatCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/hat/data/HatConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/hat/data/HatConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/hat/data/HatConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/hat/data/HatConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/hat/data/HatLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/hat/data/HatLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/hat/data/HatLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/hat/data/HatLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/heal/HealModule.java b/common/src/main/java/me/alexdevs/solstice/modules/heal/HealModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/heal/HealModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/heal/HealModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/heal/commands/HealCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/heal/commands/HealCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/heal/commands/HealCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/heal/commands/HealCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/helpOp/HelpOpModule.java b/common/src/main/java/me/alexdevs/solstice/modules/helpOp/HelpOpModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/helpOp/HelpOpModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/helpOp/HelpOpModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/helpOp/commands/HelpOpCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/helpOp/commands/HelpOpCommand.java similarity index 97% rename from src/main/java/me/alexdevs/solstice/modules/helpOp/commands/HelpOpCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/helpOp/commands/HelpOpCommand.java index 67a756f5..b0f4999c 100644 --- a/src/main/java/me/alexdevs/solstice/modules/helpOp/commands/HelpOpCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/helpOp/commands/HelpOpCommand.java @@ -5,9 +5,9 @@ import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.locale.Locale; import me.alexdevs.solstice.modules.helpOp.HelpOpModule; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import java.util.List; diff --git a/src/main/java/me/alexdevs/solstice/modules/helpOp/data/HelpOpLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/helpOp/data/HelpOpLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/helpOp/data/HelpOpLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/helpOp/data/HelpOpLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/home/HomeModule.java b/common/src/main/java/me/alexdevs/solstice/modules/home/HomeModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/home/HomeModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/HomeModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/home/commands/DeleteHomeCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/home/commands/DeleteHomeCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/home/commands/DeleteHomeCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/commands/DeleteHomeCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/home/commands/HomeCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/home/commands/HomeCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/home/commands/HomeCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/commands/HomeCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/home/commands/HomeOtherCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/home/commands/HomeOtherCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/home/commands/HomeOtherCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/commands/HomeOtherCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/home/commands/HomesCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/home/commands/HomesCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/home/commands/HomesCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/commands/HomesCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/home/commands/SetHomeCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/home/commands/SetHomeCommand.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/home/commands/SetHomeCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/commands/SetHomeCommand.java index a92b33c8..e2fb780a 100644 --- a/src/main/java/me/alexdevs/solstice/modules/home/commands/SetHomeCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/home/commands/SetHomeCommand.java @@ -7,9 +7,9 @@ import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.api.ServerLocation; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.home.HomeModule; import me.alexdevs.solstice.api.text.Components; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import java.util.List; diff --git a/src/main/java/me/alexdevs/solstice/modules/home/data/HomeConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/home/data/HomeConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/home/data/HomeConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/data/HomeConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/home/data/HomeLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/home/data/HomeLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/home/data/HomeLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/data/HomeLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/home/data/HomePlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/home/data/HomePlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/home/data/HomePlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/home/data/HomePlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ignite/IgniteModule.java b/common/src/main/java/me/alexdevs/solstice/modules/ignite/IgniteModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ignite/IgniteModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/ignite/IgniteModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ignite/commands/IgniteCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/ignite/commands/IgniteCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ignite/commands/IgniteCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/ignite/commands/IgniteCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ignore/IgnoreModule.java b/common/src/main/java/me/alexdevs/solstice/modules/ignore/IgnoreModule.java similarity index 96% rename from src/main/java/me/alexdevs/solstice/modules/ignore/IgnoreModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/ignore/IgnoreModule.java index 20f5a5c7..8864d76e 100644 --- a/src/main/java/me/alexdevs/solstice/modules/ignore/IgnoreModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/ignore/IgnoreModule.java @@ -2,13 +2,14 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.module.ModuleBase; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.ignore.commands.IgnoreCommand; import me.alexdevs.solstice.modules.ignore.commands.IgnoreListCommand; import me.alexdevs.solstice.modules.ignore.data.IgnoreLocale; import me.alexdevs.solstice.modules.ignore.data.IgnorePlayerData; import me.alexdevs.solstice.modules.styling.StylingModule; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.server.level.ServerPlayer; + import java.util.UUID; public class IgnoreModule extends ModuleBase.Toggleable { diff --git a/src/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreListCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreListCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreListCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/ignore/commands/IgnoreListCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ignore/data/IgnoreLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/ignore/data/IgnoreLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ignore/data/IgnoreLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/ignore/data/IgnoreLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/ignore/data/IgnorePlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/ignore/data/IgnorePlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/ignore/data/IgnorePlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/ignore/data/IgnorePlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/info/InfoModule.java b/common/src/main/java/me/alexdevs/solstice/modules/info/InfoModule.java similarity index 86% rename from src/main/java/me/alexdevs/solstice/modules/info/InfoModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/info/InfoModule.java index 33225d2c..f0246ed1 100644 --- a/src/main/java/me/alexdevs/solstice/modules/info/InfoModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/info/InfoModule.java @@ -3,6 +3,7 @@ import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.Paths; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.api.text.Format; import me.alexdevs.solstice.modules.info.commands.InfoCommand; @@ -10,7 +11,6 @@ import me.alexdevs.solstice.modules.info.commands.RulesCommand; import me.alexdevs.solstice.modules.info.data.InfoConfig; import me.alexdevs.solstice.modules.info.data.InfoLocale; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; @@ -25,10 +25,8 @@ public class InfoModule extends ModuleBase.Toggleable { public static final String ID = "info"; - private static final String[] startingPages = new String[]{ - "motd.txt", - "rules.txt", - "formatting.txt" + private static final String[] startingPages = new String[] { + "motd.txt", "rules.txt", "formatting.txt" }; public final String nameFilterRegex = "[^a-z0-9-]"; private final Path infoDir; @@ -70,15 +68,16 @@ public void init() { } } - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { if (getConfig().enableMotd) { if (!exists("motd")) { Solstice.LOGGER.warn("Could not send MOTD because info/motd.txt does not exist!"); return; } + Solstice.nextTick(() -> { - var motd = buildMotd(PlaceholderContext.of(handler.getPlayer())); - handler.getPlayer().sendSystemMessage(motd); + var motd = buildMotd(PlaceholderContext.of(player)); + player.sendSystemMessage(motd); }); } }); @@ -98,7 +97,8 @@ private String sanitize(String name) { public Collection enumerate() { return Arrays.stream(Objects.requireNonNull(infoDir.toFile().listFiles())) - .map(f -> f.getName().replace(".txt", "")).toList(); + .map(f -> f.getName().replace(".txt", "")) + .toList(); } public boolean exists(String name) { @@ -123,10 +123,8 @@ public Component getPage(String name, @Nullable PlaceholderContext context) { content.append(line).append("\n"); } var output = content.toString().trim(); - if (context != null) - return Format.parse(output, context); - else - return Component.nullToEmpty(output); + if (context != null) return Format.parse(output, context); + else return Component.nullToEmpty(output); } catch (IOException e) { Solstice.LOGGER.error("Could not read info file", e); return locale().get("pageError"); diff --git a/src/main/java/me/alexdevs/solstice/modules/info/commands/InfoCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/info/commands/InfoCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/info/commands/InfoCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/info/commands/InfoCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/info/commands/MotdCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/info/commands/MotdCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/info/commands/MotdCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/info/commands/MotdCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/info/commands/RulesCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/info/commands/RulesCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/info/commands/RulesCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/info/commands/RulesCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/info/data/InfoConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/info/data/InfoConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/info/data/InfoConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/info/data/InfoConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/info/data/InfoLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/info/data/InfoLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/info/data/InfoLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/info/data/InfoLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/inventorySee/ImmutableSlot.java b/common/src/main/java/me/alexdevs/solstice/modules/inventorySee/ImmutableSlot.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/inventorySee/ImmutableSlot.java rename to common/src/main/java/me/alexdevs/solstice/modules/inventorySee/ImmutableSlot.java diff --git a/src/main/java/me/alexdevs/solstice/modules/inventorySee/InventorySeeModule.java b/common/src/main/java/me/alexdevs/solstice/modules/inventorySee/InventorySeeModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/inventorySee/InventorySeeModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/inventorySee/InventorySeeModule.java diff --git a/common/src/main/java/me/alexdevs/solstice/modules/inventorySee/commands/InventorySeeCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/inventorySee/commands/InventorySeeCommand.java new file mode 100644 index 00000000..d07b09cc --- /dev/null +++ b/common/src/main/java/me/alexdevs/solstice/modules/inventorySee/commands/InventorySeeCommand.java @@ -0,0 +1,218 @@ +package me.alexdevs.solstice.modules.inventorySee.commands; + +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import eu.pb4.sgui.api.gui.SimpleGui; +import me.alexdevs.solstice.api.command.LocalGameProfile; +import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; +import me.alexdevs.solstice.api.utils.PlayerUtils; +import me.alexdevs.solstice.integrations.TrinketsApiProxy; +import me.alexdevs.solstice.integrations.TrinketsIntegration; +import me.alexdevs.solstice.modules.inventorySee.ImmutableSlot; +import me.alexdevs.solstice.modules.inventorySee.InventorySeeModule; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.core.component.DataComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.ChestMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import static net.minecraft.commands.Commands.argument; +import static net.minecraft.commands.Commands.literal; + +public class InventorySeeCommand extends ModCommand { + public InventorySeeCommand(InventorySeeModule module) { + super(module); + } + + @Override + public List getNames() { + return List.of("invsee", "inventorysee"); + } + + private static final LinkedHashMap> invSizes = new LinkedHashMap<>(); + + static { + invSizes.put(9, MenuType.GENERIC_9x1); + invSizes.put(18, MenuType.GENERIC_9x2); + invSizes.put(27, MenuType.GENERIC_9x3); + invSizes.put(36, MenuType.GENERIC_9x4); + invSizes.put(45, MenuType.GENERIC_9x5); + invSizes.put(54, MenuType.GENERIC_9x6); + } + + @Override + public LiteralArgumentBuilder command(String name) { + return literal(name).requires(require(2)) + .then(argument("player", StringArgumentType.word()).suggests(LocalGameProfile::suggest) + .executes(context -> { + var source = context.getSource(); + var player = source.getPlayerOrException(); + var targetProfile = LocalGameProfile.getProfile(context, "player"); + var targetOnline = PlayerUtils.isOnline(targetProfile.getId()); + + if (!targetOnline && !Permissions.check(player, getPermissionNode("offline"), 3)) { + source.sendSuccess(() -> module.locale().get("offlineNotAllowed"), false); + return 0; + } + + ServerPlayer target; + if (targetOnline) { + target = context.getSource() + .getServer() + .getPlayerList() + .getPlayer(targetProfile.getId()); + if (Permissions.check(target, getPermissionNode("exempt"), 3)) { + source.sendSuccess(() -> module.locale().get("exempt"), false); + return 0; + } + } else { + target = PlayerUtils.loadOfflinePlayer(targetProfile); + if (Permissions.check(targetProfile, getPermissionNode("exempt"), 3, source.getServer()) + .getNow(false)) { + source.sendSuccess(() -> module.locale().get("exempt"), false); + return 0; + } + } + + var canEdit = Permissions.check(player, getPermissionNode("edit"), 3); + + var targetInventory = target.getInventory(); + + var container = new SimpleGui(MenuType.GENERIC_9x5, player, false) { + @Override + public void onClose() { + if (!targetOnline) { + PlayerUtils.saveOfflinePlayer(target); + } + } + }; + + for (var i = 0; i < targetInventory.getContainerSize(); i++) { + Slot slot; + if (canEdit) { + slot = new Slot(targetInventory, i, 0, 0); + } else { + slot = new ImmutableSlot(targetInventory, i, 0, 0); + } + container.setSlotRedirect(i, slot); + } + + var barrier = new ItemStack(Items.BLACK_STAINED_GLASS_PANE); + barrier.set(DataComponents.CUSTOM_NAME, Component.literal("")); + for (var i = targetInventory.getContainerSize(); i < container.getSize(); i++) { + container.setSlot(i, barrier); + } + + container.setTitle(target.getName()); + + container.open(); + + var map = Map.of("user", Component.nullToEmpty(target.getGameProfile().getName())); + source.sendSuccess(() -> module.locale().get("openedInventory", map), true); + + return 1; + }) + .then(literal("trinkets").executes(context -> { + var source = context.getSource(); + var player = source.getPlayerOrException(); + var targetProfile = LocalGameProfile.getProfile(context, "player"); + var targetOnline = PlayerUtils.isOnline(targetProfile.getId()); + + if (!targetOnline && !Permissions.check(player, getPermissionNode("offline"), 3)) { + source.sendSuccess(() -> module.locale().get("offlineNotAllowed"), false); + return 0; + } + + ServerPlayer target; + if (targetOnline) { + target = context.getSource() + .getServer() + .getPlayerList() + .getPlayer(targetProfile.getId()); + if (Permissions.check(target, getPermissionNode("exempt"), 3)) { + source.sendSuccess(() -> module.locale().get("exempt"), false); + return 0; + } + } else { + target = PlayerUtils.loadOfflinePlayer(targetProfile); + if (Permissions.check(targetProfile, getPermissionNode("exempt"), 3, source.getServer()) + .getNow(false)) { + source.sendSuccess(() -> module.locale().get("exempt"), false); + return 0; + } + } + + if (!TrinketsIntegration.isAvailable()) { + source.sendSuccess(() -> module.locale().get("trinketsNotInstalled"), false); + return 0; + } + + var canEdit = Permissions.check(player, getPermissionNode("edit"), 3); + var trinkets = TrinketsApiProxy.get().getTrinketComponentInventory(target).orElse(null); + var slots = new ArrayList(); + + for (var group : trinkets.values()) { + for (var inventory : group.values()) { + for (var i = 0; i < inventory.getContainerSize(); i++) { + Slot slot; + + if (canEdit) { + slot = new Slot(inventory, i, 0, 0); + } else { + slot = new ImmutableSlot(inventory, i, 0, 0); + } + + slots.add(slot); + } + } + } + + var size = slots.size(); + MenuType handlerType = null; + for (var entry : invSizes.entrySet()) { + handlerType = entry.getValue(); + if (size <= entry.getKey()) { + break; + } + } + + var container = new SimpleGui(handlerType, player, false) { + @Override + public void onClose() { + if (!targetOnline) { + PlayerUtils.saveOfflinePlayer(target); + } + } + }; + + for (var i = 0; i < slots.size(); i++) { + var slot = slots.get(i); + container.setSlotRedirect(i, slot); + } + + var barrier = new ItemStack(Items.BLACK_STAINED_GLASS_PANE); + barrier.set(DataComponents.CUSTOM_NAME, Component.literal("")); + for (var i = size; i < container.getSize(); i++) { + container.setSlot(i, barrier); + } + + container.setTitle(target.getName()); + container.open(); + + var map = Map.of("user", Component.nullToEmpty(target.getGameProfile().getName())); + source.sendSuccess(() -> module.locale().get("openedTrinkets", map), true); + + return 1; + }))); + } +} diff --git a/src/main/java/me/alexdevs/solstice/modules/inventorySee/data/InventorySeeLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/inventorySee/data/InventorySeeLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/inventorySee/data/InventorySeeLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/inventorySee/data/InventorySeeLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/item/ItemModule.java b/common/src/main/java/me/alexdevs/solstice/modules/item/ItemModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/item/ItemModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/item/ItemModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/item/commands/ItemLoreCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/item/commands/ItemLoreCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/item/commands/ItemLoreCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/item/commands/ItemLoreCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/item/commands/ItemNameCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/item/commands/ItemNameCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/item/commands/ItemNameCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/item/commands/ItemNameCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/item/commands/MoreCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/item/commands/MoreCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/item/commands/MoreCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/item/commands/MoreCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/item/commands/RepairCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/item/commands/RepairCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/item/commands/RepairCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/item/commands/RepairCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/item/data/ItemLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/item/data/ItemLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/item/data/ItemLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/item/data/ItemLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/JailModule.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/JailModule.java similarity index 79% rename from src/main/java/me/alexdevs/solstice/modules/jail/JailModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/JailModule.java index 7146214b..c36837b2 100644 --- a/src/main/java/me/alexdevs/solstice/modules/jail/JailModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/jail/JailModule.java @@ -4,6 +4,7 @@ import me.alexdevs.solstice.api.ServerLocation; import me.alexdevs.solstice.api.command.TimeSpan; import me.alexdevs.solstice.api.events.CommandEvents; +import me.alexdevs.solstice.api.events.proxy.*; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.jail.commands.CheckJailCommand; import me.alexdevs.solstice.modules.jail.commands.JailCommand; @@ -14,15 +15,11 @@ import me.alexdevs.solstice.modules.jail.data.JailPlayerData; import me.alexdevs.solstice.modules.jail.data.JailServerData; import me.alexdevs.solstice.modules.spawn.SpawnModule; -import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.fabricmc.fabric.api.event.player.*; -import net.fabricmc.fabric.api.message.v1.ServerMessageEvents; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; + import java.util.Map; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -46,24 +43,25 @@ public void init() { commands.add(new UnjailCommand(this)); commands.add(new CheckJailCommand(this)); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { Solstice.nextTick(() -> { - var data = getPlayer(handler.getPlayer().getUUID()); + var data = getPlayer(player.getUUID()); + if (data.jailed) { - sendToJail(handler.getPlayer()); + sendToJail(player); } else if (data.teleportToPreviousLocation) { - unjailPlayer(handler.getPlayer().getUUID()); + unjailPlayer(player.getUUID()); } }); }); - ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, player, alive) -> { + ProxyServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, player, alive) -> { if (isPlayerJailed(player.getUUID())) { sendToJail(player); } }); - ServerLifecycleEvents.SERVER_STARTED.register((server) -> { + ProxyServerLifecycleEvents.SERVER_STARTED.register((server) -> { Solstice.scheduler.scheduleAtFixedRate(this::checkJailedPlayers, 0, 1, TimeUnit.SECONDS); }); @@ -84,7 +82,7 @@ public void init() { return true; }); - AttackBlockCallback.EVENT.register((player, world, hand, blockPos, direction) -> { + ProxyAttackBlockCallback.EVENT.register((player, world, hand, blockPos, direction) -> { if (isPlayerJailed(player.getUUID())) { player.sendSystemMessage(locale().get("cannotBreakBlocks")); return InteractionResult.FAIL; @@ -92,7 +90,7 @@ public void init() { return InteractionResult.PASS; }); - AttackEntityCallback.EVENT.register((player, world, hand, entity, entityHitResult) -> { + ProxyAttackEntityCallback.EVENT.register((player, world, hand, entity, entityHitResult) -> { if (isPlayerJailed(player.getUUID())) { player.sendSystemMessage(locale().get("cannotAttackEntities")); return InteractionResult.FAIL; @@ -100,7 +98,7 @@ public void init() { return InteractionResult.PASS; }); - PlayerBlockBreakEvents.BEFORE.register((world, player, blockPos, blockState, blockEntity) -> { + ProxyPlayerBlockBreakEvents.BEFORE.register((world, player, blockPos, blockState, blockEntity) -> { if (isPlayerJailed(player.getUUID())) { player.sendSystemMessage(locale().get("cannotBreakBlocks")); return false; @@ -109,7 +107,7 @@ public void init() { return true; }); - UseBlockCallback.EVENT.register((player, world, hand, blockHitResult) -> { + ProxyUseBlockCallback.EVENT.register((player, world, hand, blockHitResult) -> { if (isPlayerJailed(player.getUUID())) { player.sendSystemMessage(locale().get("cannotUseBlocks")); return InteractionResult.FAIL; @@ -117,7 +115,7 @@ public void init() { return InteractionResult.PASS; }); - UseEntityCallback.EVENT.register((player, world, hand, entity, entityHitResult) -> { + ProxyUseEntityCallback.EVENT.register((player, world, hand, entity, entityHitResult) -> { if (isPlayerJailed(player.getUUID())) { player.sendSystemMessage(locale().get("cannotUseEntities")); return InteractionResult.FAIL; @@ -125,7 +123,7 @@ public void init() { return InteractionResult.PASS; }); - UseItemCallback.EVENT.register((player, world, hand) -> { + ProxyUseItemCallback.EVENT.register((player, world, hand) -> { var stack = player.getItemInHand(hand); if (isPlayerJailed(player.getUUID())) { player.sendSystemMessage(locale().get("cannotUseItems")); @@ -134,10 +132,10 @@ public void init() { return InteractionResultHolder.pass(stack); }); - ServerMessageEvents.ALLOW_CHAT_MESSAGE.register((signedMessage, player, parameters) -> { + ProxyServerMessageEvents.ALLOW_CHAT_MESSAGE.register((signedMessage, player, parameters) -> { if (isPlayerJailed(player.getUUID())) { var config = getConfig(); - if(config.mute) { + if (config.mute) { player.sendSystemMessage(locale().get("cannotSpeak")); return false; } @@ -153,7 +151,8 @@ private void checkJailedPlayers() { for (var player : players) { var data = getPlayer(player.getUUID()); if (isPlayerJailed(player.getUUID()) && data.jailTime > 0) { - if (data.jailedOn != null && data.jailedOn.getTime() + (data.jailTime * 1000L) < System.currentTimeMillis()) { + if (data.jailedOn != null && + data.jailedOn.getTime() + (data.jailTime * 1000L) < System.currentTimeMillis()) { unjailPlayer(player.getUUID()); } } @@ -187,10 +186,14 @@ public void sendToJail(ServerPlayer player) { jail.teleport(player); var map = Map.of( - "player", player.getName(), - "jail", Component.nullToEmpty(data.jailName), - "duration", Component.nullToEmpty(TimeSpan.toLongString(data.jailTime)), - "reason", Component.nullToEmpty(data.jailReason) + "player", + player.getName(), + "jail", + Component.nullToEmpty(data.jailName), + "duration", + Component.nullToEmpty(TimeSpan.toLongString(data.jailTime)), + "reason", + Component.nullToEmpty(data.jailReason) ); Component text; diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/commands/CheckJailCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/commands/CheckJailCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/jail/commands/CheckJailCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/commands/CheckJailCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/commands/JailCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/commands/JailCommand.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/jail/commands/JailCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/commands/JailCommand.java index ca7159e2..5e37b245 100644 --- a/src/main/java/me/alexdevs/solstice/modules/jail/commands/JailCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/jail/commands/JailCommand.java @@ -11,9 +11,9 @@ import me.alexdevs.solstice.api.command.LocalGameProfile; import me.alexdevs.solstice.api.command.TimeSpan; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.core.coreModule.data.CorePlayerData; import me.alexdevs.solstice.modules.jail.JailModule; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.SharedSuggestionProvider; diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/commands/JailsCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/commands/JailsCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/jail/commands/JailsCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/commands/JailsCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/commands/UnjailCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/commands/UnjailCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/jail/commands/UnjailCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/commands/UnjailCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/data/JailConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/data/JailConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/jail/data/JailConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/data/JailConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/data/JailLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/data/JailLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/jail/data/JailLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/data/JailLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/data/JailPlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/data/JailPlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/jail/data/JailPlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/data/JailPlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/jail/data/JailServerData.java b/common/src/main/java/me/alexdevs/solstice/modules/jail/data/JailServerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/jail/data/JailServerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/jail/data/JailServerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kick/KickModule.java b/common/src/main/java/me/alexdevs/solstice/modules/kick/KickModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kick/KickModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/kick/KickModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kick/commands/KickCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/kick/commands/KickCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kick/commands/KickCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/kick/commands/KickCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/KitInventory.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/KitInventory.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/KitInventory.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/KitInventory.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/KitModule.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/KitModule.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/kit/KitModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/KitModule.java index de1046e2..3f9d79a0 100644 --- a/src/main/java/me/alexdevs/solstice/modules/kit/KitModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/kit/KitModule.java @@ -3,12 +3,13 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.events.SolsticeEvents; import me.alexdevs.solstice.api.module.ModuleBase; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.kit.commands.KitCommand; import me.alexdevs.solstice.modules.kit.commands.KitsCommand; import me.alexdevs.solstice.modules.kit.data.*; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; + import java.util.Date; import java.util.List; import java.util.Map; diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/Utils.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/Utils.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/Utils.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/Utils.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/commands/KitCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/commands/KitCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/commands/KitCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/commands/KitCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/commands/KitsCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/commands/KitsCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/commands/KitsCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/commands/KitsCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/data/Kit.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/data/Kit.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/data/Kit.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/data/Kit.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/data/KitConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/data/KitConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/data/KitConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/data/KitConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/data/KitLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/data/KitLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/data/KitLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/data/KitLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/data/KitPlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/data/KitPlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/data/KitPlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/data/KitPlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/kit/data/KitServerData.java b/common/src/main/java/me/alexdevs/solstice/modules/kit/data/KitServerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/kit/data/KitServerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/kit/data/KitServerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/mail/MailModule.java b/common/src/main/java/me/alexdevs/solstice/modules/mail/MailModule.java similarity index 81% rename from src/main/java/me/alexdevs/solstice/modules/mail/MailModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/mail/MailModule.java index 82946319..7b774817 100644 --- a/src/main/java/me/alexdevs/solstice/modules/mail/MailModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/mail/MailModule.java @@ -3,12 +3,12 @@ import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.PlayerMail; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.ignore.IgnoreModule; import me.alexdevs.solstice.modules.mail.commands.MailCommand; import me.alexdevs.solstice.modules.mail.data.MailLocale; import me.alexdevs.solstice.modules.mail.data.MailPlayerData; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import java.util.List; import java.util.UUID; @@ -28,15 +28,16 @@ public void init() { commands.add(new MailCommand(this)); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { - var player = handler.getPlayer(); + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { var playerContext = PlaceholderContext.of(player); - Solstice.scheduler.schedule(() -> { - if (!getMailData(player.getUUID()).mails.isEmpty()) { - player.sendSystemMessage(locale().get("mailPending", playerContext)); - } - }, 1, TimeUnit.SECONDS); + Solstice.scheduler.schedule( + () -> { + if (!getMailData(player.getUUID()).mails.isEmpty()) { + player.sendSystemMessage(locale().get("mailPending", playerContext)); + } + }, 1, TimeUnit.SECONDS + ); }); } diff --git a/src/main/java/me/alexdevs/solstice/modules/mail/commands/MailCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/mail/commands/MailCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/mail/commands/MailCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/mail/commands/MailCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/mail/data/MailLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/mail/data/MailLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/mail/data/MailLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/mail/data/MailLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/mail/data/MailPlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/mail/data/MailPlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/mail/data/MailPlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/mail/data/MailPlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/DummyExplosion.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/DummyExplosion.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/DummyExplosion.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/DummyExplosion.java diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/MiscellaneousModule.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/MiscellaneousModule.java similarity index 68% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/MiscellaneousModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/MiscellaneousModule.java index 4b651d92..4ed9b160 100644 --- a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/MiscellaneousModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/MiscellaneousModule.java @@ -1,14 +1,18 @@ package me.alexdevs.solstice.modules.miscellaneous; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyEntitySleepEvents; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; -import me.alexdevs.solstice.modules.miscellaneous.commands.*; +import me.alexdevs.solstice.modules.miscellaneous.commands.EffectsCommand; +import me.alexdevs.solstice.modules.miscellaneous.commands.NudgeCommand; +import me.alexdevs.solstice.modules.miscellaneous.commands.SleepCommand; +import me.alexdevs.solstice.modules.miscellaneous.commands.TopCommand; import me.alexdevs.solstice.modules.miscellaneous.data.MiscellaneousLocale; -import net.fabricmc.fabric.api.entity.event.v1.EntitySleepEvents; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.LivingEntity; + import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -30,13 +34,13 @@ public void init() { commands.add(new SleepCommand(this)); commands.add(new NudgeCommand(this)); commands.add(new TopCommand(this)); - //commands.add(new KittyCannonCommand(this)); - //commands.add(new RocketCommand(this)); + // commands.add(new KittyCannonCommand(this)); + // commands.add(new RocketCommand(this)); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> commandSleeping.remove(handler.getPlayer().getUUID())); - EntitySleepEvents.STOP_SLEEPING.register((entity, pos) -> commandSleeping.remove(entity.getUUID())); + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> commandSleeping.remove(player.getUUID())); + ProxyEntitySleepEvents.STOP_SLEEPING.register((entity, pos) -> commandSleeping.remove(entity.getUUID())); - EntitySleepEvents.ALLOW_SLEEP_TIME.register((player, pos, vanillaResult) -> { + ProxyEntitySleepEvents.ALLOW_SLEEP_TIME.register((player, pos, vanillaResult) -> { if (commandSleeping.getOrDefault(player.getUUID(), false)) { return InteractionResult.SUCCESS; } @@ -44,7 +48,7 @@ public void init() { return InteractionResult.PASS; }); - EntitySleepEvents.ALLOW_RESETTING_TIME.register(player -> { + ProxyEntitySleepEvents.ALLOW_RESETTING_TIME.register(player -> { if (commandSleeping.getOrDefault(player.getUUID(), false)) { return !player.level().isDay(); } diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/EffectsCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/EffectsCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/EffectsCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/EffectsCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/KittyCannonCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/KittyCannonCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/KittyCannonCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/KittyCannonCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/NudgeCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/NudgeCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/NudgeCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/NudgeCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/RocketCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/RocketCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/RocketCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/RocketCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/SleepCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/SleepCommand.java similarity index 97% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/SleepCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/SleepCommand.java index afae492b..9a4b5d8d 100644 --- a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/SleepCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/SleepCommand.java @@ -7,6 +7,7 @@ import net.minecraft.commands.Commands; import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.world.entity.LivingEntity; + import java.util.List; public class SleepCommand extends ModCommand { @@ -40,7 +41,6 @@ public LiteralArgumentBuilder command(String name) { } } return count; - }) - ); + })); } } diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/TopCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/TopCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/TopCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/commands/TopCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/miscellaneous/data/MiscellaneousLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/data/MiscellaneousLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/miscellaneous/data/MiscellaneousLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/miscellaneous/data/MiscellaneousLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/mute/MuteModule.java b/common/src/main/java/me/alexdevs/solstice/modules/mute/MuteModule.java similarity index 88% rename from src/main/java/me/alexdevs/solstice/modules/mute/MuteModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/mute/MuteModule.java index 40a412a5..7bac3f07 100644 --- a/src/main/java/me/alexdevs/solstice/modules/mute/MuteModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/mute/MuteModule.java @@ -1,12 +1,12 @@ package me.alexdevs.solstice.modules.mute; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerMessageEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.mute.commands.MuteCommand; import me.alexdevs.solstice.modules.mute.commands.UnmuteCommand; import me.alexdevs.solstice.modules.mute.data.MuteLocale; import me.alexdevs.solstice.modules.mute.data.MutePlayerData; -import net.fabricmc.fabric.api.message.v1.ServerMessageEvents; import java.util.UUID; @@ -25,11 +25,12 @@ public void init() { commands.add(new MuteCommand(this)); commands.add(new UnmuteCommand(this)); - ServerMessageEvents.ALLOW_CHAT_MESSAGE.register((signedMessage, player, parameters) -> { + ProxyServerMessageEvents.ALLOW_CHAT_MESSAGE.register((signedMessage, player, parameters) -> { if (isMuted(player.getUUID())) { player.sendSystemMessage(locale().get("youAreMuted")); return false; } + return true; }); } diff --git a/src/main/java/me/alexdevs/solstice/modules/mute/commands/MuteCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/mute/commands/MuteCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/mute/commands/MuteCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/mute/commands/MuteCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/mute/commands/UnmuteCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/mute/commands/UnmuteCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/mute/commands/UnmuteCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/mute/commands/UnmuteCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/mute/data/MuteLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/mute/data/MuteLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/mute/data/MuteLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/mute/data/MuteLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/mute/data/MutePlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/mute/data/MutePlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/mute/data/MutePlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/mute/data/MutePlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/near/NearModule.java b/common/src/main/java/me/alexdevs/solstice/modules/near/NearModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/near/NearModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/near/NearModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/near/commands/NearCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/near/commands/NearCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/near/commands/NearCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/near/commands/NearCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/near/data/NearConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/near/data/NearConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/near/data/NearConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/near/data/NearConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/near/data/NearLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/near/data/NearLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/near/data/NearLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/near/data/NearLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/note/NoteModule.java b/common/src/main/java/me/alexdevs/solstice/modules/note/NoteModule.java similarity index 79% rename from src/main/java/me/alexdevs/solstice/modules/note/NoteModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/note/NoteModule.java index 4521a788..c0d3f1be 100644 --- a/src/main/java/me/alexdevs/solstice/modules/note/NoteModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/note/NoteModule.java @@ -2,16 +2,17 @@ import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.api.text.Components; import me.alexdevs.solstice.modules.note.commands.NotesCommand; import me.alexdevs.solstice.modules.note.data.Note; import me.alexdevs.solstice.modules.note.data.NoteConfig; import me.alexdevs.solstice.modules.note.data.NoteLocale; import me.alexdevs.solstice.modules.note.data.NotePlayerData; -import me.lucko.fabric.api.permissions.v0.Permissions; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.network.chat.Component; + import java.util.List; import java.util.Map; import java.util.UUID; @@ -31,12 +32,12 @@ public void init() { commands.add(new NotesCommand(this)); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { var config = Solstice.configManager.getData(NoteConfig.class); + if (!config.showLogin) return; - var player = handler.getPlayer(); var notes = getNotes(player.getUUID()); if (notes.isEmpty()) @@ -49,11 +50,13 @@ public void init() { locale().raw("hoverCheck"), "/notes " + player.getGameProfile().getName() ); - final var text = locale().get("loginInfo", context, Map.of( - "user", Component.nullToEmpty(player.getGameProfile().getName()), - "notes", Component.nullToEmpty(String.valueOf(notes.size())), - "checkButton", checkButton - )); + final var text = locale().get( + "loginInfo", context, Map.of( + "user", Component.nullToEmpty(player.getGameProfile().getName()), + "notes", Component.nullToEmpty(String.valueOf(notes.size())), + "checkButton", checkButton + ) + ); Solstice.nextTick(() -> server.getPlayerList().getPlayers().forEach(pl -> { diff --git a/src/main/java/me/alexdevs/solstice/modules/note/commands/NotesCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/note/commands/NotesCommand.java similarity index 99% rename from src/main/java/me/alexdevs/solstice/modules/note/commands/NotesCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/note/commands/NotesCommand.java index 98771570..9914dcd2 100644 --- a/src/main/java/me/alexdevs/solstice/modules/note/commands/NotesCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/note/commands/NotesCommand.java @@ -7,12 +7,12 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import me.alexdevs.solstice.api.command.LocalGameProfile; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.api.text.Components; import me.alexdevs.solstice.api.text.Format; import me.alexdevs.solstice.core.coreModule.CoreModule; import me.alexdevs.solstice.modules.note.NoteModule; import me.alexdevs.solstice.modules.note.data.Note; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import java.text.SimpleDateFormat; diff --git a/src/main/java/me/alexdevs/solstice/modules/note/data/Note.java b/common/src/main/java/me/alexdevs/solstice/modules/note/data/Note.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/note/data/Note.java rename to common/src/main/java/me/alexdevs/solstice/modules/note/data/Note.java diff --git a/src/main/java/me/alexdevs/solstice/modules/note/data/NoteConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/note/data/NoteConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/note/data/NoteConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/note/data/NoteConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/note/data/NoteLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/note/data/NoteLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/note/data/NoteLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/note/data/NoteLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/note/data/NotePlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/note/data/NotePlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/note/data/NotePlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/note/data/NotePlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/notifications/NotificationsModule.java b/common/src/main/java/me/alexdevs/solstice/modules/notifications/NotificationsModule.java similarity index 86% rename from src/main/java/me/alexdevs/solstice/modules/notifications/NotificationsModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/notifications/NotificationsModule.java index 1e895936..a94b6d17 100644 --- a/src/main/java/me/alexdevs/solstice/modules/notifications/NotificationsModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/notifications/NotificationsModule.java @@ -1,6 +1,7 @@ package me.alexdevs.solstice.modules.notifications; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerMessageEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.afk.AfkModule; import me.alexdevs.solstice.modules.notifications.commands.NotificationsCommand; @@ -8,7 +9,6 @@ import me.alexdevs.solstice.modules.notifications.data.NotificationsLocale; import me.alexdevs.solstice.modules.notifications.data.NotificationsPlayerData; import me.alexdevs.solstice.modules.notifications.data.PlayerNotificationSettings; -import net.fabricmc.fabric.api.message.v1.ServerMessageEvents; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; @@ -29,11 +29,11 @@ public void init() { commands.add(new NotificationsCommand(this)); - ServerMessageEvents.CHAT_MESSAGE.register((message, sender, parameters) -> { + ProxyServerMessageEvents.CHAT_MESSAGE.register((message, sender, parameters) -> { var content = message.decoratedContent().getString().toLowerCase(); sender.getServer().getPlayerList().getPlayers().forEach(player -> { - if(player.equals(sender)) { + if (player.equals(sender)) { return; } @@ -50,8 +50,7 @@ public void init() { public static void notify(ServerPlayer player) { var module = Solstice.modules.getModule(NotificationsModule.class); - if (!module.isEnabled()) - return; + if (!module.isEnabled()) return; module.notifyPlayer(player); } @@ -78,14 +77,12 @@ public PlayerNotificationSettings getPlayerSettings(ServerPlayer player) { } public boolean shouldNotify(ServerPlayer player) { - if (!isEnabled()) - return false; + if (!isEnabled()) return false; var data = getPlayerData(player); var settings = getPlayerSettings(player); - if (!data.enable) - return false; + if (!data.enable) return false; var afkModule = Solstice.modules.getModule(AfkModule.class); if (afkModule.isEnabled()) { @@ -96,8 +93,7 @@ public boolean shouldNotify(ServerPlayer player) { } public void notifyPlayer(ServerPlayer player) { - if (!shouldNotify(player)) - return; + if (!shouldNotify(player)) return; var settings = getPlayerSettings(player); var id = ResourceLocation.tryParse(settings.soundId()); @@ -105,6 +101,11 @@ public void notifyPlayer(ServerPlayer player) { return; } - player.playNotifySound(SoundEvent.createVariableRangeEvent(id), SoundSource.MASTER, settings.volume(), settings.pitch()); + player.playNotifySound( + SoundEvent.createVariableRangeEvent(id), + SoundSource.MASTER, + settings.volume(), + settings.pitch() + ); } } diff --git a/src/main/java/me/alexdevs/solstice/modules/notifications/commands/NotificationsCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/notifications/commands/NotificationsCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/notifications/commands/NotificationsCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/notifications/commands/NotificationsCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsPlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsPlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsPlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/notifications/data/NotificationsPlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/notifications/data/PlayerNotificationSettings.java b/common/src/main/java/me/alexdevs/solstice/modules/notifications/data/PlayerNotificationSettings.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/notifications/data/PlayerNotificationSettings.java rename to common/src/main/java/me/alexdevs/solstice/modules/notifications/data/PlayerNotificationSettings.java diff --git a/src/main/java/me/alexdevs/solstice/modules/placeholders/PlaceholdersModule.java b/common/src/main/java/me/alexdevs/solstice/modules/placeholders/PlaceholdersModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/placeholders/PlaceholdersModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/placeholders/PlaceholdersModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/powertool/Action.java b/common/src/main/java/me/alexdevs/solstice/modules/powertool/Action.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/powertool/Action.java rename to common/src/main/java/me/alexdevs/solstice/modules/powertool/Action.java diff --git a/src/main/java/me/alexdevs/solstice/modules/powertool/PowerToolModule.java b/common/src/main/java/me/alexdevs/solstice/modules/powertool/PowerToolModule.java similarity index 89% rename from src/main/java/me/alexdevs/solstice/modules/powertool/PowerToolModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/powertool/PowerToolModule.java index 83948df4..e000d8f0 100644 --- a/src/main/java/me/alexdevs/solstice/modules/powertool/PowerToolModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/powertool/PowerToolModule.java @@ -5,17 +5,17 @@ import eu.pb4.placeholders.api.PlaceholderContext; import eu.pb4.placeholders.api.Placeholders; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.*; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.powertool.commands.PowerToolCommand; import me.alexdevs.solstice.modules.powertool.data.PowerToolLocale; import me.alexdevs.solstice.modules.powertool.data.PowerToolPlayerData; -import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; -import net.fabricmc.fabric.api.event.player.*; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.item.ItemStack; + import java.util.UUID; public class PowerToolModule extends ModuleBase.Toggleable { @@ -34,10 +34,10 @@ public void init() { commands.add(new PowerToolCommand(this)); - CommandRegistrationCallback.EVENT.register((dispatcher, registry, environment) -> this.dispatcher = dispatcher); + ProxyCommandRegistrationCallback.EVENT.register((dispatcher, registry, environment) -> this.dispatcher = dispatcher); // USE - UseItemCallback.EVENT.register((player, world, hand) -> { + ProxyUseItemCallback.EVENT.register((player, world, hand) -> { var stack = player.getItemInHand(hand); if (!stack.isEmpty()) { var data = getData(player.getUUID()); @@ -56,7 +56,7 @@ public void init() { }); // ATTACK_BLOCK - AttackBlockCallback.EVENT.register((player, world, hand, blockPos, direction) -> { + ProxyAttackBlockCallback.EVENT.register((player, world, hand, blockPos, direction) -> { var stack = player.getItemInHand(hand); if (!stack.isEmpty()) { var data = getData(player.getUUID()); @@ -75,7 +75,7 @@ public void init() { }); // ATTACK_ENTITY - AttackEntityCallback.EVENT.register((player, world, hand, entity, entityHitResult) -> { + ProxyAttackEntityCallback.EVENT.register((player, world, hand, entity, entityHitResult) -> { var stack = player.getItemInHand(hand); if (!stack.isEmpty()) { var data = getData(player.getUUID()); @@ -94,7 +94,7 @@ public void init() { }); // INTERACT_BLOCK - UseBlockCallback.EVENT.register((player, world, hand, blockHitResult) -> { + ProxyUseBlockCallback.EVENT.register((player, world, hand, blockHitResult) -> { var stack = player.getItemInHand(hand); if (!stack.isEmpty()) { var data = getData(player.getUUID()); @@ -113,7 +113,7 @@ public void init() { }); // INTERACT_ENTITY - UseEntityCallback.EVENT.register((player, world, hand, entity, hit) -> { + ProxyUseEntityCallback.EVENT.register((player, world, hand, entity, hit) -> { var stack = player.getItemInHand(hand); if (!stack.isEmpty()) { var data = getData(player.getUUID()); diff --git a/src/main/java/me/alexdevs/solstice/modules/powertool/commands/PowerToolCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/powertool/commands/PowerToolCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/powertool/commands/PowerToolCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/powertool/commands/PowerToolCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolPlayerData.java b/common/src/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolPlayerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolPlayerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/powertool/data/PowerToolPlayerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java b/common/src/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/restart/commands/RestartCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/restart/commands/RestartCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/restart/commands/RestartCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/restart/commands/RestartCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/restart/data/RestartConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/restart/data/RestartConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/restart/data/RestartConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/restart/data/RestartConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/restart/data/RestartLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/restart/data/RestartLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/restart/data/RestartLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/restart/data/RestartLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/rtp/RTPModule.java b/common/src/main/java/me/alexdevs/solstice/modules/rtp/RTPModule.java similarity index 90% rename from src/main/java/me/alexdevs/solstice/modules/rtp/RTPModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/rtp/RTPModule.java index b1a869de..9d02aaab 100644 --- a/src/main/java/me/alexdevs/solstice/modules/rtp/RTPModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/rtp/RTPModule.java @@ -1,15 +1,16 @@ package me.alexdevs.solstice.modules.rtp; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerTickEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.rtp.commands.RTPCommand; import me.alexdevs.solstice.modules.rtp.core.Locator; import me.alexdevs.solstice.modules.rtp.data.RTPConfig; import me.alexdevs.solstice.modules.rtp.data.RTPLocale; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.biome.Biome; + import java.util.ArrayList; public class RTPModule extends ModuleBase.Toggleable { @@ -28,7 +29,7 @@ public void init() { commands.add(new RTPCommand(this)); - ServerTickEvents.END_SERVER_TICK.register(server -> locators.removeIf(Locator::tick)); + ProxyServerTickEvents.END_SERVER_TICK.register(server -> locators.removeIf(Locator::tick)); } public RTPConfig getConfig() { diff --git a/src/main/java/me/alexdevs/solstice/modules/rtp/commands/RTPCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/rtp/commands/RTPCommand.java similarity index 99% rename from src/main/java/me/alexdevs/solstice/modules/rtp/commands/RTPCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/rtp/commands/RTPCommand.java index 34fa8c1d..79c5d243 100644 --- a/src/main/java/me/alexdevs/solstice/modules/rtp/commands/RTPCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/rtp/commands/RTPCommand.java @@ -5,10 +5,10 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.api.utils.RegistryUtils; import me.alexdevs.solstice.modules.rtp.RTPModule; import me.alexdevs.solstice.modules.rtp.core.Locator; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.SharedSuggestionProvider; import net.minecraft.commands.arguments.ResourceArgument; diff --git a/src/main/java/me/alexdevs/solstice/modules/rtp/core/Locator.java b/common/src/main/java/me/alexdevs/solstice/modules/rtp/core/Locator.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/rtp/core/Locator.java rename to common/src/main/java/me/alexdevs/solstice/modules/rtp/core/Locator.java diff --git a/src/main/java/me/alexdevs/solstice/modules/rtp/data/RTPConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/rtp/data/RTPConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/rtp/data/RTPConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/rtp/data/RTPConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/rtp/data/RTPLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/rtp/data/RTPLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/rtp/data/RTPLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/rtp/data/RTPLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/seen/SeenModule.java b/common/src/main/java/me/alexdevs/solstice/modules/seen/SeenModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/seen/SeenModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/seen/SeenModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/seen/commands/SeenCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/seen/commands/SeenCommand.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/seen/commands/SeenCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/seen/commands/SeenCommand.java index 0d5389a7..55fd0202 100644 --- a/src/main/java/me/alexdevs/solstice/modules/seen/commands/SeenCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/seen/commands/SeenCommand.java @@ -6,10 +6,10 @@ import me.alexdevs.solstice.api.ServerLocation; import me.alexdevs.solstice.api.command.LocalGameProfile; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.core.coreModule.CoreModule; import me.alexdevs.solstice.modules.seen.SeenModule; import me.alexdevs.solstice.api.text.Format; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/me/alexdevs/solstice/modules/seen/data/SeenLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/seen/data/SeenLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/seen/data/SeenLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/seen/data/SeenLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/sign/SignModule.java b/common/src/main/java/me/alexdevs/solstice/modules/sign/SignModule.java similarity index 94% rename from src/main/java/me/alexdevs/solstice/modules/sign/SignModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/sign/SignModule.java index 94443edf..a303cf7f 100644 --- a/src/main/java/me/alexdevs/solstice/modules/sign/SignModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/sign/SignModule.java @@ -2,10 +2,11 @@ import eu.pb4.placeholders.api.parsers.LegacyFormattingParser; import me.alexdevs.solstice.api.module.ModuleBase; -import me.lucko.fabric.api.permissions.v0.Permissions; +import me.alexdevs.solstice.api.permissions.Permissions; import net.minecraft.server.network.FilteredText; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.SignText; + import java.util.List; public class SignModule extends ModuleBase.Toggleable { diff --git a/src/main/java/me/alexdevs/solstice/modules/skull/SkullModule.java b/common/src/main/java/me/alexdevs/solstice/modules/skull/SkullModule.java similarity index 94% rename from src/main/java/me/alexdevs/solstice/modules/skull/SkullModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/skull/SkullModule.java index 036f2513..716cc666 100644 --- a/src/main/java/me/alexdevs/solstice/modules/skull/SkullModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/skull/SkullModule.java @@ -5,10 +5,8 @@ import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.skull.commands.SkullCommand; import net.minecraft.core.component.DataComponents; -import net.minecraft.nbt.StringTag; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraft.world.item.PlayerHeadItem; import net.minecraft.world.item.component.ResolvableProfile; import java.util.Optional; diff --git a/src/main/java/me/alexdevs/solstice/modules/skull/commands/SkullCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/skull/commands/SkullCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/skull/commands/SkullCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/skull/commands/SkullCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/smite/SmiteModule.java b/common/src/main/java/me/alexdevs/solstice/modules/smite/SmiteModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/smite/SmiteModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/smite/SmiteModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/smite/commands/SmiteCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/smite/commands/SmiteCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/smite/commands/SmiteCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/smite/commands/SmiteCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/spawn/SpawnModule.java b/common/src/main/java/me/alexdevs/solstice/modules/spawn/SpawnModule.java similarity index 83% rename from src/main/java/me/alexdevs/solstice/modules/spawn/SpawnModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/spawn/SpawnModule.java index 03765ae0..bfb5e2c4 100644 --- a/src/main/java/me/alexdevs/solstice/modules/spawn/SpawnModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/spawn/SpawnModule.java @@ -3,6 +3,7 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.ServerLocation; import me.alexdevs.solstice.api.events.SolsticeEvents; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.modules.spawn.commands.FirstSpawnCommand; import me.alexdevs.solstice.modules.spawn.commands.SetFirstSpawnCommand; @@ -11,7 +12,6 @@ import me.alexdevs.solstice.modules.spawn.data.SpawnConfig; import me.alexdevs.solstice.modules.spawn.data.SpawnLocale; import me.alexdevs.solstice.modules.spawn.data.SpawnServerData; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -48,21 +48,25 @@ public void init() { } }); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> { var config = getConfig(); if (config.globalSpawn.onLogin) { Solstice.nextTick(() -> { - getGlobalSpawnPosition().teleport(handler.getPlayer(), false); + getGlobalSpawnPosition().teleport(player, false); }); } }); SolsticeEvents.READY.register((instance, server) -> { var spawnData = getServerData(); + if (spawnData.spawn != null) { var legacy = spawnData.spawn; var world = legacy.getWorld(server); - world.setDefaultSpawnPos(new BlockPos((int) legacy.getX(), (int) legacy.getY(), (int) legacy.getZ()), legacy.getYaw()); + world.setDefaultSpawnPos( + new BlockPos((int) legacy.getX(), (int) legacy.getY(), (int) legacy.getZ()), + legacy.getYaw() + ); spawnData.spawn = null; } }); @@ -75,7 +79,14 @@ public ServerLocation getSpawn() { if (spawnPosition == null) { var server = Solstice.server; var spawnPos = server.overworld().getSharedSpawnPos(); - spawnPosition = new ServerLocation(spawnPos.getX(), spawnPos.getY(), spawnPos.getZ(), 0, 0, server.overworld()); + spawnPosition = new ServerLocation( + spawnPos.getX(), + spawnPos.getY(), + spawnPos.getZ(), + 0, + 0, + server.overworld() + ); } return spawnPosition; } @@ -104,8 +115,12 @@ public ServerLocation getWorldSpawn(ServerLevel world) { } return new ServerLocation( - worldSpawnPosition.x(), worldSpawnPosition.y(), worldSpawnPosition.z(), - worldSpawnYaw, 0, world + worldSpawnPosition.x(), + worldSpawnPosition.y(), + worldSpawnPosition.z(), + worldSpawnYaw, + 0, + world ); } diff --git a/src/main/java/me/alexdevs/solstice/modules/spawn/commands/FirstSpawnCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/FirstSpawnCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/spawn/commands/FirstSpawnCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/FirstSpawnCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SetFirstSpawnCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SetFirstSpawnCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/spawn/commands/SetFirstSpawnCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SetFirstSpawnCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SetSpawnCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SetSpawnCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/spawn/commands/SetSpawnCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SetSpawnCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SpawnCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SpawnCommand.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/spawn/commands/SpawnCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SpawnCommand.java index f4f77dee..46fcf88b 100644 --- a/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SpawnCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/spawn/commands/SpawnCommand.java @@ -5,8 +5,8 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.spawn.SpawnModule; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.arguments.DimensionArgument; import net.minecraft.commands.arguments.EntityArgument; diff --git a/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnServerData.java b/common/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnServerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnServerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/spawn/data/SpawnServerData.java diff --git a/src/main/java/me/alexdevs/solstice/modules/staffChat/StaffChatModule.java b/common/src/main/java/me/alexdevs/solstice/modules/staffChat/StaffChatModule.java similarity index 82% rename from src/main/java/me/alexdevs/solstice/modules/staffChat/StaffChatModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/staffChat/StaffChatModule.java index c856a8b6..b49c15a0 100644 --- a/src/main/java/me/alexdevs/solstice/modules/staffChat/StaffChatModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/staffChat/StaffChatModule.java @@ -2,14 +2,15 @@ import eu.pb4.placeholders.api.node.TextNode; import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.ProxyServerMessageEvents; import me.alexdevs.solstice.api.module.ModuleBase; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.api.text.parser.MarkdownParser; import me.alexdevs.solstice.modules.staffChat.commands.StaffChatCommand; import me.alexdevs.solstice.modules.staffChat.data.StaffChatLocale; -import me.lucko.fabric.api.permissions.v0.Permissions; -import net.fabricmc.fabric.api.message.v1.ServerMessageEvents; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; + import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -28,14 +29,12 @@ public void init() { commands.add(new StaffChatCommand(this)); - ServerMessageEvents.ALLOW_CHAT_MESSAGE.register((message, player, pars) -> { - if (stickyStaffChat.getOrDefault(player.getUUID(), false) - && canUseStaffChat(player)) { - + ProxyServerMessageEvents.ALLOW_CHAT_MESSAGE.register((message, player, pars) -> { + if (stickyStaffChat.getOrDefault(player.getUUID(), false) && canUseStaffChat(player)) { sendStaffChatMessage(player.getDisplayName(), message.decoratedContent()); - return false; } + return true; }); } @@ -48,10 +47,8 @@ public void sendStaffChatMessage(Component sourceName, final Component message) var formattedMessage = MarkdownParser.defaultParser.parseNode(TextNode.convert(message)).toText(); - var text = Solstice.localeManager.getLocale(ID).get("message", Map.of( - "name", sourceName, - "message", formattedMessage - )); + var text = Solstice.localeManager.getLocale(ID) + .get("message", Map.of("name", sourceName, "message", formattedMessage)); Solstice.server.sendSystemMessage(text); Solstice.server.getPlayerList().getPlayers().forEach(player -> { diff --git a/src/main/java/me/alexdevs/solstice/modules/staffChat/commands/StaffChatCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/staffChat/commands/StaffChatCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/staffChat/commands/StaffChatCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/staffChat/commands/StaffChatCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/staffChat/data/StaffChatLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/staffChat/data/StaffChatLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/staffChat/data/StaffChatLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/staffChat/data/StaffChatLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/styling/CustomSentMessage.java b/common/src/main/java/me/alexdevs/solstice/modules/styling/CustomSentMessage.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/styling/CustomSentMessage.java rename to common/src/main/java/me/alexdevs/solstice/modules/styling/CustomSentMessage.java diff --git a/src/main/java/me/alexdevs/solstice/modules/styling/StylingModule.java b/common/src/main/java/me/alexdevs/solstice/modules/styling/StylingModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/styling/StylingModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/styling/StylingModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/styling/data/StylingConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/styling/data/StylingConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/styling/data/StylingConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/styling/data/StylingConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/styling/formatters/AdvancementFormatter.java b/common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/AdvancementFormatter.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/styling/formatters/AdvancementFormatter.java rename to common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/AdvancementFormatter.java diff --git a/src/main/java/me/alexdevs/solstice/modules/styling/formatters/ChatFormatter.java b/common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/ChatFormatter.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/styling/formatters/ChatFormatter.java rename to common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/ChatFormatter.java diff --git a/src/main/java/me/alexdevs/solstice/modules/styling/formatters/ConnectionActivityFormatter.java b/common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/ConnectionActivityFormatter.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/styling/formatters/ConnectionActivityFormatter.java rename to common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/ConnectionActivityFormatter.java diff --git a/src/main/java/me/alexdevs/solstice/modules/styling/formatters/DeathFormatter.java b/common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/DeathFormatter.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/styling/formatters/DeathFormatter.java rename to common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/DeathFormatter.java diff --git a/src/main/java/me/alexdevs/solstice/modules/styling/formatters/EmoteFormatter.java b/common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/EmoteFormatter.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/styling/formatters/EmoteFormatter.java rename to common/src/main/java/me/alexdevs/solstice/modules/styling/formatters/EmoteFormatter.java diff --git a/src/main/java/me/alexdevs/solstice/modules/sudo/SudoModule.java b/common/src/main/java/me/alexdevs/solstice/modules/sudo/SudoModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/sudo/SudoModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/sudo/SudoModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/sudo/commands/DoAsCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/sudo/commands/DoAsCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/sudo/commands/DoAsCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/sudo/commands/DoAsCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/sudo/commands/SudoCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/sudo/commands/SudoCommand.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/sudo/commands/SudoCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/sudo/commands/SudoCommand.java index da8f1c48..4befb8db 100644 --- a/src/main/java/me/alexdevs/solstice/modules/sudo/commands/SudoCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/sudo/commands/SudoCommand.java @@ -4,8 +4,8 @@ import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import me.alexdevs.solstice.api.module.ModCommand; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.sudo.SudoModule; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.ClickEvent; diff --git a/src/main/java/me/alexdevs/solstice/modules/suicide/SuicideModule.java b/common/src/main/java/me/alexdevs/solstice/modules/suicide/SuicideModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/suicide/SuicideModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/suicide/SuicideModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/suicide/commands/SuicideCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/suicide/commands/SuicideCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/suicide/commands/SuicideCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/suicide/commands/SuicideCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/tablist/TabListModule.java b/common/src/main/java/me/alexdevs/solstice/modules/tablist/TabListModule.java similarity index 89% rename from src/main/java/me/alexdevs/solstice/modules/tablist/TabListModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/tablist/TabListModule.java index 4067cbc9..51f8e514 100644 --- a/src/main/java/me/alexdevs/solstice/modules/tablist/TabListModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/tablist/TabListModule.java @@ -3,11 +3,11 @@ import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.events.SolsticeEvents; +import me.alexdevs.solstice.api.events.proxy.ProxyServerLifecycleEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.api.text.Format; import me.alexdevs.solstice.api.text.RawPlaceholder; import me.alexdevs.solstice.modules.tablist.data.TabListConfig; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.minecraft.network.protocol.game.ClientboundTabListPacket; import net.minecraft.server.MinecraftServer; @@ -29,8 +29,9 @@ public TabListModule() { public void init() { Solstice.configManager.registerData(ID, TabListConfig.class, TabListConfig::new); - ServerLifecycleEvents.SERVER_STARTED.register(server -> { + ProxyServerLifecycleEvents.SERVER_STARTED.register(server -> { this.server = server; + schedule(); }); @@ -38,6 +39,7 @@ public void init() { if (scheduledFuture != null) { scheduledFuture.cancel(false); } + schedule(); }); } @@ -47,7 +49,12 @@ private void schedule() { if (!config.enable) return; - scheduledFuture = Solstice.scheduler.scheduleAtFixedRate(this::updateTab, 0, config.delay, TimeUnit.MILLISECONDS); + scheduledFuture = Solstice.scheduler.scheduleAtFixedRate( + this::updateTab, + 0, + config.delay, + TimeUnit.MILLISECONDS + ); } public void updateTab() { diff --git a/src/main/java/me/alexdevs/solstice/modules/tablist/data/TabListConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/tablist/data/TabListConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/tablist/data/TabListConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/tablist/data/TabListConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportHere/TeleportHereModule.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportHere/TeleportHereModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportHere/TeleportHereModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportHere/TeleportHereModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportHere/commands/TeleportHereCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportHere/commands/TeleportHereCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportHere/commands/TeleportHereCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportHere/commands/TeleportHereCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportOffline/TeleportOfflineModule.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportOffline/TeleportOfflineModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportOffline/TeleportOfflineModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportOffline/TeleportOfflineModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportOffline/commands/TeleportOfflineCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportOffline/commands/TeleportOfflineCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportOffline/commands/TeleportOfflineCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportOffline/commands/TeleportOfflineCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportPosition/TeleportPositionModule.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportPosition/TeleportPositionModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportPosition/TeleportPositionModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportPosition/TeleportPositionModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportPosition/commands/TeleportPositionCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportPosition/commands/TeleportPositionCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportPosition/commands/TeleportPositionCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportPosition/commands/TeleportPositionCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/TeleportRequestModule.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/TeleportRequestModule.java similarity index 77% rename from src/main/java/me/alexdevs/solstice/modules/teleportRequest/TeleportRequestModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/TeleportRequestModule.java index 6768ac0c..2070adc1 100644 --- a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/TeleportRequestModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/TeleportRequestModule.java @@ -3,6 +3,7 @@ import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.ServerLocation; +import me.alexdevs.solstice.api.events.proxy.ProxyServerPlayConnectionEvents; import me.alexdevs.solstice.api.module.ModuleBase; import me.alexdevs.solstice.api.text.Components; import me.alexdevs.solstice.modules.notifications.NotificationsModule; @@ -13,8 +14,8 @@ import me.alexdevs.solstice.modules.teleportRequest.data.Request; import me.alexdevs.solstice.modules.teleportRequest.data.TeleportConfig; import me.alexdevs.solstice.modules.teleportRequest.data.TeleportLocale; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.server.level.ServerPlayer; + import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -42,8 +43,13 @@ public void init() { Solstice.scheduler.scheduleAtFixedRate(this::tickDown, 0, 1, TimeUnit.SECONDS); - ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> requests.put(handler.getPlayer().getUUID(), new ConcurrentLinkedDeque<>())); - ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> Solstice.nextTick(() -> requests.remove(handler.getPlayer().getUUID()))); + ProxyServerPlayConnectionEvents.JOIN.register((player, server) -> requests.put( + player.getUUID(), + new ConcurrentLinkedDeque<>() + )); + + ProxyServerPlayConnectionEvents.DISCONNECT.register((player, server) -> Solstice.nextTick(() -> requests.remove( + player.getUUID()))); } private void tickDown() { @@ -66,8 +72,7 @@ public Request getRequestFromSource(ServerPlayer player, ServerPlayer source) { public Request getLatestRequest(ServerPlayer player) { var reqs = requests.get(player.getUUID()); - if (reqs.isEmpty()) - return null; + if (reqs.isEmpty()) return null; return reqs.getLast(); } @@ -77,9 +82,7 @@ public void acceptRequest(ServerPlayer player, Request request) { var source = request.getSource(); var direction = request.getDirection(); - var map = Map.of( - "player", player.getDisplayName() - ); + var map = Map.of("player", player.getDisplayName()); player.sendSystemMessage(locale().get("targetAccepted")); source.sendSystemMessage(locale().get("sourceAccepted", map)); @@ -97,9 +100,7 @@ public void refuseRequest(ServerPlayer player, Request request) { requests.get(player.getUUID()).remove(request); var source = request.getSource(); - var map = Map.of( - "player", player.getDisplayName() - ); + var map = Map.of("player", player.getDisplayName()); player.sendSystemMessage(locale().get("targetRefused")); source.sendSystemMessage(locale().get("sourceRefused", map)); @@ -113,27 +114,20 @@ public void requestTo(ServerPlayer source, ServerPlayer target) { var targetContext = PlaceholderContext.of(target); var placeholders = Map.of( - "requesterPlayer", source.getDisplayName(), - "acceptButton", Components.button( + "requesterPlayer", source.getDisplayName(), "acceptButton", Components.button( locale().raw("~accept"), locale().raw("~accept.hover"), - "/tpaccept " + source.getGameProfile().getName()), - "refuseButton", Components.button( + "/tpaccept " + source.getGameProfile().getName() + ), "refuseButton", Components.button( locale().raw("~refuse"), locale().raw("~refuse.hover"), - "/tpdeny " + source.getGameProfile().getName()) + "/tpdeny " + source.getGameProfile().getName() + ) ); - target.sendSystemMessage(locale().get( - "pendingTeleport", - targetContext, - placeholders - )); + target.sendSystemMessage(locale().get("pendingTeleport", targetContext, placeholders)); - source.sendSystemMessage(locale().get( - "requestSent", - sourceContext - )); + source.sendSystemMessage(locale().get("requestSent", sourceContext)); NotificationsModule.notify(target); } @@ -145,27 +139,20 @@ public void requestToHere(ServerPlayer source, ServerPlayer target) { var sourceContext = PlaceholderContext.of(source); var targetContext = PlaceholderContext.of(target); var placeholders = Map.of( - "requesterPlayer", source.getDisplayName(), - "acceptButton", Components.button( + "requesterPlayer", source.getDisplayName(), "acceptButton", Components.button( locale().raw("~accept"), locale().raw("~accept.hover"), - "/tpaccept " + source.getGameProfile().getName()), - "refuseButton", Components.button( + "/tpaccept " + source.getGameProfile().getName() + ), "refuseButton", Components.button( locale().raw("~refuse"), locale().raw("~refuse.hover"), - "/tpdeny " + source.getGameProfile().getName()) + "/tpdeny " + source.getGameProfile().getName() + ) ); - target.sendSystemMessage(locale().get( - "pendingTeleportHere", - targetContext, - placeholders - )); + target.sendSystemMessage(locale().get("pendingTeleportHere", targetContext, placeholders)); - source.sendSystemMessage(locale().get( - "requestSent", - sourceContext - )); + source.sendSystemMessage(locale().get("requestSent", sourceContext)); NotificationsModule.notify(target); } diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAcceptCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAcceptCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAcceptCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAcceptCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskHereCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskHereCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskHereCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportAskHereCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportDenyCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportDenyCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportDenyCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/commands/TeleportDenyCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/Request.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/Request.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/Request.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/Request.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportConfig.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportConfig.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportConfig.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportConfig.java diff --git a/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/teleportRequest/data/TeleportLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/tell/TellModule.java b/common/src/main/java/me/alexdevs/solstice/modules/tell/TellModule.java similarity index 98% rename from src/main/java/me/alexdevs/solstice/modules/tell/TellModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/tell/TellModule.java index b09b0423..0b40011c 100644 --- a/src/main/java/me/alexdevs/solstice/modules/tell/TellModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/tell/TellModule.java @@ -3,16 +3,17 @@ import eu.pb4.placeholders.api.PlaceholderContext; import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.module.ModuleBase; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.ignore.IgnoreModule; import me.alexdevs.solstice.modules.notifications.NotificationsModule; import me.alexdevs.solstice.modules.tell.commands.ReplyCommand; import me.alexdevs.solstice.modules.tell.commands.TellCommand; import me.alexdevs.solstice.modules.tell.data.TellLocale; import me.alexdevs.solstice.api.text.Components; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; + import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/me/alexdevs/solstice/modules/tell/commands/ReplyCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/tell/commands/ReplyCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/tell/commands/ReplyCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/tell/commands/ReplyCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/tell/commands/TellCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/tell/commands/TellCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/tell/commands/TellCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/tell/commands/TellCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/tell/data/TellLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/tell/data/TellLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/tell/data/TellLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/tell/data/TellLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/timeBar/TimeBar.java b/common/src/main/java/me/alexdevs/solstice/modules/timeBar/TimeBar.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/timeBar/TimeBar.java rename to common/src/main/java/me/alexdevs/solstice/modules/timeBar/TimeBar.java diff --git a/src/main/java/me/alexdevs/solstice/modules/timeBar/TimeBarModule.java b/common/src/main/java/me/alexdevs/solstice/modules/timeBar/TimeBarModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/timeBar/TimeBarModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/timeBar/TimeBarModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/timeBar/commands/TimeBarCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/timeBar/commands/TimeBarCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/timeBar/commands/TimeBarCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/timeBar/commands/TimeBarCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/trash/TrashModule.java b/common/src/main/java/me/alexdevs/solstice/modules/trash/TrashModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/trash/TrashModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/trash/TrashModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/trash/commands/TrashCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/trash/commands/TrashCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/trash/commands/TrashCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/trash/commands/TrashCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/trash/data/TrashLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/trash/data/TrashLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/trash/data/TrashLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/trash/data/TrashLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/UtilitiesModule.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/UtilitiesModule.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/UtilitiesModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/UtilitiesModule.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/commands/AnvilCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/AnvilCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/commands/AnvilCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/AnvilCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/commands/CartographyCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/CartographyCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/commands/CartographyCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/CartographyCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/commands/GrindstoneCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/GrindstoneCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/commands/GrindstoneCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/GrindstoneCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/commands/LoomCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/LoomCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/commands/LoomCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/LoomCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/commands/SmithingCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/SmithingCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/commands/SmithingCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/SmithingCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/commands/StonecutterCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/StonecutterCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/commands/StonecutterCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/StonecutterCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/commands/WorkbenchCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/WorkbenchCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/commands/WorkbenchCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/commands/WorkbenchCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualAnvilScreenHandler.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualAnvilScreenHandler.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualAnvilScreenHandler.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualAnvilScreenHandler.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCartographyTableScreenHandler.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCartographyTableScreenHandler.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCartographyTableScreenHandler.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCartographyTableScreenHandler.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCraftingScreenHandler.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCraftingScreenHandler.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCraftingScreenHandler.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualCraftingScreenHandler.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualGrindstoneScreenHandler.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualGrindstoneScreenHandler.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualGrindstoneScreenHandler.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualGrindstoneScreenHandler.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualLoomScreenHandler.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualLoomScreenHandler.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualLoomScreenHandler.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualLoomScreenHandler.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualSmithingScreenHandler.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualSmithingScreenHandler.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualSmithingScreenHandler.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualSmithingScreenHandler.java diff --git a/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualStonecutterScreenHandler.java b/common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualStonecutterScreenHandler.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualStonecutterScreenHandler.java rename to common/src/main/java/me/alexdevs/solstice/modules/utilities/virtualScreenHandlers/VirtualStonecutterScreenHandler.java diff --git a/src/main/java/me/alexdevs/solstice/modules/warp/WarpModule.java b/common/src/main/java/me/alexdevs/solstice/modules/warp/WarpModule.java similarity index 95% rename from src/main/java/me/alexdevs/solstice/modules/warp/WarpModule.java rename to common/src/main/java/me/alexdevs/solstice/modules/warp/WarpModule.java index 87b16841..6ee9fed6 100644 --- a/src/main/java/me/alexdevs/solstice/modules/warp/WarpModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/warp/WarpModule.java @@ -2,13 +2,13 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.api.module.ModuleBase; +import me.alexdevs.solstice.api.permissions.Permissions; import me.alexdevs.solstice.modules.warp.commands.DeleteWarpCommand; import me.alexdevs.solstice.modules.warp.commands.SetWarpCommand; import me.alexdevs.solstice.modules.warp.commands.WarpCommand; import me.alexdevs.solstice.modules.warp.commands.WarpsCommand; import me.alexdevs.solstice.modules.warp.data.WarpLocale; import me.alexdevs.solstice.modules.warp.data.WarpServerData; -import me.lucko.fabric.api.permissions.v0.Permissions; import net.minecraft.server.level.ServerPlayer; public class WarpModule extends ModuleBase.Toggleable { diff --git a/src/main/java/me/alexdevs/solstice/modules/warp/commands/DeleteWarpCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/warp/commands/DeleteWarpCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/warp/commands/DeleteWarpCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/warp/commands/DeleteWarpCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/warp/commands/SetWarpCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/warp/commands/SetWarpCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/warp/commands/SetWarpCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/warp/commands/SetWarpCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/warp/commands/WarpCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/warp/commands/WarpCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/warp/commands/WarpCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/warp/commands/WarpCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/warp/commands/WarpsCommand.java b/common/src/main/java/me/alexdevs/solstice/modules/warp/commands/WarpsCommand.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/warp/commands/WarpsCommand.java rename to common/src/main/java/me/alexdevs/solstice/modules/warp/commands/WarpsCommand.java diff --git a/src/main/java/me/alexdevs/solstice/modules/warp/data/WarpLocale.java b/common/src/main/java/me/alexdevs/solstice/modules/warp/data/WarpLocale.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/warp/data/WarpLocale.java rename to common/src/main/java/me/alexdevs/solstice/modules/warp/data/WarpLocale.java diff --git a/src/main/java/me/alexdevs/solstice/modules/warp/data/WarpServerData.java b/common/src/main/java/me/alexdevs/solstice/modules/warp/data/WarpServerData.java similarity index 100% rename from src/main/java/me/alexdevs/solstice/modules/warp/data/WarpServerData.java rename to common/src/main/java/me/alexdevs/solstice/modules/warp/data/WarpServerData.java diff --git a/common/src/main/resources/META-INF/accesstransformer.cfg b/common/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 00000000..d21ee3ba --- /dev/null +++ b/common/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1,2 @@ +public net.minecraft.server.MinecraftServer playerDataStorage +public net.minecraft.server.level.ServerChunkCache getVisibleChunkIfPresent(J)Lnet/minecraft/server/level/ChunkHolder; diff --git a/common/src/main/resources/META-INF/services/me.alexdevs.solstice.api.module.ModuleEntrypoint b/common/src/main/resources/META-INF/services/me.alexdevs.solstice.api.module.ModuleEntrypoint new file mode 100644 index 00000000..c1f441a3 --- /dev/null +++ b/common/src/main/resources/META-INF/services/me.alexdevs.solstice.api.module.ModuleEntrypoint @@ -0,0 +1 @@ +me.alexdevs.solstice.modules.ModuleProvider \ No newline at end of file diff --git a/src/main/resources/assets/solstice/info/formatting.txt b/common/src/main/resources/assets/solstice/info/formatting.txt similarity index 100% rename from src/main/resources/assets/solstice/info/formatting.txt rename to common/src/main/resources/assets/solstice/info/formatting.txt diff --git a/src/main/resources/assets/solstice/info/motd.txt b/common/src/main/resources/assets/solstice/info/motd.txt similarity index 100% rename from src/main/resources/assets/solstice/info/motd.txt rename to common/src/main/resources/assets/solstice/info/motd.txt diff --git a/src/main/resources/assets/solstice/info/rules.txt b/common/src/main/resources/assets/solstice/info/rules.txt similarity index 100% rename from src/main/resources/assets/solstice/info/rules.txt rename to common/src/main/resources/assets/solstice/info/rules.txt diff --git a/src/main/resources/solstice.accesswidener b/common/src/main/resources/solstice.accesswidener similarity index 79% rename from src/main/resources/solstice.accesswidener rename to common/src/main/resources/solstice.accesswidener index 8c2bc47d..ef43e334 100644 --- a/src/main/resources/solstice.accesswidener +++ b/common/src/main/resources/solstice.accesswidener @@ -3,4 +3,4 @@ accessWidener v2 named accessible method net/minecraft/server/level/ServerChunkCache getVisibleChunkIfPresent (J)Lnet/minecraft/server/level/ChunkHolder; # Inventory see -accessible field net/minecraft/server/MinecraftServer playerDataStorage Lnet/minecraft/world/level/storage/PlayerDataStorage; \ No newline at end of file +accessible field net/minecraft/server/MinecraftServer playerDataStorage Lnet/minecraft/world/level/storage/PlayerDataStorage; diff --git a/src/main/resources/solstice.mixins.json b/common/src/main/resources/solstice.mixins.json similarity index 93% rename from src/main/resources/solstice.mixins.json rename to common/src/main/resources/solstice.mixins.json index 11fef50a..ade4ccae 100644 --- a/src/main/resources/solstice.mixins.json +++ b/common/src/main/resources/solstice.mixins.json @@ -11,6 +11,9 @@ }, "mixins": [ "events.CommandEventsMixin", + "events.LivingEntityMixin", + "events.PlayerListMixin", + "events.PlayerMixin", "events.WorldSaveEventMixin", "modules.admin.ConnectionBypassMixin", "modules.afk.FixPlayerSleepPercentageMixin", diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts new file mode 100644 index 00000000..699dfc33 --- /dev/null +++ b/fabric/build.gradle.kts @@ -0,0 +1,62 @@ +plugins { + id("multiloader-loader") + id("fabric-loom") +} + +dependencies { + minecraft("com.mojang:minecraft:${"minecraft_version"()}") + + @Suppress("UnstableApiUsage") + mappings(loom.layered { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${"parchment_minecraft"()}:${"parchment_version"()}@zip") + }) + + modImplementation("net.fabricmc:fabric-loader:${"fabric_loader_version"()}") + modImplementation("net.fabricmc.fabric-api:fabric-api:${"fabric_version"()}") + + include(implementation("org.spongepowered:configurate-core:${"configurate_version"()}")!!) + include(implementation("org.spongepowered:configurate-hocon:${"configurate_version"()}")!!) + include(implementation("org.spongepowered:configurate-gson:${"configurate_version"()}")!!) + include(implementation("com.typesafe:config:1.4.3")!!) + include(implementation("io.leangen.geantyref:geantyref:1.3.16")!!) + + include(modImplementation("eu.pb4:placeholder-api:${"placeholderapi_fabric_version"()}")!!) + include(modImplementation("eu.pb4:sgui-fabric:${"sgui_version"()}")!!) + + modCompileOnly("dev.emi:trinkets:${"trinkets_version"()}") + modLocalRuntime("dev.emi:trinkets:${"trinkets_version"()}") + + modCompileOnly("net.luckperms:api:5.4") + modLocalRuntime("net.luckperms:api:5.4") +} + +loom { + val aw = project(":common").file("src/main/resources/${"mod_id"()}.accesswidener") + + if (aw.exists()) { + accessWidenerPath.set(aw) + } + + mixin { + defaultRefmapName.set("${"mod_id"()}.refmap.json") + } + + runs { + maybeCreate("client").apply { + client() + setConfigName("Fabric Client") + ideConfigGenerated(true) + runDir("runs/client") + } + + maybeCreate("server").apply { + server() + setConfigName("Fabric Server") + ideConfigGenerated(true) + runDir("runs/server") + } + } +} + +operator fun String.invoke(): String = rootProject.ext[this] as? String ?: error("No property \"$this\"") diff --git a/fabric/runs/server/config/cardinal-components-api.properties b/fabric/runs/server/config/cardinal-components-api.properties new file mode 100644 index 00000000..d04b6043 --- /dev/null +++ b/fabric/runs/server/config/cardinal-components-api.properties @@ -0,0 +1,9 @@ +# If set to false, warnings will not get logged when a component fails to be resolved (typically due to mods being removed) +# Default value: true +log-deserialization-warnings = true +# If log-deserialization-warnings is enabled, warnings will be printed at most *this number of times* for every component type +# Default value: 5 +max-deserialization-warnings = 5 + +# Internal value, do not edit or your changes may be arbitrarily reset +config-version = 2 diff --git a/fabric/runs/server/config/solstice/config.conf b/fabric/runs/server/config/solstice/config.conf new file mode 100644 index 00000000..205e12bf --- /dev/null +++ b/fabric/runs/server/config/solstice/config.conf @@ -0,0 +1,319 @@ +broadcast { + # Format to use when broadcasting a message. + format="[Broadcast] ${message}" +} +note { + # Show a player's note when they login to users with the permission 'solstice.note.showonlogin' + show-login=true +} +autoannouncement { + # Enable automatic announcements functionality. + enable=true + # Pick the next announcement randomly, else linearly. + pick-randomly=false + # Send announcement every X seconds. Defaults to 300 seconds. + delay=300 + # Announcement list. Announcements can have a permission as condition. If result is true, the permission has to be granted, else the permission has to be denied (or unset). + announcements=[ + { + text="Tip! Solstice is open-source! Contribute on GitHub!" + }, + { + text="Fun fact! This announcement is only visible to players that do not have the 'solstice.example' permission granted!" + permission="solstice.example" + result=false + } + ] +} +tablist { + # Enable the custom tab list functionality. + enable=true + # Send tab list updates every X milliseconds. Defaults to 250 ms. + delay=250 + # How fast the phase is. Lower is faster. Defaults to 300 + phase-period=300.0 + # Header lines + header=[ + " " + ] + # Footer lines + footer=[ + " " + ] + # Format to use when displaying the player name in the tab list. + player-tab-name="%solstice:afk%%player:displayname_visual%" +} +teleportrequest { + # The teleport request times out after the following seconds. Defaults to 120 seconds. + teleport-request-timeout=120 +} +restart { + # Enable auto restart functionality. + enable=true + # Restart the server at exactly the following times. Time is local. + restart-at=[ + "06:00", + "18:00" + ] + # Sound to play when sending the restart notification in chat. + restart-sound="minecraft:block.note_block.bell" + # Pitch of the sound. + restart-sound-pitch=0.8999999761581421 + # Style of the restart bar. + bar-style="NOTCHED_10" + # Color of the restart bar. + bar-color=RED + # Milestones of the restart notifications in seconds. + restart-notifications=[ + 600, + 300, + 120, + 60, + 30, + 15, + 10, + 5, + 4, + 3, + 2, + 1 + ] +} +afk { + # Enable the AFK functionality. Requires server restart. + enable=true + # Announce in chat when a player goes or return from AFK. + announce=true + # AFK triggers after the player has been inactive for the following seconds. Defaults to 300 seconds. + time-trigger=300 + # This tag is displayed with `solstice:afk` placeholder when the player is AFK. + tag="[AFK] " + # These triggers clear the AFK status. Events regarding entities, blocks or item usage may be triggered by fake players. + triggers { + # Movement is triggered when the velocity threshold is met. + on-movement=true + # Look change is triggered when the player yaw and/or pitch change. + on-look-change=true + # Trigger on chat messages sent by the player. + on-chat=true + # Trigger on commands. + on-command=true + # Trigger when a block is being attacked (left click). + on-block-attack=true + # Trigger when a block is being interacted with (right click). + on-block-interact=true + # Trigger when an entity is attacked. + on-entity-attack=true + # Trigger when an entity is interacted with. + on-entity-interact=true + # Trigger when an item is used. + on-item-use=true + } +} +jail { + # List of commands the jailed players can execute. + allowed-commands=[ + afk, + ignore, + msg, + tell, + w, + dm, + r, + reply, + mail, + info, + motd, + rules + ] + # Mute jailed players. They will not be able to send chat messages. + mute=false +} +commandspy { + # Commands to ignore. + ignored-commands=[ + tell, + w, + msg, + dm, + r, + staffchat, + sc, + helpop, + sos + ] +} +home { + # The amount of homes a player can set based on their permission group. = . + # Use the permission 'solstice.home.unlimited' to bypass this limit. + homes { + vip=10 + default=5 + } +} +rtp { + # How many times to try to find a valid spot to teleport to before failing. + attempts=10 + # How much time in milliseconds /rtp can take at most before failing. + timeout=10000 + # Minimum radius from the center of the world border. + min-radius=0 + # Maximum radius from the center of the world border. It caps to world border size. + max-radius=30000 + # Use player as the center of the radius instead of the world border. + around-player=false + # List of biomes an attempt should fail at. + prohibited-biomes=[ + "minecraft:ocean", + "minecraft:cold_ocean", + "minecraft:deep_cold_ocean", + "minecraft:deep_frozen_ocean", + "minecraft:deep_lukewarm_ocean", + "minecraft:deep_ocean", + "minecraft:frozen_ocean", + "minecraft:lukewarm_ocean", + "minecraft:warm_ocean", + "minecraft:river", + "minecraft:frozen_river", + "minecraft:small_end_islands" + ] + # Require that the player has the permission of the world 'solstice.rtp.worlds.' to initiate the random teleport in the world. + require-world-permission=true + # Groups of biomes the player is allowed to RTP to. + # Use 'solstice.rtp.biomes..' to assign. + # Requires 'solstice.rtp.biome.base'. + biome-groups { + "minecraft:overworld" { + forests=[ + "minecraft:forest", + "minecraft:flower_forest", + "minecraft:taiga", + "minecraft:old_growth_spruce_taiga", + "minecraft:snowy_taiga", + "minecraft:birch_forest", + "minecraft:old_growth_birch_forest", + "minecraft:dark_forest", + "minecraft:pale_garden", + "minecraft:jungle", + "minecraft:sparse_jungle", + "minecraft:bamboo_jungle" + ] + } + } + # Cooldown configuration + cooldown { + # This setting makes it so players have to wait before running the command a second time. + enable=true + # Seconds to wait for the cooldown to expire. + cooldown=600 + # Cancel the cooldown if /rtp fails. + cancel-on-fail=true + } +} +core { + # Generic date format to use. + # Metric format: dd/MM/yyyy + # USA format: MM/dd/yyyy + date-format="dd/MM/yyyy" + # Generic time format to use. + # 24h format: HH:mm + # 12h format: hh:mm a + time-format="HH:mm" + # Generic date + time format to use. + date-time-format="dd/MM/yyyy HH:mm" + # Format to use when displaying links in chat. + link="${label}" + # Format to use when hovering over the link in chat. + link-hover="${url}" +} +spawn { + # Require that the player has the permission of the world 'solstice.spawn.worlds.' to warp to its spawn. + # Mind that 'solstice.spawn.worlds.base' is required to be able to use the `world` argument. + require-world-permission=true + # This setting defines whether `/spawn` and respawning work on a per world or global server basis. + global-spawn { + # Send the player to the global spawn instead of the world spawn when using the /spawn command. + on-spawn-command=false + # Send the player to the global spawn instead of their bed or anchor when respawning. + on-respawn=false + # Send the player to the global spawn when logging in. + on-login=false + # ID of the world to use as global spawn. Minecraft dimensions: 'minecraft:overworld', 'minecraft:the_nether', 'minecraft:the_end' + target-spawn-world="minecraft:overworld" + } +} +styling { + # Enable Markdown support in chat. + enable-markdown=true + # Whether to broadcast a welcome message to everyone when a player joins for the first time. + welcome-new-players=true + # Replace text chunks in chat messages. + replacements { + ":shrug:"="¯\\\\_(ツ)_/¯" + } + # Task advancement format. + advancement-task=" %player:displayname% completed the task ${title}" + # Challenge advancement format. + advancement-challenge="🎆 %player:displayname% completed the challenge ${title}" + # Goal advancement format. + advancement-goal="🎖 %player:displayname% completed the goal ${title}" + # Player chat format. + chat-format="%player:displayname%: ${message}" + # Emote format (/me) + emote-format="👤 %player:displayname% ${message}" + # Player join format + join-format="+ %player:displayname% joined!" + # Player joined with a new username format + join-renamed-format="+ %player:displayname% joined! (Previously known as ${previousName})" + # Player quit format + leave-format="- %player:displayname% left!" + # Player death format + death-format="☠ ${message}" + # New player welcome message format + welcome="Welcome %player:displayname% to the server!" +} +kit { + # Require 'solstice.kit.kits.' permission node by default to claim a kit. + require-permission=false +} +customname { + # Customize player display names based on their LuckPerms group. Priority is determined by the list order: first comes before last. + name-formats=[ + { + group=admin + format="${prefix}${name}${suffix}" + }, + { + group=default + format="${prefix}${name}${suffix}" + } + ] +} +hat { + # Make the filter setting act as a whitelist instead of a blacklist. + whitelist-filter=false + # Items & tags to allow/deny. See the 'whitelist-filter' setting to change the behaviour of this list. + # Use '#' as prefix to filter as tag. + filter=[ + "#c:shulker_boxes" + ] +} +near { + # Max range in blocks. Defaults to 48 blocks. + max-range=48 + # Default range in blocks. Defaults to 32 blocks. + default-range=32 +} +notifications { + default-values { + sound-id="minecraft:block.note_block.bell" + pitch=1 + volume=1 + afk-only=true + on-chat=true + } +} +info { + # Send the 'Message Of The Day' to the player when joining the server. Content is in the 'config/solstice/info/motd.txt' file. + enable-motd=true +} diff --git a/fabric/runs/server/config/solstice/info/formatting.txt b/fabric/runs/server/config/solstice/info/formatting.txt new file mode 100644 index 00000000..ebbb2808 --- /dev/null +++ b/fabric/runs/server/config/solstice/info/formatting.txt @@ -0,0 +1,24 @@ +This page is an example of the formatting and placeholders used in pages and command texts. + +Formatting: + +Colors: +yellow, dark_blue, dark_purple, gold, red, aqua, gray, light_purple, white, dark_gray, green, dark_green, blue, dark_aqua, dark_green, black. + +Decorations: +strikethrough, st, underline, underlined, u, italic, i, obfuscated, obf(obfuscated, obf), bold, b + +Fonts: +default, uniform(uniform), alt(alt) + +Gradients: +smooth white to black, hard white to black, rainbow + +For the complete documentation on text formatting check out this link. + +Placeholders: + +Player name: %player:name% +Player display name: %player:displayname% + +For the complete documentation on placeholders check out this link. \ No newline at end of file diff --git a/fabric/runs/server/config/solstice/info/motd.txt b/fabric/runs/server/config/solstice/info/motd.txt new file mode 100644 index 00000000..83676e75 --- /dev/null +++ b/fabric/runs/server/config/solstice/info/motd.txt @@ -0,0 +1,6 @@ +Welcome to the server, %player:displayname%! + +The world time is %world:time%. +There are %server:online%/%server:max_players% online players. + +Make sure to read the /rules! \ No newline at end of file diff --git a/fabric/runs/server/config/solstice/info/rules.txt b/fabric/runs/server/config/solstice/info/rules.txt new file mode 100644 index 00000000..6d4f6602 --- /dev/null +++ b/fabric/runs/server/config/solstice/info/rules.txt @@ -0,0 +1,3 @@ +1. Respect players. +2. Respect staff members. +3. Enjoy your stay! \ No newline at end of file diff --git a/fabric/runs/server/config/solstice/locale.json b/fabric/runs/server/config/solstice/locale.json new file mode 100644 index 00000000..b6e5c789 --- /dev/null +++ b/fabric/runs/server/config/solstice/locale.json @@ -0,0 +1,365 @@ +{ + "shared": { + "unit.months": "${n} months", + "buttonSuggest": "[${label}]", + "refuse.hover": "Click to refuse", + "unit.day": "${n} day", + "unit.year": "${n} year", + "unit.hour": "${n} hour", + "accept": "Accept", + "unit.month": "${n} month", + "unit.seconds": "${n} seconds", + "button": "[${label}]", + "unit.years": "${n} years", + "refuse": "Refuse", + "unit.minutes": "${n} minutes", + "unit.weeks": "${n} weeks", + "unit.second": "${n} second", + "unit.hours": "${n} hours", + "unit.week": "${n} week", + "unit.minute": "${n} minute", + "cooldown": "You are on cooldown for ${timespan}.", + "accept.hover": "Click to accept", + "unit.days": "${n} days", + "tooManyTargets": "The provided selector contains too many targets." + }, + "modules": { + "note": { + "deleteButton": "Delete", + "checkButton": "Check", + "hoverCheck": "Click to check the note", + "addedNotification": "${operator} added a note to ${user}! ${checkButton}", + "userNotFound": "User ${user} not found!", + "hoverDelete": "Click to delete the note", + "noteListHeader": "${user}'s notes:", + "noteAdded": "Note added!", + "noteDetails": "From ${operator} on ${date}\n ${message}\n\n ${deleteButton}", + "loginInfo": "${user} has ${notes} notes! ${checkButton}", + "emptyNotes": "There are no notes for this user.", + "notFound": "Note not found", + "noteListEntry": "[${date}] ${operator}: ${message} ${checkButton}", + "notesCleared": "All ${user}'s notes cleared!", + "noteDeleted": "Note deleted!" + }, + "miscellaneous": { + "noEffects": "This player has no active effects.", + "infinite": "infinite", + "effectHeader": "Active effects:", + "effect": "${effect}: x${amplifier} for ${duration}" + }, + "teleportrequest": { + "targetAccepted": "Teleport request accepted.", + "playerUnavailable": "The other player is no longer available.", + "sourceRefused": "${player} refused your teleport request!", + "noPending": "There are no pending teleport requests for you.", + "unavailable": "This request expired or is no longer available.", + "teleporting": "Teleporting...", + "targetRefused": "Teleport request refused.", + "pendingTeleportHere": "${requesterPlayer} requested you to teleport to them.\n ${acceptButton} ${refuseButton}", + "requestSent": "Teleport request sent.", + "sourceAccepted": "${player} accepted your teleport request!", + "pendingTeleport": "${requesterPlayer} requested to teleport to you.\n ${acceptButton} ${refuseButton}" + }, + "mail": { + "deleteButton": "Delete", + "mailDeleted": "Mail deleted!", + "replyButton": "Reply", + "hoverRead": "Click to read the mail", + "playerNotFound": "Player ${recipient} not found!", + "mailSent": "Mail sent!", + "mailPending": "You have pending mails! Run /mail to read your mails.", + "emptyMailbox": "Your mailbox is empty.", + "mailListEntry": "${index}. From ${sender} on ${date} ${readButton}", + "hoverReply": "Click to reply to the mail", + "hoverDelete": "Click to delete the mail", + "readButton": "Read", + "mailReceived": "You received a new mail! Run /mail to read the emails!", + "notFound": "Mail not found", + "mailListHeader": "Your mails:", + "mailDetails": "From ${sender} on ${date}\n ${message}\n\n ${replyButton} ${deleteButton}" + }, + "tell": { + "playerNotFound": "Player ${targetPlayer} not found!", + "noLastSenderReply": "You have no one to reply to.", + "messageSpy": "👁 [${sourcePlayer} → ${targetPlayer}] ${message}", + "message": "[${sourcePlayer} ${targetPlayer}] ${message}", + "you": "You" + }, + "back": { + "teleporting": "Teleporting to previous position...", + "noPosition": "There is no position to return back to." + }, + "ban": { + "tempBanMessageFormat": "You are temporarily banned from this server:\n\n${reason}\n\nExpires: ${expiry_date}", + "banMessageFormat": "You are banned from this server:\n\n${reason}" + }, + "seen": { + "online": "online", + "playerNotFound": "Could not find this player", + "extended": " IP Address: ${ipAddress}\n Location: ${location}", + "neverJoined": "Never joined", + "unknown": "unknown", + "base": "${username}'s information:\n UUID: ${uuid}\n First seen: ${firstSeenDate}\n Last seen: ${lastSeenDate}" + }, + "inventorysee": { + "offlineNotAllowed": "You cannot open offline player inventories.", + "openedTrinkets": "Opened ${user}'s trinkets inventory.", + "trinketsNotInstalled": "Trinkets not available because the mod is missing.", + "playerNotFound": "Player not found!", + "exempt": "You cannot open this inventory because the user is exempt.", + "openedInventory": "Opened ${user}'s inventory." + }, + "kit": { + "listAvailableKit": "${kit}", + "noStackInHand": "You need to hold an item to set a kit icon!", + "edited": "Kit ${kit} edited!", + "noPermission": "You do not have permission to claim this kit!", + "created": "New kit ${kit} created!", + "claimed": "Kit ${kit} claimed!", + "onCooldown": "You can claim this kit again in ${timespan}!", + "setCooldown": "Set cooldown to ${value} for kit ${kit}.", + "listComma": ", ", + "listHeader": "Available kits: ${list}.", + "claimKit": "Click to claim this kit!", + "kits": "Kits", + "setOneTime": "Set one time to ${value} for kit ${kit}.", + "setIcon": "Set icon for kit ${kit}.", + "setFirstJoin": "Set first join to ${value} for kit ${kit}.", + "deleted": "Kit ${kit} deleted!", + "newKitTitle": "New kit: ${kit}", + "listUnavailableKit": "${kit}", + "notFound": "The kit ${kit} does not exist!", + "alreadyClaimed": "You already claimed this kit!", + "editKitTitle": "Edit kit: ${kit}", + "alreadyExists": "A kit with this name already exists!", + "listNoKits": "There are no kits available." + }, + "helpop": { + "helpRequestMessage": "❗ [%player:displayname%] ${message}", + "helpRequestFeedback": "Help request sent: ${message}" + }, + "ignore": { + "blockedPlayer": "${targetName} is now ignored.", + "unblockedPlayer": "${targetName} is no longer ignored.", + "ignoreListEmpty": "You are not ignoring anyone at the moment.", + "ignoreList": "Ignored players: ${playerList}", + "playerNotFound": "Could not find this player", + "ignoreListFormat": "${player}", + "ignoreListComma": ", ", + "targetIsSelf": "You cannot ignore yourself." + }, + "hat": { + "success": "Check out your new hat!", + "notAllowed": "You cannot wear this item!", + "emptyStack": "You are not holding any item!" + }, + "near": { + "comma": ", ", + "noOne": "There are no players near you.", + "nearestPlayers": "Nearest players: ${playerList}", + "format": "${player} (${distance})" + }, + "info": { + "noPages ": "There are no pages so far.", + "pageNotFound": "This page does not exist!", + "pageError": "There was an error opening the info page.", + "pagesFormat": "${page}", + "pageList": "Available pages: ${pageList}", + "pagesComma": ", " + }, + "enderchest": { + "opened": "Opened ${player}'s Ender Chest.", + "exempt": "You cannot open this Ender Chest because the player is exempt.", + "title": "${player}'s Ender Chest" + }, + "item": { + "noItem": "You are not holding any item!", + "notRepairable": "This item is not repairable!", + "alreadyRepaired": "This item is already repaired!", + "nameSet": "Successfully set the new item name!", + "loreCleared": "Item lore cleared!", + "loreSet": "Successfully set the new item lore!", + "nameCleared": "Item name cleared!", + "repaired": "Item repaired!", + "stackRefilled": "Item stack refilled!" + }, + "staffchat": { + "disabled": "Staff chat disabled.", + "message": "🔧 ${name}: ${message}", + "enabled": "Staff chat enabled. All your messages will be sent to staff chat instead." + }, + "restart": { + "barLabel": "Server restarting in ${remaining_time}", + "chatMessage": "The server is restarting in ${remaining_time}", + "kickMessage": "The server is restarting!" + }, + "afk": { + "leaderboardHeader": "Active Time Leaderboard:", + "leaderboardEntry": " ${index}. ${player}: ${time}", + "yourActiveTime": "Your active time is ${activeTime}.", + "leaderboardRecalculated": "Recalculated active time leaderboard!", + "neverPlayed": "This player never played.", + "returnAfk": "%player:displayname% is no longer AFK", + "playerActiveTime": "${player}'s active time is ${activeTime}.", + "notFound": "Player not found.", + "activeTimeSet": "Set ${player}'s active time to ${time}!", + "goneAfk": "%player:displayname% is now AFK" + }, + "mute": { + "youAreMuted": "You are muted!" + }, + "jail": { + "playerJailedFor": "You have been jailed for ${duration}!", + "notJailed": "This user is not jailed!", + "infoJailReason": "Reason: ${reason}", + "infoJailedBy": "Jailed by: ${operator}", + "jailNotFound": "This jail does not exist.", + "noJails": "There are no jails yet.", + "jailedFor": "${player} has been jailed at ${jail} for ${duration}!", + "jailed": "${player} has been jailed at ${jail} indefinitely!", + "unjailed": "Unjailed ${player}!", + "playerUnjailed": "You have been unjailed!", + "infoJailedFor": "Jail time: ${duration}", + "cannotUseBlocks": "You are not allowed to use blocks in jail!", + "infoJailReasonEmpty": "No reason", + "alreadyJailed": "This player is already jailed!", + "playerJailedForWithReason": "You have been jailed for ${duration} with reason: ${reason}", + "jailList": "Jails: ${list}.", + "created": "New jail ${jail} created!", + "playerExempt": "This player is exempt from being jailed!", + "teleporting": "Teleporting to ${jail}...", + "jailAlreadyExists": "A jail with this name already exists.", + "infoJailedAt": "Jailed at: ${jail}", + "jailedForWithReason": "${player} has been jailed at ${jail} for ${duration} with reason: ${reason}", + "listEntry": "${jail}", + "cannotAttackEntities": "You are not allowed to attack entities in jail!", + "cannotUseEntities": "You are not allowed to interact with entities in jail!", + "comma": ", ", + "cannotRunCommands": "You are not allowed to run this command in jail!", + "deleted": "Jail ${jail} deleted!", + "infoJailedOn": "Jailed on: ${date}", + "playerJailed": "You have been jailed!", + "cannotSpeak": "You are not allowed to speak in jail!", + "cannotBreakBlocks": "You are not allowed to break blocks in jail!", + "infoHeader": "${player} Jail Information:", + "infoJailedForEmpty": "Indefinitely", + "cannotUseItems": "You are not allowed to use items in jail!" + }, + "commandspy": { + "spyFormat": "👁 ${player}: /${command}" + }, + "trash": { + "trash": "Trash Bin" + }, + "home": { + "forceSetLabel": "Force set home", + "homeListOther": "${owner}'s homes: ${homeList}", + "homeNotFound": "The home ${home} does not exist!", + "teleporting": "Teleporting to ${home}", + "homeDeleted": "Home ${home} deleted!", + "homesFormat": "${home}", + "maxHomesReached": "You have reached the maximum amount of homes!", + "forceSetHover": "Click to force setting new home", + "noHomesOther": "${owner} did not set any home so far.", + "homeSetSuccess": "New home ${home} set!", + "homesFormatOther": "${home}", + "noHomes": "You did not set any home so far.", + "homesComma": ", ", + "teleportingOther": "Teleporting to ${owner}'s ${home}", + "homeExists": "You already have set this home.\n ${forceSetButton}", + "homeList": "Your homes: ${homeList}" + }, + "rtp": { + "noWorldPermission": "You do not have permission to run this command in this world.", + "noBiomePermission": "You do not have permission to use this biome.", + "success": "Teleporting to a random location...", + "searching": "Finding a good spot...", + "unsafe": "Could not place you in a safe spot.", + "tooManyAttempts": "Too many failed attempts at locating a valid spot.", + "timeout": "Could not find a valid spot in a timely manner." + }, + "core": { + "stat.uptime": "Server Uptime: ${uptime}", + "ping.self": "Ping: ${ping}ms", + "ping.other": "${player}'s ping: ${ping}ms", + "stat.tps": "Current TPS: %server:tps_colored%/20.0", + "stat.dedicatedMemory": "Dedicated memory: ${memory} MB", + "stat.maxMemory.hover": "How much memory the JVM can take at most in the system.", + "stat.title": "Server Statistics", + "stat.maxMemory": "Maximum memory: ${memory} MB", + "stat.freeMemory.hover": "How much memory is left free in the dedicated memory.", + "stat.freeMemory": "Free memory: ${memory} MB", + "stat.dedicatedMemory.hover": "How much memory the JVM is using, can expand up to maximum memory." + }, + "fly": { + "disabled": "Flight disabled", + "enabledForOther": "Flight enabled for ${player}", + "disabledForOther": "Flight disabled for ${player}", + "enabled": "Flight enabled" + }, + "powertool": { + "checkEntry": " - ${action}: ${command}", + "allCleared": "All commands cleared from ${item}!", + "actionCleared": "Command cleared from ${item} on ${action}.", + "checkEntryNotSet": " - ${action}: Not set", + "check": "Actions for ${item}:", + "emptyHand": "You are not holding any item.", + "actionSet": "Command bound to ${item} on ${action}.", + "noAction": "This action is not bound for this item." + }, + "spawn": { + "noWorldPermission": "You do not have permission to teleport to this world spawn.", + "noFirstSpawn": "There is no first spawn yet.", + "worldSpawnSet": "${world} spawn point set to ${coordinates}.", + "teleporting": "Teleporting to spawn...", + "firstSpawnDeleted": "First spawn deleted!", + "firstSpawnSet": "First spawn set!" + }, + "customname": { + "setOther": "${player}'s nickname set to ${nickname}!", + "clearedOther": "${player}'s nickname cleared!", + "setSelf": "Nickname set to ${nickname}!", + "errorEmpty": "Username cannot be empty!", + "clearedSelf": "Nickname cleared!" + }, + "god": { + "disabled": "Invincibility disabled", + "enabledForOther": "Invincibility enabled for ${player}", + "disabledForOther": "Invincibility disabled for ${player}", + "enabled": "Invincibility enabled" + }, + "notifications": { + "getAfkOnly.false": " AFK-Only: disabled", + "setOnChatEnabled": "Chat pings enabled.", + "setAfkOnlyDisabled": "Notifications always enabled.", + "setVolume": "Notifications volume set to ${volume}.", + "getAfkOnly.true": " AFK-Only: enabled", + "getHeader": "Your notifications settings:", + "getOnChat.false": " On chat: disabled", + "getOnChat.true": " On chat: enabled", + "getVolume": " Volume: ${volume}", + "setAfkOnlyEnabled": "Notifications enabled only while AFK.", + "getPitch": " Pitch: ${pitch}", + "setOnChatDisabled": "Chat pings disabled.", + "toggleDisabled": "Notifications disabled.", + "setPitch": "Notifications pitch set to ${pitch}.", + "setSound": "Notifications sound set to ${sound}.", + "reset": "Notification settings cleared.", + "getEnabled.true": " Enabled: enabled", + "getEnabled.false": " Enabled: disabled", + "toggleEnabled": "Notifications enabled.", + "getSound": " Sound: ${sound}" + }, + "warp": { + "deleted": "Warp ${warp} deleted!", + "warpsFormat": "${warp}", + "noWarps": "There are no warps so far.", + "noPermission": "You do not have permission to warp to ${warp}.", + "created": "New warp ${warp} created!", + "warpNotFound": "The warp ${warp} does not exist!", + "teleporting": "Warping to ${warp}...", + "warpsComma": ", ", + "warpList": "Server warps: ${warpList}" + } + } +} \ No newline at end of file diff --git a/fabric/runs/server/config/solstice/modules.conf b/fabric/runs/server/config/solstice/modules.conf new file mode 100644 index 00000000..5adc4a4c --- /dev/null +++ b/fabric/runs/server/config/solstice/modules.conf @@ -0,0 +1,55 @@ +admin=true +afk=true +autoannouncement=true +back=true +ban=true +broadcast=true +commandspy=true +core=true +customname=true +enderchest=true +extinguish=true +feed=true +fly=true +god=true +hat=true +heal=true +helpop=true +home=true +ignite=true +ignore=true +info=true +inventorysee=true +item=true +jail=true +kick=true +kit=true +mail=true +miscellaneous=true +mute=true +near=true +note=true +notifications=true +placeholders=true +powertool=true +restart=true +rtp=true +seen=true +sign=true +skull=true +smite=true +spawn=true +staffchat=true +styling=true +sudo=true +suicide=true +tablist=true +teleporthere=true +teleportoffline=true +teleportposition=true +teleportrequest=true +tell=true +timebar=true +trash=true +utilities=true +warp=true diff --git a/fabric/runs/server/eula.txt b/fabric/runs/server/eula.txt new file mode 100644 index 00000000..81a8bc29 --- /dev/null +++ b/fabric/runs/server/eula.txt @@ -0,0 +1,3 @@ +#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA). +#Tue Jun 10 19:08:24 PDT 2025 +eula=false diff --git a/fabric/runs/server/logs/2025-06-10-1.log.gz b/fabric/runs/server/logs/2025-06-10-1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..fd8306fbe41a0365db0b1cd0d341872cfcb6e5ad GIT binary patch literal 3145 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 literal 0 HcmV?d00001 diff --git a/fabric/runs/server/logs/2025-06-10-2.log.gz b/fabric/runs/server/logs/2025-06-10-2.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..3ce9a5866972579fb4eb29e9b1d086a844ba56ba GIT binary patch literal 2614 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 Y3%BmVt-EkL)(f})0#`VY9>7Nc0M(xwCIA2c literal 0 HcmV?d00001 diff --git a/fabric/runs/server/logs/debug-1.log.gz b/fabric/runs/server/logs/debug-1.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..8733c665b87be08f570571d1058c1387617d166e GIT binary patch literal 18232 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 net/minecraft/server/Main +[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Patching game constructor main([Ljava/lang/String;)V +[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) 20w22a+ detected, patching main method... +[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Detected version above 20w22a +[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Applying brand name hook to net/minecraft/client/ClientBrandRetriever::getClientModName +[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Applying brand name hook to net/minecraft/server/MinecraftServer::getServerModName +[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Patched 3 classs +[19:08:13] [main/DEBUG] (FabricLoader/Discovery) Mod discovery time: 36.2 ms +[19:08:13] [main/WARN] (FabricLoader/Resolution) Warnings were found! + - Mod 'Solstice Essentials' (solstice) 1.9.0 recommends any version of luckperms, which is missing! + - You should install any version of luckperms for the optimal experience. +[19:08:13] [main/DEBUG] (FabricLoader/Resolution) Mod resolution time: 74.0 ms +[19:08:13] [main/INFO] (FabricLoader) Loading 48 mods: + - cardinal-components-base 6.1.0 + - cardinal-components-entity 6.1.0 + - fabric-api 0.116.1+1.21.1 + - fabric-api-base 0.4.42+6573ed8c48 + - fabric-api-lookup-api-v1 1.6.71+b559734419 + - fabric-biome-api-v1 13.0.31+d527f9fd19 + - fabric-block-api-v1 1.1.0+0bc3503219 + - fabric-block-view-api-v2 1.0.11+ebb2264e19 + - fabric-command-api-v1 1.2.49+f71b366f19 + - fabric-command-api-v2 2.2.28+6ced4dd919 + - fabric-commands-v0 0.2.66+df3654b319 + - fabric-content-registries-v0 8.0.19+b559734419 + - fabric-convention-tags-v1 2.1.5+7f945d5b19 + - fabric-convention-tags-v2 2.11.1+a406e79519 + - fabric-crash-report-info-v1 0.2.29+0af3f5a719 + - fabric-data-attachment-api-v1 1.4.5+6116a37819 + - fabric-data-generation-api-v1 20.2.29+16c4ae2519 + - fabric-dimensions-v1 4.0.0+6fc22b9919 + - fabric-entity-events-v1 1.8.0+2b27e0a419 + - fabric-events-interaction-v0 0.7.13+ba9dae0619 + - fabric-game-rule-api-v1 1.0.53+6ced4dd919 + - fabric-gametest-api-v1 2.0.5+6fc22b9919 + - fabric-item-api-v1 11.1.1+d5debaed19 + - fabric-item-group-api-v1 4.1.7+def88e3a19 + - fabric-lifecycle-events-v1 2.6.0+0865547519 + - fabric-loot-api-v2 3.0.15+3f89f5a519 + - fabric-loot-api-v3 1.0.3+3f89f5a519 + - fabric-message-api-v1 6.0.14+8aaf3aca19 + - fabric-networking-api-v1 4.3.0+c7469b2119 + - fabric-object-builder-api-v1 15.2.1+40875a9319 + - fabric-particles-v1 4.0.2+6573ed8c19 + - fabric-recipe-api-v1 5.0.14+248df81c19 + - fabric-registry-sync-v0 5.2.0+34f5d91419 + - fabric-rendering-data-attachment-v1 0.3.49+73761d2e19 + - fabric-rendering-fluids-v1 3.1.6+1daea21519 + - fabric-resource-conditions-api-v1 4.3.0+8dc279b119 + - fabric-resource-loader-v0 1.3.1+5b5275af19 + - fabric-screen-handler-api-v1 1.3.88+b559734419 + - fabric-transfer-api-v1 5.4.3+c24bd99419 + - fabric-transitive-access-wideners-v1 6.2.0+45b9699719 + - fabricloader 0.16.14 + - java 21 + - minecraft 1.21.1 + - mixinextras 0.4.0 + - placeholder-api 2.4.2+1.21 + - sgui 1.9.1+1.21.1 + - solstice 1.9.0 + - trinkets 3.10.0 +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-loot-api-v2\3.0.15+3f89f5a519\fabric-loot-api-v2-3.0.15+3f89f5a519.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-entity-events-v1\1.8.0+2b27e0a419\fabric-entity-events-v1-1.8.0+2b27e0a419.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-object-builder-api-v1\15.2.1+40875a9319\fabric-object-builder-api-v1-15.2.1+40875a9319.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.github.llamalad7\mixinextras-fabric\0.4.0\37e5d2590769ab4e465dd140f8f1efe42f5fda9e\mixinextras-fabric-0.4.0.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-command-api-v1\1.2.49+f71b366f19\fabric-command-api-v1-1.2.49+f71b366f19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-message-api-v1\6.0.14+8aaf3aca19\fabric-message-api-v1-6.0.14+8aaf3aca19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-resource-conditions-api-v1\4.3.0+8dc279b119\fabric-resource-conditions-api-v1-4.3.0+8dc279b119.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-convention-tags-v2\2.11.1+a406e79519\fabric-convention-tags-v2-2.11.1+a406e79519.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-particles-v1\4.0.2+6573ed8c19\fabric-particles-v1-4.0.2+6573ed8c19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api\0.116.1+1.21.1\fabric-api-0.116.1+1.21.1.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-screen-handler-api-v1\1.3.88+b559734419\fabric-screen-handler-api-v1-1.3.88+b559734419.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-gametest-api-v1\2.0.5+6fc22b9919\fabric-gametest-api-v1-2.0.5+6fc22b9919.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-resource-loader-v0\1.3.1+5b5275af19\fabric-resource-loader-v0-1.3.1+5b5275af19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-recipe-api-v1\5.0.14+248df81c19\fabric-recipe-api-v1-5.0.14+248df81c19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-content-registries-v0\8.0.19+b559734419\fabric-content-registries-v0-8.0.19+b559734419.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-data-attachment-api-v1\1.4.5+6116a37819\fabric-data-attachment-api-v1-1.4.5+6116a37819.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-events-interaction-v0\0.7.13+ba9dae0619\fabric-events-interaction-v0-0.7.13+ba9dae0619.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\dev\emi\trinkets\3.10.0\trinkets-3.10.0.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-block-api-v1\1.1.0+0bc3503219\fabric-block-api-v1-1.1.0+0bc3503219.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-item-api-v1\11.1.1+d5debaed19\fabric-item-api-v1-11.1.1+d5debaed19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-transfer-api-v1\5.4.3+c24bd99419\fabric-transfer-api-v1-5.4.3+c24bd99419.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-loot-api-v3\1.0.3+3f89f5a519\fabric-loot-api-v3-1.0.3+3f89f5a519.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-transitive-access-wideners-v1\6.2.0+45b9699719\fabric-transitive-access-wideners-v1-6.2.0+45b9699719.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-convention-tags-v1\2.1.5+7f945d5b19\fabric-convention-tags-v1-2.1.5+7f945d5b19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-block-view-api-v2\1.0.11+ebb2264e19\fabric-block-view-api-v2-1.0.11+ebb2264e19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api-base\0.4.42+6573ed8c48\fabric-api-base-0.4.42+6573ed8c48.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api-lookup-api-v1\1.6.71+b559734419\fabric-api-lookup-api-v1-1.6.71+b559734419.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-item-group-api-v1\4.1.7+def88e3a19\fabric-item-group-api-v1-4.1.7+def88e3a19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-data-attachment-v1\0.3.49+73761d2e19\fabric-rendering-data-attachment-v1-0.3.49+73761d2e19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-lifecycle-events-v1\2.6.0+0865547519\fabric-lifecycle-events-v1-2.6.0+0865547519.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-commands-v0\0.2.66+df3654b319\fabric-commands-v0-0.2.66+df3654b319.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\org\ladysnake\cardinal-components-api\cardinal-components-base\6.1.0\cardinal-components-base-6.1.0.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\eu\pb4\sgui-fabric\1.9.1+1.21.1\sgui-fabric-1.9.1+1.21.1-fabric.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\eu\pb4\placeholder-api\2.4.2+1.21\placeholder-api-2.4.2+1.21.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-biome-api-v1\13.0.31+d527f9fd19\fabric-biome-api-v1-13.0.31+d527f9fd19.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-command-api-v2\2.2.28+6ced4dd919\fabric-command-api-v2-2.2.28+6ced4dd919.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-fluids-v1\3.1.6+1daea21519\fabric-rendering-fluids-v1-3.1.6+1daea21519.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-networking-api-v1\4.3.0+c7469b2119\fabric-networking-api-v1-4.3.0+c7469b2119.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-crash-report-info-v1\0.2.29+0af3f5a719\fabric-crash-report-info-v1-0.2.29+0af3f5a719.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-game-rule-api-v1\1.0.53+6ced4dd919\fabric-game-rule-api-v1-1.0.53+6ced4dd919.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\fabric\build\resources\main to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\org\ladysnake\cardinal-components-api\cardinal-components-entity\6.1.0\cardinal-components-entity-6.1.0.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-registry-sync-v0\5.2.0+34f5d91419\fabric-registry-sync-v0-5.2.0+34f5d91419.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-dimensions-v1\4.0.0+6fc22b9919\fabric-dimensions-v1-4.0.0+6fc22b9919.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-data-generation-api-v1\20.2.29+16c4ae2519\fabric-data-generation-api-v1-20.2.29+16c4ae2519.jar to classpath. +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.loot.v2.LootInitializer for mod fabric-loot-api-v2 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.command.v1.LegacyHandler for mod fabric-command-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.resource.conditions.ResourceConditionsImpl for mod fabric-resource-conditions-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.tag.convention.v2.TranslationConventionLogWarnings for mod fabric-convention-tags-v2 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.screenhandler.client.ClientNetworking for mod fabric-screen-handler-api-v1 (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.screenhandler.Networking for mod fabric-screen-handler-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.gametest.FabricGameTestModInitializer for mod fabric-gametest-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.recipe.ingredient.client.CustomIngredientSyncClient for mod fabric-recipe-api-v1 (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.recipe.ingredient.CustomIngredientInit for mod fabric-recipe-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.recipe.ingredient.CustomIngredientSync for mod fabric-recipe-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.attachment.client.AttachmentSyncClient for mod fabric-data-attachment-api-v1 (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.attachment.AttachmentEntrypoint for mod fabric-data-attachment-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.attachment.sync.AttachmentSync for mod fabric-data-attachment-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.event.interaction.client.InteractionEventsRouterClient for mod fabric-events-interaction-v0 (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.event.interaction.InteractionEventsRouter for mod fabric-events-interaction-v0 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.compat.TrinketsEmiPlugin for mod trinkets (key emi) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.compat.TrinketsREIPlugin for mod trinkets (key rei_client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.TrinketsClient for mod trinkets (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.TrinketsMain for mod trinkets (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.TrinketsMain for mod trinkets (key cardinal-components-entity) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.tag.convention.ConventionLogWarnings for mod fabric-convention-tags-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.lookup.ApiLookupImpl for mod fabric-api-lookup-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.client.event.lifecycle.ClientLifecycleEventsImpl for mod fabric-lifecycle-events-v1 (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.event.lifecycle.LifecycleEventsImpl for mod fabric-lifecycle-events-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer org.ladysnake.cca.internal.base.ComponentsInternals::init for mod cardinal-components-base (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.networking.client.ClientNetworkingImpl::clientInit for mod fabric-networking-api-v1 (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.networking.CommonPacketsImpl::init for mod fabric-networking-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.networking.NetworkingImpl::init for mod fabric-networking-api-v1 (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer me.alexdevs.solstice.fabric.SolsticeFabric for mod solstice (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer org.ladysnake.cca.internal.entity.CcaEntityClient::initClient for mod cardinal-components-entity (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer org.ladysnake.cca.internal.entity.CardinalComponentsEntity::init for mod cardinal-components-entity (key main) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.client.registry.sync.FabricRegistryClientInit for mod fabric-registry-sync-v0 (key client) +[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.registry.sync.FabricRegistryInit for mod fabric-registry-sync-v0 (key main) +[19:08:14] [main/INFO] (FabricLoader/Mixin) SpongePowered MIXIN Subsystem Version=0.8.7 Source=file:/F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.15.0+mixin.0.8.7/2ce1c5d57a061f3e259ec30b8b0cb2dc889c5156/sponge-mixin-0.15.0+mixin.0.8.7.jar Service=Knot/Fabric Env=SERVER +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Initialising Mixin Platform Manager +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Adding mixin platform agents for container ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Instancing new MixinPlatformAgentDefault for ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) MixinPlatformAgentDefault accepted container ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Instancing new MixinPlatformAgentDefault for ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) MixinPlatformAgentDefault accepted container ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar)] +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar)] +[19:08:14] [main/DEBUG] (FabricLoader/Mappings) Loading mappings took 157 ms +[19:08:14] [main/INFO] (FabricLoader/Mixin) Loaded Fabric development mappings for mixin remapper! +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-loot-api-v2.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_17 +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-loot-api-v2.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-entity-events-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-object-builder-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-message-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-resource-conditions-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-convention-tags-api-v2.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-screen-handler-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-gametest-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-resource-loader-v0.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-recipe-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-content-registries-v0.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-data-attachment-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-events-interaction-v0.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config trinkets.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-block-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-item-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-transfer-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-loot-api-v3.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-block-view-api-v2.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-api-lookup-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-item-group-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_21 specified by fabric-rendering-data-attachment-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_21 +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-rendering-data-attachment-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-lifecycle-events-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-lifecycle-events-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-biome-api-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-biome-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-command-api-v2.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-command-api-v2.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-networking-api-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-networking-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-crash-report-info-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-crash-report-info-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-game-rule-api-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-game-rule-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-registry-sync-v0.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-registry-sync-v0.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-dimensions-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-dimensions-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-data-generation-api-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-data-generation-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\minecraftMaven\net\minecraft\minecraft-merged-9beed7dc48\1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2\minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\fabric\build\classes\java\main to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\fabric\build\resources\main to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\fabric-loom\1.21.1\loom.mappings.1_21_1.layered+hash.730628366-v2\mappings.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.spongepowered\configurate-hocon\4.2.0\de6f890d9b7eaf2e8bb68866dd19c1d719835\configurate-hocon-4.2.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.spongepowered\configurate-gson\4.2.0\8bc56bc3d77e45b66324be9dbf1fc688bf528969\configurate-gson-4.2.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.spongepowered\configurate-core\4.2.0\7b322107fae38a6b8d30690b6b512696c49d9d66\configurate-core-4.2.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.typesafe\config\1.4.3\b57e0fbdc7270d8ea59c1ba367457a5cc7ba0e98\config-1.4.3.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.leangen.geantyref\geantyref\1.3.16\177fe050a1ecc6f121bd3ffa511f2f5ce9099f00\geantyref-1.3.16.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.github.llamalad7\mixinextras-fabric\0.4.0\37e5d2590769ab4e465dd140f8f1efe42f5fda9e\mixinextras-fabric-0.4.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.fabricmc\dev-launch-injector\0.2.1+build.8\da8bef7e6e2f952da707f282bdb46882a0fce5e3\dev-launch-injector-0.2.1+build.8.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.github.oshi\oshi-core\6.4.10\b1d8ab82d11d92fd639b56d639f8f46f739dd5fa\oshi-core-6.4.10.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.google.guava\failureaccess\1.0.1\1dcf1de382a0bf95a3d8b0849546c88bac1292c9\failureaccess-1.0.1.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\32.1.2-jre\5e64ec7e056456bef3a4bc4c6fdaef71e8ab6318\guava-32.1.2-jre.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.mojang\brigadier\1.3.10\d15b53a14cf20fdcaa98f731af5dda654452c010\brigadier-1.3.10.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.mojang\datafixerupper\8.0.16\67d4de6d7f95d89bcf5862995fb854ebaec02a34\datafixerupper-8.0.16.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\commons-io\commons-io\2.15.1\f11560da189ab563a5c8e351941415430e9304ea\commons-io-2.15.1.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-buffer\4.1.97.Final\f8f3d8644afa5e6e1a40a3a6aeb9d9aa970ecb4f\netty-buffer-4.1.97.Final.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-codec\4.1.97.Final\384ba4d75670befbedb45c4d3b497a93639c206d\netty-codec-4.1.97.Final.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-common\4.1.97.Final\7cceacaf11df8dc63f23d0fb58e9d4640fc88404\netty-common-4.1.97.Final.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-handler\4.1.97.Final\abb86c6906bf512bf2b797a41cd7d2e8d3cd7c36\netty-handler-4.1.97.Final.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-resolver\4.1.97.Final\cec8348108dc76c47cf87c669d514be52c922144\netty-resolver-4.1.97.Final.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport-classes-epoll\4.1.97.Final\795da37ded759e862457a82d9d92c4d39ce8ecee\netty-transport-classes-epoll-4.1.97.Final.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport-native-unix-common\4.1.97.Final\d469d84265ab70095b01b40886cabdd433b6e664\netty-transport-native-unix-common-4.1.97.Final.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport\4.1.97.Final\f37380d23c9bb079bc702910833b2fd532c9abd0\netty-transport-4.1.97.Final.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\it.unimi.dsi\fastutil\8.5.12\c24946d46824bd528054bface3231d2ecb7e95e8\fastutil-8.5.12.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.java.dev.jna\jna-platform\5.14.0\28934d48aed814f11e4c584da55c49fa7032b31b\jna-platform-5.14.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.java.dev.jna\jna\5.14.0\67bf3eaea4f0718cb376a181a629e5f88fa1c9dd\jna-5.14.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.sf.jopt-simple\jopt-simple\5.0.4\4fdac2fbe92dfad86aa6e9301736f6b4342a3f5c\jopt-simple-5.0.4.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-lang3\3.14.0\1ed471194b02f2c6cb734a0cd6f6f107c673afae\commons-lang3-3.14.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.joml\joml\1.10.5\22566d58af70ad3d72308bab63b8339906deb649\joml-1.10.5.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.3.3\81091b006dbb43fab04c8c638e9ac87c51b4096d\lwjgl-freetype-3.3.3-natives-windows.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.3.3\82028265a0a2ff33523ca75137ada7dc176e5210\lwjgl-freetype-3.3.3-natives-windows-arm64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.3.3\15a8c1de7f51d07a92eae7ce1222557073a0c0c3\lwjgl-freetype-3.3.3-natives-windows-x86.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\e449e28b4891fc423c54c85fbc5bb0b9efece67a\lwjgl-glfw-3.3.3-natives-windows.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\f27018dc74f6289574502b46cce55d52817554e2\lwjgl-glfw-3.3.3-natives-windows-arm64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\32334f3fd5270a59bad9939a93115acb6de36dcf\lwjgl-glfw-3.3.3-natives-windows-x86.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.3\426222fc027602a5f21b9c0fe79cde6a4c7a011f\lwjgl-jemalloc-3.3.3-natives-windows.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.3\ba1f3fed0ee4be0217eaa41c5bbfb4b9b1383c33\lwjgl-jemalloc-3.3.3-natives-windows-arm64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.3\f6063b6e0f23be483c5c88d84ce51b39dc69126c\lwjgl-jemalloc-3.3.3-natives-windows-x86.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.3\cf83862ae95d98496b26915024c7e666d8ab1c8f\lwjgl-openal-3.3.3-natives-windows.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.3\8e0615235116b9e4160dfe87bec90f5f6378bf72\lwjgl-openal-3.3.3-natives-windows-arm64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.3\87b8d5050e3adb46bb58fe1cb2669a4a48fce10d\lwjgl-openal-3.3.3-natives-windows-x86.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.3\e6c1eec8be8a71951b830a4d69efc01c6531900c\lwjgl-opengl-3.3.3-natives-windows.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.3\65e956d3735a1abdc82eff4baec1b61174697d4b\lwjgl-opengl-3.3.3-natives-windows-arm64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.3\d32d833dcaa2f355a886eaf21f0408b5f03241d\lwjgl-opengl-3.3.3-natives-windows-x86.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.3\1d9facdf6541de114b0f963be33505b7679c78cb\lwjgl-stb-3.3.3-natives-windows.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.3\a584ab44de569708871f0a79561f4d8c37487f2c\lwjgl-stb-3.3.3-natives-windows-arm64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.3\b5c874687b9aac1a936501d4ed2c49567fd1b575\lwjgl-stb-3.3.3-natives-windows-x86.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.3\a6697981b0449a5087c1d546fc08b4f73e8f98c9\lwjgl-tinyfd-3.3.3-natives-windows.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.3\a88c494f3006eb91a7433b12a3a55a9a6c20788b\lwjgl-tinyfd-3.3.3-natives-windows-arm64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.3\c336c84ee88cccb495c6ffa112395509e7378e8a\lwjgl-tinyfd-3.3.3-natives-windows-x86.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.3\a5ed18a2b82fc91b81f40d717cb1f64c9dcb0540\lwjgl-3.3.3-natives-windows.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.3\e9aca8c5479b520a2a7f0d542a118140e812c5e8\lwjgl-3.3.3-natives-windows-arm64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.3\9e670718e050aeaeea0c2d5b907cffb142f2e58f\lwjgl-3.3.3-natives-windows-x86.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lz4\lz4-java\1.8.0\4b986a99445e49ea5fbf5d149c4b63f6ed6c6780\lz4-java-1.8.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport-native-epoll\4.1.97.Final\54188f271e388e7f313aea995e82f58ce2cdb809\netty-transport-native-epoll-4.1.97.Final-linux-x86_64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport-native-epoll\4.1.97.Final\5514744c588190ffda076b35a9b8c9f24946a960\netty-transport-native-epoll-4.1.97.Final-linux-aarch_64.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.luckperms\api\5.4\7b07573b0c9f06a1e5ddfc6b0042d04759d0ba8a\api-5.4.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\eu\pb4\sgui-fabric\1.9.1+1.21.1\sgui-fabric-1.9.1+1.21.1-fabric.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api\0.116.1+1.21.1\fabric-api-0.116.1+1.21.1.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\eu\pb4\placeholder-api\2.4.2+1.21\placeholder-api-2.4.2+1.21.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-transfer-api-v1\5.4.3+c24bd99419\fabric-transfer-api-v1-5.4.3+c24bd99419.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api-lookup-api-v1\1.6.71+b559734419\fabric-api-lookup-api-v1-1.6.71+b559734419.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-blockrenderlayer-v1\1.1.52+0af3f5a719\fabric-blockrenderlayer-v1-1.1.52+0af3f5a719.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-client-tags-api-v1\1.1.15+6573ed8c19\fabric-client-tags-api-v1-1.1.15+6573ed8c19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-command-api-v1\1.2.49+f71b366f19\fabric-command-api-v1-1.2.49+f71b366f19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-commands-v0\0.2.66+df3654b319\fabric-commands-v0-0.2.66+df3654b319.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-command-api-v2\2.2.28+6ced4dd919\fabric-command-api-v2-2.2.28+6ced4dd919.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-content-registries-v0\8.0.19+b559734419\fabric-content-registries-v0-8.0.19+b559734419.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-data-generation-api-v1\20.2.29+16c4ae2519\fabric-data-generation-api-v1-20.2.29+16c4ae2519.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-convention-tags-v1\2.1.5+7f945d5b19\fabric-convention-tags-v1-2.1.5+7f945d5b19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-convention-tags-v2\2.11.1+a406e79519\fabric-convention-tags-v2-2.11.1+a406e79519.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-data-attachment-api-v1\1.4.5+6116a37819\fabric-data-attachment-api-v1-1.4.5+6116a37819.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-entity-events-v1\1.8.0+2b27e0a419\fabric-entity-events-v1-1.8.0+2b27e0a419.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-events-interaction-v0\0.7.13+ba9dae0619\fabric-events-interaction-v0-0.7.13+ba9dae0619.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-gametest-api-v1\2.0.5+6fc22b9919\fabric-gametest-api-v1-2.0.5+6fc22b9919.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-item-api-v1\11.1.1+d5debaed19\fabric-item-api-v1-11.1.1+d5debaed19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-item-group-api-v1\4.1.7+def88e3a19\fabric-item-group-api-v1-4.1.7+def88e3a19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-lifecycle-events-v1\2.6.0+0865547519\fabric-lifecycle-events-v1-2.6.0+0865547519.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-loot-api-v2\3.0.15+3f89f5a519\fabric-loot-api-v2-3.0.15+3f89f5a519.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-loot-api-v3\1.0.3+3f89f5a519\fabric-loot-api-v3-1.0.3+3f89f5a519.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-message-api-v1\6.0.14+8aaf3aca19\fabric-message-api-v1-6.0.14+8aaf3aca19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-model-loading-api-v1\2.0.0+fe474d6b19\fabric-model-loading-api-v1-2.0.0+fe474d6b19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-recipe-api-v1\5.0.14+248df81c19\fabric-recipe-api-v1-5.0.14+248df81c19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-screen-handler-api-v1\1.3.88+b559734419\fabric-screen-handler-api-v1-1.3.88+b559734419.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-registry-sync-v0\5.2.0+34f5d91419\fabric-registry-sync-v0-5.2.0+34f5d91419.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-networking-api-v1\4.3.0+c7469b2119\fabric-networking-api-v1-4.3.0+c7469b2119.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-object-builder-api-v1\15.2.1+40875a9319\fabric-object-builder-api-v1-15.2.1+40875a9319.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-particles-v1\4.0.2+6573ed8c19\fabric-particles-v1-4.0.2+6573ed8c19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-renderer-indigo\1.7.0+c705a49c19\fabric-renderer-indigo-1.7.0+c705a49c19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-renderer-api-v1\3.4.0+c705a49c19\fabric-renderer-api-v1-3.4.0+c705a49c19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-fluids-v1\3.1.6+1daea21519\fabric-rendering-fluids-v1-3.1.6+1daea21519.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-renderer-registries-v1\3.2.68+df3654b319\fabric-renderer-registries-v1-3.2.68+df3654b319.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-v0\1.1.71+df3654b319\fabric-rendering-v0-1.1.71+df3654b319.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-v1\5.0.5+df16efd019\fabric-rendering-v1-5.0.5+df16efd019.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-screen-api-v1\2.0.25+8b68f1c719\fabric-screen-api-v1-2.0.25+8b68f1c719.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api-base\0.4.42+6573ed8c48\fabric-api-base-0.4.42+6573ed8c48.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-biome-api-v1\13.0.31+d527f9fd19\fabric-biome-api-v1-13.0.31+d527f9fd19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-block-api-v1\1.1.0+0bc3503219\fabric-block-api-v1-1.1.0+0bc3503219.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-data-attachment-v1\0.3.49+73761d2e19\fabric-rendering-data-attachment-v1-0.3.49+73761d2e19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-block-view-api-v2\1.0.11+ebb2264e19\fabric-block-view-api-v2-1.0.11+ebb2264e19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-crash-report-info-v1\0.2.29+0af3f5a719\fabric-crash-report-info-v1-0.2.29+0af3f5a719.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-dimensions-v1\4.0.0+6fc22b9919\fabric-dimensions-v1-4.0.0+6fc22b9919.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-game-rule-api-v1\1.0.53+6ced4dd919\fabric-game-rule-api-v1-1.0.53+6ced4dd919.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-keybindings-v0\0.2.45+df3654b319\fabric-keybindings-v0-0.2.45+df3654b319.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-key-binding-api-v1\1.0.47+0af3f5a719\fabric-key-binding-api-v1-1.0.47+0af3f5a719.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-resource-conditions-api-v1\4.3.0+8dc279b119\fabric-resource-conditions-api-v1-4.3.0+8dc279b119.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-resource-loader-v0\1.3.1+5b5275af19\fabric-resource-loader-v0-1.3.1+5b5275af19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-sound-api-v1\1.0.23+6573ed8c19\fabric-sound-api-v1-1.0.23+6573ed8c19.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-transitive-access-wideners-v1\6.2.0+45b9699719\fabric-transitive-access-wideners-v1-6.2.0+45b9699719.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\dev\emi\trinkets\3.10.0\trinkets-3.10.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\org\ladysnake\cardinal-components-api\cardinal-components-entity\6.1.0\cardinal-components-entity-6.1.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\org\ladysnake\cardinal-components-api\cardinal-components-base\6.1.0\cardinal-components-base-6.1.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.kyori\option\1.1.0\593fecb9c42688eebc7d8da5d6ea127f4d4c92a2\option-1.1.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.jline\jline-reader\3.20.0\8f15415b022a25b473e8e16c28ae913186ffb9c4\jline-reader-3.20.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.jline\jline-terminal\3.20.0\d0ddcc708ddf527a3454c941b7b9225cc83a15ff\jline-terminal-3.20.0.jar to classpath. +[19:08:14] [main/DEBUG] (FabricLoader/Entrypoint) No subscribers for entrypoint 'preLaunch' +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing mixins for MixinEnvironment[DEFAULT] +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-loot-api-v2.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-loot-api-v2-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-entity-events-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-entity-events-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-object-builder-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-object-builder-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config mixinextras.init.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/MixinExtras|Service) com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.0) is taking over from null +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @Inject with org.spongepowered.asm.mixin.injection.struct.CallbackInjectionInfo +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @ModifyArg with org.spongepowered.asm.mixin.injection.struct.ModifyArgInjectionInfo +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @ModifyArgs with org.spongepowered.asm.mixin.injection.struct.ModifyArgsInjectionInfo +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @Redirect with org.spongepowered.asm.mixin.injection.struct.RedirectInjectionInfo +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @ModifyVariable with org.spongepowered.asm.mixin.injection.struct.ModifyVariableInjectionInfo +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @ModifyConstant with org.spongepowered.asm.mixin.injection.struct.ModifyConstantInjectionInfo +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-message-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-message-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-resource-conditions-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-resource-conditions-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-convention-tags-api-v2.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-convention-tags-v2-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-screen-handler-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-screen-handler-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-gametest-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-gametest-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-resource-loader-v0.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-resource-loader-v0-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-recipe-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-recipe-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-content-registries-v0.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-content-registries-v0-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-data-attachment-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-data-attachment-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-events-interaction-v0.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-events-interaction-v0-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config trinkets.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap trinkets-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-block-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-block-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-item-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-item-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-transfer-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-transfer-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-loot-api-v3.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-loot-api-v3-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-block-view-api-v2.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-block-view-api-v2-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-api-lookup-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-api-lookup-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-item-group-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-item-group-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-rendering-data-attachment-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-rendering-data-attachment-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-lifecycle-events-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-lifecycle-events-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config mixins.cardinal_components_base.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap cardinal-components-base-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config sgui.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap sgui-fabric-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-biome-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-biome-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-command-api-v2.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-command-api-v2-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-networking-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-networking-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-crash-report-info-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-crash-report-info-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-game-rule-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-game-rule-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config solstice.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config mixins.cardinal_components_entity.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap cardinal-components-entity-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-registry-sync-v0.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-registry-sync-v0-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-dimensions-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-dimensions-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-data-generation-api-v1.mixins.json +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-data-generation-api-v1-refmap.json using remapper chain +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-loot-api-v2.mixins.json (2) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-entity-events-v1.mixins.json (12) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-object-builder-v1.mixins.json (11) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing mixinextras.init.mixins.json (0) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-message-api-v1.mixins.json (2) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-resource-conditions-api-v1.mixins.json (10) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-convention-tags-api-v2.mixins.json (1) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-screen-handler-api-v1.mixins.json (2) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-gametest-api-v1.mixins.json (8) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-resource-loader-v0.mixins.json (14) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-recipe-api-v1.mixins.json (4) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-content-registries-v0.mixins.json (13) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-data-attachment-api-v1.mixins.json (15) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-events-interaction-v0.mixins.json (4) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/server/network/ServerGamePacketListenerImpl$1 is public in fabric-events-interaction-v0.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-events-interaction-v0 and should be specified in value +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing trinkets.mixins.json (17) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-block-api-v1.mixins.json (5) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/world/level/chunk/LevelChunkSection$1BlockCounter is public in fabric-block-api-v1.mixins.json:ChunkSectionBlockStateCounterMixin from mod fabric-block-api-v1 and should be specified in value +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-item-api-v1.mixins.json (16) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-transfer-api-v1.mixins.json (15) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-loot-api-v3.mixins.json (6) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-block-view-api-v2.mixins.json (3) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-api-lookup-api-v1.mixins.json (2) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-item-group-api-v1.mixins.json (3) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-rendering-data-attachment-v1.mixins.json (2) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-lifecycle-events-v1.mixins.json (11) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/server/level/ServerLevel$EntityCallbacks is public in fabric-lifecycle-events-v1.mixins.json:ServerWorldServerEntityHandlerMixin from mod fabric-lifecycle-events-v1 and should be specified in value +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing mixins.cardinal_components_base.json (1) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing sgui.mixins.json (6) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-biome-api-v1.mixins.json (9) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/world/level/biome/MultiNoiseBiomeSourceParameterList$Preset$1 is public in fabric-biome-api-v1.mixins.json:NetherBiomePresetMixin from mod fabric-biome-api-v1 and should be specified in value +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-command-api-v2.mixins.json (5) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-networking-api-v1.mixins.json (18) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/network/protocol/common/custom/CustomPacketPayload$1 is public in fabric-networking-api-v1.mixins.json:CustomPayloadPacketCodecMixin from mod fabric-networking-api-v1 and should be specified in value +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/server/level/ChunkMap$TrackedEntity is public in fabric-networking-api-v1.mixins.json:accessor.EntityTrackerAccessor from mod fabric-networking-api-v1 and should be specified in value +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-crash-report-info-v1.mixins.json (1) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-game-rule-api-v1.mixins.json (6) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/server/commands/GameRuleCommand$1 is public in fabric-game-rule-api-v1.mixins.json:GameRuleCommandVisitorMixin from mod fabric-game-rule-api-v1 and should be specified in value +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing solstice.mixins.json (23) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing mixins.cardinal_components_entity.json (7) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-registry-sync-v0.mixins.json (14) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-dimensions-v1.mixins.json (4) +[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-data-generation-api-v1.mixins.json (7) +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Inner class net/fabricmc/fabric/mixin/transfer/ChiseledBookshelfBlockEntityMixin$1 in net/fabricmc/fabric/mixin/transfer/ChiseledBookshelfBlockEntityMixin on net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity gets unique name net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity$Anonymous$28373269ae304d9b9b0a862ca0793b7f +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Inner class net/fabricmc/fabric/mixin/itemgroup/ItemGroupsMixin$1ItemGroupPosition in net/fabricmc/fabric/mixin/itemgroup/ItemGroupsMixin on net/minecraft/world/item/CreativeModeTabs gets unique name net/minecraft/world/item/CreativeModeTabs$1ItemGroupPosition$f7ce9f9d67974a18b62b763e2d30b675 +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Prepared 269 mixins in 0.558 sec (2.1ms avg) (0ms load, 0ms transform, 0ms plugin) +[19:08:15] [main/INFO] (FabricLoader/MixinExtras|Service) Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.0). +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @SugarWrapper with com.llamalad7.mixinextras.sugar.impl.SugarWrapperInjectionInfo +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @FactoryRedirectWrapper with com.llamalad7.mixinextras.wrapper.factory.FactoryRedirectWrapperInjectionInfo +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Mixing server.MainMixin from fabric-gametest-api-v1.mixins.json into net.minecraft.server.Main +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:server.MainMixin from mod fabric-gametest-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Mixing MainMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.server.Main +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:MainMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Mixing server.MainMixin from fabric-data-generation-api-v1.mixins.json into net.minecraft.server.Main +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-data-generation-api-v1.mixins.json:server.MainMixin from mod fabric-data-generation-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:server.MainMixin from mod fabric-gametest-api-v1->@Inject::main([Ljava/lang/String;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:server.MainMixin from mod fabric-gametest-api-v1->@Inject::exitOnError(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:MainMixin from mod fabric-registry-sync-v0->@Inject::afterModInit(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-data-generation-api-v1.mixins.json:server.MainMixin from mod fabric-data-generation-api-v1->@Inject::main([Ljava/lang/String;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:15] [main/DEBUG] (io.netty.util.internal.logging.InternalLoggerFactory) Using SLF4J as the default logging framework +[19:08:15] [main/DEBUG] (io.netty.util.ResourceLeakDetector) -Dio.netty.leakDetection.level: simple +[19:08:15] [main/DEBUG] (io.netty.util.ResourceLeakDetector) -Dio.netty.leakDetection.targetRecords: 4 +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Mixing SystemDetailsMixin from fabric-crash-report-info-v1.mixins.json into net.minecraft.SystemReport +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$appendMods$1(Lnet/fabricmc/loader/api/ModContainer;)Ljava/lang/String; to md50bf59$fabric-crash-report-info-v1$lambda$appendMods$1$0 in fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1 +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fillSystemDetails$0()Ljava/lang/String; to md50bf59$fabric-crash-report-info-v1$lambda$fillSystemDetails$0$1 in fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1 +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1->@Inject::fillSystemDetails(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1->@Inject::fillSystemDetails(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1->@Inject::fillSystemDetails(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing BootstrapMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.server.Bootstrap +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:BootstrapMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$initialize$1(Lnet/minecraft/world/level/material/Fluid;)Ljava/util/Collection; to md50bf59$fabric-registry-sync-v0$lambda$initialize$1$0 in fabric-registry-sync-v0.mixins.json:BootstrapMixin from mod fabric-registry-sync-v0 +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$initialize$0(Lnet/minecraft/world/level/block/Block;)Ljava/util/Collection; to md50bf59$fabric-registry-sync-v0$lambda$initialize$0$1 in fabric-registry-sync-v0.mixins.json:BootstrapMixin from mod fabric-registry-sync-v0 +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:BootstrapMixin from mod fabric-registry-sync-v0->@Inject::initialize(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing RegistriesMixin from fabric-item-api-v1.mixins.json into net.minecraft.core.registries.BuiltInRegistries +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RegistriesMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing RegistriesAccessor from fabric-registry-sync-v0.mixins.json into net.minecraft.core.registries.BuiltInRegistries +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:RegistriesAccessor from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getROOT()Lnet/minecraft/core/WritableRegistry; to getROOT$fabric-registry-sync-v0_$md$50bf59$0 in fabric-registry-sync-v0.mixins.json:RegistriesAccessor from mod fabric-registry-sync-v0 +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing RegistriesMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.core.registries.BuiltInRegistries +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:RegistriesMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RegistriesMixin from mod fabric-item-api-v1->@Inject::modifyDefaultItemComponents(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:RegistriesMixin from mod fabric-registry-sync-v0->@Inject::init(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing SimpleRegistryAccessor from fabric-registry-sync-v0.mixins.json into net.minecraft.core.MappedRegistry +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryAccessor from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing SimpleRegistryMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.core.MappedRegistry +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$3([Lnet/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback;)Lnet/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback; to md50bf59$fabric-registry-sync-v0$lambda$init$3$0 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$2([Lnet/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback;Lnet/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback$RemapState;)V to md50bf59$fabric-registry-sync-v0$lambda$init$2$1 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$1([Lnet/fabricmc/fabric/api/event/registry/RegistryEntryAddedCallback;)Lnet/fabricmc/fabric/api/event/registry/RegistryEntryAddedCallback; to md50bf59$fabric-registry-sync-v0$lambda$init$1$2 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$0([Lnet/fabricmc/fabric/api/event/registry/RegistryEntryAddedCallback;ILnet/minecraft/resources/ResourceLocation;Ljava/lang/Object;)V to md50bf59$fabric-registry-sync-v0$lambda$init$0$3 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming @Unique field LOGGERLorg/slf4j/Logger; to fd50bf59$fabric-registry-sync-v0$LOGGER$0 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0->@Inject::init(Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Lifecycle;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0->@Inject::init(Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Lifecycle;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0->@Inject::init(Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Lifecycle;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0->@Inject::set(Lnet/minecraft/resources/ResourceKey;Ljava/lang/Object;Lnet/minecraft/core/RegistrationInfo;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing RegistryKeysMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.core.registries.Registries +[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:RegistryKeysMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ArgumentTypesMixin from fabric-gametest-api-v1.mixins.json into net.minecraft.commands.synchronization.ArgumentTypeInfos +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:ArgumentTypesMixin from mod fabric-gametest-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ArgumentTypesAccessor from fabric-command-api-v2.mixins.json into net.minecraft.commands.synchronization.ArgumentTypeInfos +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-command-api-v2.mixins.json:ArgumentTypesAccessor from mod fabric-command-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method fabric_getClassMap()Ljava/util/Map; to fabric_getClassMap$fabric-command-api-v2_$md$50bf59$0 in fabric-command-api-v2.mixins.json:ArgumentTypesAccessor from mod fabric-command-api-v2 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:ArgumentTypesMixin from mod fabric-gametest-api-v1->@Inject::register(Lnet/minecraft/core/Registry;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemGroupsMixin from fabric-item-group-api-v1.mixins.json into net.minecraft.world.item.CreativeModeTabs +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupsMixin from mod fabric-item-group-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$paginateGroups$0(Lnet/minecraft/core/Holder$Reference;Lnet/minecraft/core/Holder$Reference;)I to md50bf59$fabric-item-group-api-v1$lambda$paginateGroups$0$0 in fabric-item-group-api-v1.mixins.json:ItemGroupsMixin from mod fabric-item-group-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupsMixin from mod fabric-item-group-api-v1->@Inject::deferDuplicateCheck(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupsMixin from mod fabric-item-group-api-v1->@Inject::paginateGroups(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemGroupAccessor from fabric-item-group-api-v1.mixins.json into net.minecraft.world.item.CreativeModeTab +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupAccessor from mod fabric-item-group-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemGroupMixin from fabric-item-group-api-v1.mixins.json into net.minecraft.world.item.CreativeModeTab +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$getStacks$0(Lnet/minecraft/world/item/CreativeModeTab;)Ljava/lang/IllegalStateException; to md50bf59$fabric-item-group-api-v1$lambda$getStacks$0$0 in fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1->@Inject::getStacks(Lnet/minecraft/world/item/CreativeModeTab$ItemDisplayParameters;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1->@Inject::getStacks(Lnet/minecraft/world/item/CreativeModeTab$ItemDisplayParameters;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1->@Inject::getStacks(Lnet/minecraft/world/item/CreativeModeTab$ItemDisplayParameters;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing FireBlockMixin from fabric-content-registries-v0.mixins.json into net.minecraft.world.level.block.FireBlock +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::afterConstruct(Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::afterConstruct(Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::afterConstruct(Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::getFabricBurnChance(Lnet/minecraft/world/level/block/state/BlockState;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::getFabricSpreadChance(Lnet/minecraft/world/level/block/state/BlockState;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockMixin from fabric-block-api-v1.mixins.json into net.minecraft.world.level.block.Block +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-api-v1.mixins.json:BlockMixin from mod fabric-block-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractBlockAccessor from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.state.BlockBehaviour +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:AbstractBlockAccessor from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockViewMixin from fabric-block-view-api-v2.mixins.json into net.minecraft.world.level.BlockGetter +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-view-api-v2.mixins.json:BlockViewMixin from mod fabric-block-view-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing EntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.Entity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing AttachmentTargetsMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.entity.Entity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_readAttachmentsFromNbt$0(Lnet/minecraft/core/HolderLookup$Provider;Lnet/fabricmc/fabric/api/attachment/v1/AttachmentType;Ljava/lang/Object;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_readAttachmentsFromNbt$0$0 in fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing EntityMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.entity.Entity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_syncChange$0(Lnet/fabricmc/fabric/api/attachment/v1/AttachmentSyncPredicate;Lnet/fabricmc/fabric/impl/attachment/sync/s2c/AttachmentSyncPayloadS2C;Lnet/minecraft/server/level/ServerPlayer;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_syncChange$0$1 in fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing common.MixinEntity from mixins.cardinal_components_entity.json into net.minecraft.world.entity.Entity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/world/level/portal/DimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/world/level/portal/DimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterEntityTeleportedToWorld(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FLnet/minecraft/world/entity/Entity;)V doesn't use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterEntityTeleportedToWorld(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FLnet/minecraft/world/entity/Entity;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterEntityTeleportedToWorld(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FLnet/minecraft/world/entity/Entity;)V won't be passed a CallbackInfoReturnable as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::readEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::readEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::readEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::writeEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::writeEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::writeEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::initDataTracker(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::initDataTracker(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::initDataTracker(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::toTag(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::fromTag(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::fromTag(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::fromTag(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing PlayerEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.player.Player +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:PlayerEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing elytra.PlayerEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.player.Player +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:elytra.PlayerEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing events.PlayerMixin from solstice.mixins.json into net.minecraft.world.entity.player.Player +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.customname.CustomDisplayNameMixin from solstice.mixins.json into net.minecraft.world.entity.player.Player +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:PlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onTrySleep(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:PlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onIsSleepingLongEnough(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:elytra.PlayerEntityMixin from mod fabric-entity-events-v1->@Inject::injectElytraCheck(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.PlayerMixin from mod solstice->@Inject::onIsSleepingLongEnough(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.customname.CustomDisplayNameMixin from mod solstice->@Inject::solstice$getDisplayName(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.LivingEntity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing elytra.LivingEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.LivingEntity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:elytra.LivingEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from trinkets.mixins.json into net.minecraft.world.entity.LivingEntity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$6(Lnet/minecraft/world/entity/LivingEntity;Ldev/emi/trinkets/api/TrinketComponent;)V to md50bf59$trinkets$lambda$tick$6$0 in trinkets.mixins.json:LivingEntityMixin from mod trinkets +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$5(Lnet/minecraft/world/entity/LivingEntity;Ljava/util/Map;Ldev/emi/trinkets/api/TrinketComponent;Ljava/util/Map;Ldev/emi/trinkets/api/SlotReference;Lnet/minecraft/world/item/ItemStack;)V to md50bf59$trinkets$lambda$tick$5$1 in trinkets.mixins.json:LivingEntityMixin from mod trinkets +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$4(Lnet/minecraft/core/Holder;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)V to md50bf59$trinkets$lambda$tick$4$2 in trinkets.mixins.json:LivingEntityMixin from mod trinkets +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$3(Lnet/minecraft/core/Holder;Ljava/util/Collection;)V to md50bf59$trinkets$lambda$tick$3$3 in trinkets.mixins.json:LivingEntityMixin from mod trinkets +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$2(Lnet/minecraft/world/entity/ai/attributes/AttributeInstance;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)V to md50bf59$trinkets$lambda$tick$2$4 in trinkets.mixins.json:LivingEntityMixin from mod trinkets +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$dropInventory$1(Lnet/minecraft/world/entity/LivingEntity;ZLdev/emi/trinkets/api/TrinketComponent;)V to md50bf59$trinkets$lambda$dropInventory$1$5 in trinkets.mixins.json:LivingEntityMixin from mod trinkets +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$dropInventory$0(Lnet/minecraft/world/entity/LivingEntity;ZLdev/emi/trinkets/api/SlotReference;Lnet/minecraft/world/item/ItemStack;)V to md50bf59$trinkets$lambda$dropInventory$0$6 in trinkets.mixins.json:LivingEntityMixin from mod trinkets +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from fabric-block-api-v1.mixins.json into net.minecraft.world.entity.LivingEntity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-api-v1.mixins.json:LivingEntityMixin from mod fabric-block-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.entity.LivingEntity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:LivingEntityMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.world.entity.LivingEntity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:LivingEntityMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing events.LivingEntityMixin from solstice.mixins.json into net.minecraft.world.entity.LivingEntity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.miscellaneous.BypassSleepingInBedCheckMixin from solstice.mixins.json into net.minecraft.world.entity.LivingEntity +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::beforeDamage(Lnet/minecraft/world/damagesource/DamageSource;FLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::afterDamage(Lnet/minecraft/world/damagesource/DamageSource;FLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FZ)V doesn't use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::afterDamage(Lnet/minecraft/world/damagesource/DamageSource;FLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FZ)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::afterDamage(Lnet/minecraft/world/damagesource/DamageSource;FLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FZ)V won't be passed a CallbackInfoReturnable as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onSleep(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onSleep(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onSleep(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onIsSleepingInBed(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:elytra.LivingEntityMixin from mod fabric-entity-events-v1->@Inject::injectElytraTick(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::canFreeze(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::dropInventory(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::dropInventory(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::dropInventory(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::tick(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::tick(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::tick(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-api-v1.mixins.json:LivingEntityMixin from mod fabric-block-api-v1->@Inject::allowTaggedBlocksForTrapdoorClimbing(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:LivingEntityMixin from mod fabric-item-api-v1->@Inject::onGetPreferredEquipmentSlot(Lnet/minecraft/world/item/ItemStack;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:LivingEntityMixin from mod fabric-lifecycle-events-v1->@Inject::getEquipmentChanges(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Ljava/util/Map;[Lnet/minecraft/world/entity/EquipmentSlot;IILnet/minecraft/world/entity/EquipmentSlot;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)V doesn't use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:LivingEntityMixin from mod fabric-lifecycle-events-v1->@Inject::getEquipmentChanges(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Ljava/util/Map;[Lnet/minecraft/world/entity/EquipmentSlot;IILnet/minecraft/world/entity/EquipmentSlot;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:LivingEntityMixin from mod fabric-lifecycle-events-v1->@Inject::getEquipmentChanges(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Ljava/util/Map;[Lnet/minecraft/world/entity/EquipmentSlot;IILnet/minecraft/world/entity/EquipmentSlot;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)V won't be passed a CallbackInfoReturnable as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.miscellaneous.BypassSleepingInBedCheckMixin from mod solstice->@Inject::isSleepingInBed(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing AttachmentTargetsMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.Level +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.Level +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.world.level.Level +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:WorldMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldViewMixin from fabric-block-view-api-v2.mixins.json into net.minecraft.world.level.LevelReader +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-view-api-v2.mixins.json:WorldViewMixin from mod fabric-block-view-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldViewMixin from fabric-rendering-data-attachment-v1.mixins.json into net.minecraft.world.level.LevelReader +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerWorldMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.server.level.ServerLevel +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_syncChange$2(Lnet/fabricmc/fabric/api/attachment/v1/AttachmentType;Lnet/fabricmc/fabric/impl/attachment/sync/s2c/AttachmentSyncPayloadS2C;Lnet/minecraft/server/level/ServerPlayer;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_syncChange$2$0 in fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$createAttachmentsPersistentState$1(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/core/HolderLookup$Provider;)Lnet/fabricmc/fabric/impl/attachment/AttachmentPersistentState; to md50bf59$fabric-data-attachment-api-v1$lambda$createAttachmentsPersistentState$1$1 in fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$createAttachmentsPersistentState$0(Lnet/minecraft/server/level/ServerLevel;)Lnet/fabricmc/fabric/impl/attachment/AttachmentPersistentState; to md50bf59$fabric-data-attachment-api-v1$lambda$createAttachmentsPersistentState$0$2 in fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerWorldMixin from fabric-api-lookup-api-v1.mixins.json into net.minecraft.server.level.ServerLevel +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_invalidateCache$5(Ljava/util/Map$Entry;)Z to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_invalidateCache$5$3 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_invalidateCache$4(Ljava/lang/ref/WeakReference;)Z to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_invalidateCache$4$4 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_invalidateCache$3(Ljava/lang/ref/WeakReference;)V to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_invalidateCache$3$5 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_invalidateCache$2(Ljava/lang/ref/WeakReference;)Z to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_invalidateCache$2$6 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_registerCache$1(Ljava/lang/ref/WeakReference;)Z to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_registerCache$1$7 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_registerCache$0(Lnet/minecraft/core/BlockPos;)Ljava/util/List; to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_registerCache$0$8 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerWorldMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.server.level.ServerLevel +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing common.MixinServerWorld from mixins.cardinal_components_entity.json into net.minecraft.server.level.ServerLevel +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1->@Inject::createAttachmentsPersistentState(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1->@Inject::createAttachmentsPersistentState(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1->@Inject::createAttachmentsPersistentState(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::startWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::startWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::startWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::endWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::endWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::endWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tick(Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tick(Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tick(Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tickRiding(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tickRiding(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tickRiding(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractBlockSettingsAccessor from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.state.BlockBehaviour$Properties +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:AbstractBlockSettingsAccessor from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing IdListMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.core.IdMapper +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:IdListMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_remapIds$0(Lit/unimi/dsi/fastutil/ints/Int2IntMap;Ljava/lang/Object;Ljava/lang/Integer;)Ljava/lang/Integer; to md50bf59$fabric-registry-sync-v0$lambda$fabric_remapIds$0$0 in fabric-registry-sync-v0.mixins.json:IdListMixin from mod fabric-registry-sync-v0 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing DetectorRailBlockMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.DetectorRailBlock +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DetectorRailBlockMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$getCustomComparatorOutput$0(Lnet/minecraft/world/entity/Entity;)Z to md50bf59$fabric-object-builder-api-v1$lambda$getCustomComparatorOutput$0$0 in fabric-object-builder-v1.mixins.json:DetectorRailBlockMixin from mod fabric-object-builder-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DetectorRailBlockMixin from mod fabric-object-builder-api-v1->@Inject::getCustomComparatorOutput(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing DropperBlockMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.DropperBlock +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:DropperBlockMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$hookDispense$0(Lnet/fabricmc/fabric/api/transfer/v1/item/ItemVariant;)Z to md50bf59$fabric-transfer-api-v1$lambda$hookDispense$0$0 in fabric-transfer-api-v1.mixins.json:DropperBlockMixin from mod fabric-transfer-api-v1 +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:DropperBlockMixin from mod fabric-transfer-api-v1->@Inject::hookDispense(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing OxidizableMixin from fabric-content-registries-v0.mixins.json into net.minecraft.world.level.block.WeatheringCopper +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:OxidizableMixin from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:OxidizableMixin from mod fabric-content-registries-v0->@Inject::createOxidationLevelIncreasesMap(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing CrafterBlockMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.CrafterBlock +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockStateMixin from fabric-block-api-v1.mixins.json into net.minecraft.world.level.block.state.BlockState +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-block-api-v1.mixins.json:BlockStateMixin from mod fabric-block-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing EntityTypeMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.entity.EntityType +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:EntityTypeMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:EntityTypeMixin from mod fabric-object-builder-api-v1->@Inject::alwaysUpdateVelocity(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing FluidMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.material.Fluid +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:FluidMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:FluidMixin from mod fabric-transfer-api-v1->@Inject::hookGetBucketFillSound(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing ComponentMapBuilderMixin from fabric-item-api-v1.mixins.json into net.minecraft.core.component.DataComponentMap$Builder +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ComponentMapBuilderMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing AttachmentTargetsMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_syncChange$0(Lnet/fabricmc/fabric/api/attachment/v1/AttachmentType;Lnet/fabricmc/fabric/impl/attachment/sync/s2c/AttachmentSyncPayloadS2C;Lnet/minecraft/server/level/ServerPlayer;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_syncChange$0$0 in fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1 +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityMixin from fabric-block-view-api-v2.mixins.json into net.minecraft.world.level.block.entity.BlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-block-view-api-v2.mixins.json:BlockEntityMixin from mod fabric-block-view-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityMixin from fabric-rendering-data-attachment-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1->@Inject::readBlockEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/core/HolderLookup$Provider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1->@Inject::readBlockEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/core/HolderLookup$Provider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1->@Inject::readBlockEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/core/HolderLookup$Provider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1->@Inject::writeBlockEntityAttachments(Lnet/minecraft/core/HolderLookup$Provider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing LockableContainerBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.BaseContainerBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:LockableContainerBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing NamedScreenHandlerFactoryMixin from fabric-screen-handler-api-v1.mixins.json into net.minecraft.world.MenuProvider +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:NamedScreenHandlerFactoryMixin from mod fabric-screen-handler-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing MobEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.Mob +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:MobEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing ChiseledBookshelfBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.ChiseledBookShelfBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:ChiseledBookshelfBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:ChiseledBookshelfBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::setStackBypass(ILnet/minecraft/world/item/ItemStack;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityTypeMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntityType +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityTypeAccessor from fabric-api-lookup-api-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntityType +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-api-lookup-api-v1.mixins.json:BlockEntityTypeAccessor from mod fabric-api-lookup-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeMixin from mod fabric-object-builder-api-v1->@Inject::mutableBlocks(Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;Lcom/mojang/datafixers/types/Type;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeMixin from mod fabric-object-builder-api-v1->@Inject::mutableBlocks(Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;Lcom/mojang/datafixers/types/Type;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeMixin from mod fabric-object-builder-api-v1->@Inject::mutableBlocks(Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;Lcom/mojang/datafixers/types/Type;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing accessor.ScreenHandlerAccessor from trinkets.mixins.json into net.minecraft.world.inventory.AbstractContainerMenu +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:accessor.ScreenHandlerAccessor from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing ScreenHandlerMixin from sgui.mixins.json into net.minecraft.world.inventory.AbstractContainerMenu +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ScreenHandlerMixin from mod sgui->@Inject::sgui$blockIfVirtual(Lnet/minecraft/world/inventory/Slot;Lnet/minecraft/world/item/ItemStack;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractFurnaceBlockEntityMixin from fabric-content-registries-v0.mixins.json into net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractFurnaceBlockEntityMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractFurnaceBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-content-registries-v0->@Inject::fuelTimeMapHook(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-content-registries-v0->@Inject::fuelTimeMapHook(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-item-api-v1->@Inject::getStackRemainder(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;ZZLnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;ZZLnet/minecraft/world/item/crafting/RecipeHolder;I)V doesn't use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::setStackSuppressUpdate(ILnet/minecraft/world/item/ItemStack;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing SignBlockEntityAccessor from sgui.mixins.json into net.minecraft.world.level.block.entity.SignBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.sign.FormatSignMixin from solstice.mixins.json into net.minecraft.world.level.block.entity.SignBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.sign.FormatSignMixin from mod solstice->@Inject::solstice$formatSignText(Lnet/minecraft/world/entity/player/Player;Ljava/util/List;Lnet/minecraft/world/level/block/entity/SignText;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing JukeboxBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.JukeboxBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:JukeboxBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:JukeboxBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::setStackBypass(Lnet/minecraft/world/item/ItemStack;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BrewingStandBlockEntityMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.level.block.entity.BrewingStandBlockEntity +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:BrewingStandBlockEntityMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:BrewingStandBlockEntityMixin from mod fabric-item-api-v1->@Inject::captureItemStack(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/NonNullList;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraft/world/item/ItemStack;)V doesn't use it's CallbackInfo +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemStackMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.item.ItemStack +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemStackMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$hookDamage$0(Lorg/apache/commons/lang3/mutable/MutableBoolean;Ljava/util/function/Consumer;)V to md50bf59$fabric-item-api-v1$lambda$hookDamage$0$0 in fabric-item-api-v1.mixins.json:ItemStackMixin from mod fabric-item-api-v1 +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing AnvilScreenHandlerMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.inventory.AnvilMenu +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:AnvilScreenHandlerMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing HopperBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.HopperBlockEntity +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$hookExtract$1(Lnet/fabricmc/fabric/api/transfer/v1/item/ItemVariant;)Z to md50bf59$fabric-transfer-api-v1$lambda$hookExtract$1$0 in fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1 +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$hookInsert$0(Lnet/fabricmc/fabric/api/transfer/v1/item/ItemVariant;)Z to md50bf59$fabric-transfer-api-v1$lambda$hookInsert$0$1 in fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1 +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::hookInsert(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/HopperBlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::hookExtract(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/level/block/entity/Hopper;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing BannerBlockEntityMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.block.entity.BannerBlockEntity +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BannerBlockEntityMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing TadpoleEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.animal.frog.Tadpole +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:TadpoleEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing common.BucketableMixin from mixins.cardinal_components_entity.json into net.minecraft.world.entity.animal.Bucketable +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.BucketableMixin from mod cardinal-components-entity: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.BucketableMixin from mod cardinal-components-entity->@Inject::writeComponentsToStack(Lnet/minecraft/world/entity/Mob;Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:19] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.BucketableMixin from mod cardinal-components-entity->@Inject::readComponentsFromStack(Lnet/minecraft/world/entity/Mob;Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemAccessor from fabric-item-api-v1.mixins.json into net.minecraft.world.item.Item +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemAccessor from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.item.Item +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.Item +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:ItemMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemMixin from mod fabric-item-api-v1->@Inject::onConstruct(Lnet/minecraft/world/item/Item$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemMixin from mod fabric-item-api-v1->@Inject::onConstruct(Lnet/minecraft/world/item/Item$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemMixin from mod fabric-item-api-v1->@Inject::onConstruct(Lnet/minecraft/world/item/Item$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ShovelItemAccessor from fabric-content-registries-v0.mixins.json into net.minecraft.world.item.ShovelItem +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:ShovelItemAccessor from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getPathStates()Ljava/util/Map; to getPathStates$fabric-content-registries-v0_$md$50bf59$0 in fabric-content-registries-v0.mixins.json:ShovelItemAccessor from mod fabric-content-registries-v0 +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing AxeItemAccessor from fabric-content-registries-v0.mixins.json into net.minecraft.world.item.AxeItem +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:AxeItemAccessor from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getStrippedBlocks()Ljava/util/Map; to getStrippedBlocks$fabric-content-registries-v0_$md$50bf59$0 in fabric-content-registries-v0.mixins.json:AxeItemAccessor from mod fabric-content-registries-v0 +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method setStrippedBlocks(Ljava/util/Map;)V to setStrippedBlocks$fabric-content-registries-v0_$md$50bf59$1 in fabric-content-registries-v0.mixins.json:AxeItemAccessor from mod fabric-content-registries-v0 +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing HoeItemAccessor from fabric-content-registries-v0.mixins.json into net.minecraft.world.item.HoeItem +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:HoeItemAccessor from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getTillingActions()Ljava/util/Map; to getTillingActions$fabric-content-registries-v0_$md$50bf59$0 in fabric-content-registries-v0.mixins.json:HoeItemAccessor from mod fabric-content-registries-v0 +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing BucketItemAccessor from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.BucketItem +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:BucketItemAccessor from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing BucketItemMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.BucketItem +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:BucketItemMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing HoneycombItemMixin from fabric-content-registries-v0.mixins.json into net.minecraft.world.item.HoneycombItem +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:HoneycombItemMixin from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:HoneycombItemMixin from mod fabric-content-registries-v0->@Inject::createUnwaxedToWaxedMap(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemSettingsMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.item.Item$Properties +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemSettingsMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing EnchantmentDefinitionMixin from trinkets.mixins.json into net.minecraft.world.item.enchantment.Enchantment$EnchantmentDefinition +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:EnchantmentDefinitionMixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$extendCodec$2(Lcom/mojang/serialization/MapCodec;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; to md50bf59$trinkets$lambda$extendCodec$2$0 in trinkets.mixins.json:EnchantmentDefinitionMixin from mod trinkets +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$extendCodec$1(Lnet/minecraft/world/item/enchantment/Enchantment$EnchantmentDefinition;Ljava/util/Set;)Lnet/minecraft/world/item/enchantment/Enchantment$EnchantmentDefinition; to md50bf59$trinkets$lambda$extendCodec$1$1 in trinkets.mixins.json:EnchantmentDefinitionMixin from mod trinkets +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$extendCodec$0(Lnet/minecraft/world/item/enchantment/Enchantment$EnchantmentDefinition;)Ljava/util/Set; to md50bf59$trinkets$lambda$extendCodec$0$2 in trinkets.mixins.json:EnchantmentDefinitionMixin from mod trinkets +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing TagKeyMixin from fabric-convention-tags-api-v2.mixins.json into net.minecraft.tags.TagKey +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-convention-tags-api-v2.mixins.json:TagKeyMixin from mod fabric-convention-tags-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing BundleContentsComponentAccessor from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.component.BundleContents +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:BundleContentsComponentAccessor from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Invoker method getOccupancy(Lnet/minecraft/world/item/ItemStack;)Lorg/apache/commons/lang3/math/Fraction; to getOccupancy$fabric-transfer-api-v1_$md$50bf59$0 in fabric-transfer-api-v1.mixins.json:BundleContentsComponentAccessor from mod fabric-transfer-api-v1 +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing AttachmentTargetsMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.chunk.ChunkAccess +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ChunkMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.chunk.ChunkAccess +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ChunkMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldChunkMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.chunk.LevelChunk +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_syncChange$0(Lnet/fabricmc/fabric/api/attachment/v1/AttachmentType;Lnet/fabricmc/fabric/impl/attachment/sync/s2c/AttachmentSyncPayloadS2C;Lnet/minecraft/server/level/ServerPlayer;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_syncChange$0$0 in fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1 +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing server.WorldChunkMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.world.level.chunk.LevelChunk +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1->@Inject::transferProtoChunkAttachement(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ProtoChunk;Lnet/minecraft/world/level/chunk/LevelChunk$PostLoadProcessor;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1->@Inject::transferProtoChunkAttachement(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ProtoChunk;Lnet/minecraft/world/level/chunk/LevelChunk$PostLoadProcessor;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1->@Inject::transferProtoChunkAttachement(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ProtoChunk;Lnet/minecraft/world/level/chunk/LevelChunk$PostLoadProcessor;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onLoadBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onLoadBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onLoadBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraft/world/level/block/entity/BlockEntity;)V doesn't use it's CallbackInfo +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraft/world/level/block/entity/BlockEntity;)V has 0 override(s) in child classes +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraft/world/level/block/entity/BlockEntity;)V won't be passed a CallbackInfo as a result +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ContainerComponentAccessor from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.component.ItemContainerContents +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:ContainerComponentAccessor from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing EntityTypeBuilderMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.entity.EntityType$Builder +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:EntityTypeBuilderMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:EntityTypeBuilderMixin from mod fabric-object-builder-api-v1->@Inject::applyChildBuilders(Ljava/lang/String;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing TaggedChoiceMixin from fabric-dimensions-v1.mixins.json into com.mojang.datafixers.types.templates.TaggedChoice +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:TaggedChoiceMixin from mod fabric-dimensions-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:TaggedChoiceMixin from mod fabric-dimensions-v1->@Inject::onApply(Lcom/mojang/datafixers/util/Pair;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing TaggedChoiceTypeMixin from fabric-dimensions-v1.mixins.json into com.mojang.datafixers.types.templates.TaggedChoice$TaggedChoiceType +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:TaggedChoiceTypeMixin from mod fabric-dimensions-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:TaggedChoiceTypeMixin from mod fabric-dimensions-v1->@Inject::onGetCodec(Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing datafixer.Schema1460Mixin from trinkets.mixins.json into net.minecraft.util.datafix.schemas.V1460 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:datafixer.Schema1460Mixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:datafixer.Schema1460Mixin from mod trinkets->@Inject::captureSchema(Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:datafixer.Schema1460Mixin from mod trinkets->@Inject::captureSchema(Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:datafixer.Schema1460Mixin from mod trinkets->@Inject::captureSchema(Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing Schema2832Mixin from fabric-dimensions-v1.mixins.json into net.minecraft.util.datafix.schemas.V2832 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:Schema2832Mixin from mod fabric-dimensions-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityMixin from fabric-screen-handler-api-v1.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-screen-handler-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityMixin from fabric-events-interaction-v0.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-events-interaction-v0.mixins.json:ServerPlayerEntityMixin from mod fabric-events-interaction-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityAccessor from sgui.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityMixin from sgui.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.back.PreTeleportMixin from solstice.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.spawn.OverrideSpawnPointMixin from solstice.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.styling.CustomDeathMessageMixin from solstice.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.tablist.CustomPlayerListNameMixin from solstice.mixins.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing common.MixinServerPlayerEntity from mixins.cardinal_components_entity.json into net.minecraft.server.level.ServerPlayer +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerPlayerEntity from mod cardinal-components-entity: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::callOnKillForPlayer(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::callOnKillForPlayer(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::callOnKillForPlayer(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/server/level/ServerLevel;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/server/level/ServerLevel;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/server/level/ServerLevel;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onCopyFrom(Lnet/minecraft/server/level/ServerPlayer;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onCopyFrom(Lnet/minecraft/server/level/ServerPlayer;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onCopyFrom(Lnet/minecraft/server/level/ServerPlayer;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onTrySleepDirectionCheck(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/core/Direction;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-screen-handler-api-v1->@Inject::fabric_storeOpenedScreenHandler(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/world/inventory/AbstractContainerMenu;)V doesn't use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-screen-handler-api-v1->@Inject::fabric_storeOpenedScreenHandler(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/world/inventory/AbstractContainerMenu;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-screen-handler-api-v1->@Inject::fabric_storeOpenedScreenHandler(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/world/inventory/AbstractContainerMenu;)V won't be passed a CallbackInfoReturnable as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-events-interaction-v0.mixins.json:ServerPlayerEntityMixin from mod fabric-events-interaction-v0->@Inject::onPlayerInteractEntity(Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$dontForceCloseFor(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$dontForceCloseFor(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$dontForceCloseFor(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$ignoreClosing(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$onDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$onDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$onDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.back.PreTeleportMixin from mod solstice->@Inject::solstice$getPreTeleportLocation(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.back.PreTeleportMixin from mod solstice->@Inject::solstice$getPreTeleportLocation(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.back.PreTeleportMixin from mod solstice->@Inject::solstice$getPreTeleportLocation(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideSpawnPos(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideSpawnDimension(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideRespawnTarget(ZLnet/minecraft/world/level/portal/DimensionTransition$PostDimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideRespawnTarget(ZLnet/minecraft/world/level/portal/DimensionTransition$PostDimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideRespawnTarget(ZLnet/minecraft/world/level/portal/DimensionTransition$PostDimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.tablist.CustomPlayerListNameMixin from mod solstice->@Inject::solstice$customizePlayerListName(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing MooshroomEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.animal.MushroomCow +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:MooshroomEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing PigEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.animal.Pig +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:PigEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing VillagerEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.npc.Villager +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:VillagerEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing VillagerEntityAccessor from fabric-content-registries-v0.mixins.json into net.minecraft.world.entity.npc.Villager +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:VillagerEntityAccessor from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method fabric_setItemFoodValues(Ljava/util/Map;)V to fabric_setItemFoodValues$fabric-content-registries-v0_$md$50bf59$0 in fabric-content-registries-v0.mixins.json:VillagerEntityAccessor from mod fabric-content-registries-v0 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method fabric_setGatherableItems(Ljava/util/Set;)V to fabric_setGatherableItems$fabric-content-registries-v0_$md$50bf59$1 in fabric-content-registries-v0.mixins.json:VillagerEntityAccessor from mod fabric-content-registries-v0 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method fabric_getGatherableItems()Ljava/util/Set; to fabric_getGatherableItems$fabric-content-registries-v0_$md$50bf59$2 in fabric-content-registries-v0.mixins.json:VillagerEntityAccessor from mod fabric-content-registries-v0 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing PlayerScreenHandlerMixin from trinkets.mixins.json into net.minecraft.world.inventory.InventoryMenu +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$quickMove$4(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/player/Player;Ldev/emi/trinkets/api/TrinketComponent;)V to md50bf59$trinkets$lambda$quickMove$4$0 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$trinkets$updateTrinketSlots$3(ZLdev/emi/trinkets/api/TrinketComponent;)V to md50bf59$trinkets$lambda$trinkets$updateTrinketSlots$3$1 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$trinkets$updateTrinketSlots$2(Ldev/emi/trinkets/api/SlotGroup;)Ljava/util/List; to md50bf59$trinkets$lambda$trinkets$updateTrinketSlots$2$2 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$trinkets$updateTrinketSlots$1(Ldev/emi/trinkets/api/SlotGroup;)Ljava/util/List; to md50bf59$trinkets$lambda$trinkets$updateTrinketSlots$1$3 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$trinkets$updateTrinketSlots$0(Ljava/util/Map$Entry;Ljava/util/Map$Entry;)I to md50bf59$trinkets$lambda$trinkets$updateTrinketSlots$0$4 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::init(Lnet/minecraft/world/entity/player/Inventory;ZLnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::init(Lnet/minecraft/world/entity/player/Inventory;ZLnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::init(Lnet/minecraft/world/entity/player/Inventory;ZLnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::onClosed(Lnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::onClosed(Lnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::onClosed(Lnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::quickMove(Lnet/minecraft/world/entity/player/Player;ILorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ingredient.IngredientMixin from fabric-recipe-api-v1.mixins.json into net.minecraft.world.item.crafting.Ingredient +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$injectCodec$3(Lnet/minecraft/world/item/crafting/Ingredient;)Lcom/mojang/datafixers/util/Either; to md50bf59$fabric-recipe-api-v1$lambda$injectCodec$3$0 in fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$injectCodec$2(Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/world/item/crafting/Ingredient; to md50bf59$fabric-recipe-api-v1$lambda$injectCodec$2$1 in fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$injectCodec$1(Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/world/item/crafting/Ingredient; to md50bf59$fabric-recipe-api-v1$lambda$injectCodec$1$2 in fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$injectCodec$0(ZLnet/fabricmc/fabric/api/recipe/v1/ingredient/CustomIngredientSerializer;)Lcom/mojang/serialization/MapCodec; to md50bf59$fabric-recipe-api-v1$lambda$injectCodec$0$3 in fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1 +[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1->@Inject::injectCodec(ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing EntitySelectorOptionsAccessor from fabric-command-api-v2.mixins.json into net.minecraft.commands.arguments.selector.options.EntitySelectorOptions +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-command-api-v2.mixins.json:EntitySelectorOptionsAccessor from mod fabric-command-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming @Invoker method callPutOption(Ljava/lang/String;Lnet/minecraft/commands/arguments/selector/options/EntitySelectorOptions$Modifier;Ljava/util/function/Predicate;Lnet/minecraft/network/chat/Component;)V to callPutOption$fabric-command-api-v2_$md$50bf59$0 in fabric-command-api-v2.mixins.json:EntitySelectorOptionsAccessor from mod fabric-command-api-v2 +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing EntitySelectorReaderMixin from fabric-command-api-v2.mixins.json into net.minecraft.commands.arguments.selector.EntitySelectorParser +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-command-api-v2.mixins.json:EntitySelectorReaderMixin from mod fabric-command-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityTypeBuilderMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntityType$Builder +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeBuilderMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Generating mapped inner class net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity$Anonymous$28373269ae304d9b9b0a862ca0793b7f (originally net/fabricmc/fabric/mixin/transfer/ChiseledBookshelfBlockEntityMixin$1) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing SimpleInventoryMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.SimpleContainer +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:SimpleInventoryMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing RecipeMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.item.crafting.Recipe +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RecipeMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RecipeMixin from mod fabric-item-api-v1->@Inject::captureStack(Lnet/minecraft/world/item/crafting/RecipeInput;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/core/NonNullList;I)V doesn't use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RecipeMixin from mod fabric-item-api-v1->@Inject::captureStack(Lnet/minecraft/world/item/crafting/RecipeInput;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/core/NonNullList;I)V has 0 override(s) in child classes +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RecipeMixin from mod fabric-item-api-v1->@Inject::captureStack(Lnet/minecraft/world/item/crafting/RecipeInput;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/core/NonNullList;I)V won't be passed a CallbackInfoReturnable as a result +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing ingredient.ShapelessRecipeMixin from fabric-recipe-api-v1.mixins.json into net.minecraft.world.item.crafting.ShapelessRecipe +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1->@Inject::cacheRequiresTesting(Ljava/lang/String;Lnet/minecraft/world/item/crafting/CraftingBookCategory;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/core/NonNullList;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1->@Inject::cacheRequiresTesting(Ljava/lang/String;Lnet/minecraft/world/item/crafting/CraftingBookCategory;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/core/NonNullList;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1->@Inject::cacheRequiresTesting(Ljava/lang/String;Lnet/minecraft/world/item/crafting/CraftingBookCategory;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/core/NonNullList;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1->@Inject::customIngredientMatch(Lnet/minecraft/world/item/crafting/CraftingInput;Lnet/minecraft/world/level/Level;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing EnchantRandomlyLootFunctionMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.level.storage.loot.functions.EnchantRandomlyFunction +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:EnchantRandomlyLootFunctionMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing LootTableAccessor from fabric-loot-api-v3.mixins.json into net.minecraft.world.level.storage.loot.LootTable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-loot-api-v3.mixins.json:LootTableAccessor from mod fabric-loot-api-v3: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing LootPoolAccessor from fabric-loot-api-v3.mixins.json into net.minecraft.world.level.storage.loot.LootPool +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-loot-api-v3.mixins.json:LootPoolAccessor from mod fabric-loot-api-v3: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing StructureTemplateManagerMixin from fabric-gametest-api-v1.mixins.json into net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:StructureTemplateManagerMixin from mod fabric-gametest-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:StructureTemplateManagerMixin from mod fabric-gametest-api-v1->@Inject::addFabricTemplateProvider(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lcom/google/common/collect/ImmutableList$Builder;)V doesn't use it's CallbackInfo +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:StructureTemplateManagerMixin from mod fabric-gametest-api-v1->@Inject::addFabricTemplateProvider(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lcom/google/common/collect/ImmutableList$Builder;)V has 0 override(s) in child classes +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:StructureTemplateManagerMixin from mod fabric-gametest-api-v1->@Inject::addFabricTemplateProvider(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lcom/google/common/collect/ImmutableList$Builder;)V won't be passed a CallbackInfo as a result +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing BiomeSourceMixin from fabric-biome-api-v1.mixins.json into net.minecraft.world.level.biome.BiomeSource +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:BiomeSourceMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing MultiNoiseBiomeSourceMixin from fabric-biome-api-v1.mixins.json into net.minecraft.world.level.biome.MultiNoiseBiomeSource +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:MultiNoiseBiomeSourceMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing NetherBiomePresetMixin from fabric-biome-api-v1.mixins.json into net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList$Preset$1 +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:NetherBiomePresetMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:NetherBiomePresetMixin from mod fabric-biome-api-v1->@Inject::apply(Ljava/util/function/Function;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing TheEndBiomeSourceMixin from fabric-biome-api-v1.mixins.json into net.minecraft.world.level.biome.TheEndBiomeSource +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$1(Lnet/minecraft/core/HolderGetter;)Lnet/fabricmc/fabric/impl/biome/TheEndBiomeData$Overrides; to md50bf59$fabric-biome-api-v1$lambda$init$1$0 in fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1 +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$modifyCodec$0(Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; to md50bf59$fabric-biome-api-v1$lambda$modifyCodec$0$1 in fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1 +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::modifyCodec(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::rememberLookup(Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::clearLookup(Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::init(Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::init(Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::init(Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing DebugChunkGeneratorAccessor from fabric-registry-sync-v0.mixins.json into net.minecraft.world.level.levelgen.DebugLevelSource +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:DebugChunkGeneratorAccessor from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method setBLOCK_STATES(Ljava/util/List;)V to setBLOCK_STATES$fabric-registry-sync-v0_$md$50bf59$0 in fabric-registry-sync-v0.mixins.json:DebugChunkGeneratorAccessor from mod fabric-registry-sync-v0 +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method setX_SIDE_LENGTH(I)V to setX_SIDE_LENGTH$fabric-registry-sync-v0_$md$50bf59$1 in fabric-registry-sync-v0.mixins.json:DebugChunkGeneratorAccessor from mod fabric-registry-sync-v0 +[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method setZ_SIDE_LENGTH(I)V to setZ_SIDE_LENGTH$fabric-registry-sync-v0_$md$50bf59$2 in fabric-registry-sync-v0.mixins.json:DebugChunkGeneratorAccessor from mod fabric-registry-sync-v0 +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing DefaultAttributeRegistryAccessor from fabric-object-builder-v1.mixins.json into net.minecraft.world.entity.ai.attributes.DefaultAttributes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DefaultAttributeRegistryAccessor from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getRegistry()Ljava/util/Map; to getRegistry$fabric-object-builder-api-v1_$md$50bf59$0 in fabric-object-builder-v1.mixins.json:DefaultAttributeRegistryAccessor from mod fabric-object-builder-api-v1 +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing DefaultAttributeRegistryMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.entity.ai.attributes.DefaultAttributes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DefaultAttributeRegistryMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DefaultAttributeRegistryMixin from mod fabric-object-builder-api-v1->@Inject::injectAttributes(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Entrypoint) Iterating over entrypoint 'main' +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing LootTableBuilderMixin from fabric-loot-api-v2.mixins.json into net.minecraft.world.level.storage.loot.LootTable$Builder +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-loot-api-v2.mixins.json:LootTableBuilderMixin from mod fabric-loot-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing LootTableBuilderMixin from fabric-loot-api-v3.mixins.json into net.minecraft.world.level.storage.loot.LootTable$Builder +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-loot-api-v3.mixins.json:LootTableBuilderMixin from mod fabric-loot-api-v3: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing events.CommandEventsMixin from solstice.mixins.json into com.mojang.brigadier.CommandDispatcher +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.CommandEventsMixin from mod solstice->@Inject::execute(Lcom/mojang/brigadier/ParseResults;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing MinecraftServerMixin from fabric-message-api-v1.mixins.json into net.minecraft.server.MinecraftServer +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-message-api-v1.mixins.json:MinecraftServerMixin from mod fabric-message-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$onGetChatDecorator$0(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/network/chat/Component;)Lnet/minecraft/network/chat/Component; to md50bf59$fabric-message-api-v1$lambda$onGetChatDecorator$0$0 in fabric-message-api-v1.mixins.json:MinecraftServerMixin from mod fabric-message-api-v1 +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing MinecraftServerMixin from fabric-gametest-api-v1.mixins.json into net.minecraft.server.MinecraftServer +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:MinecraftServerMixin from mod fabric-gametest-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing MinecraftServerMixin from fabric-resource-loader-v0.mixins.json into net.minecraft.server.MinecraftServer +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$0(Lnet/minecraft/server/packs/PackResources;)Ljava/util/stream/Stream; to md50bf59$fabric-resource-loader-v0$lambda$init$0$1 in fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0 +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing MinecraftServerMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.server.MinecraftServer +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$endResourceReload$0(Ljava/lang/Void;Ljava/lang/Throwable;)Ljava/lang/Void; to md50bf59$fabric-lifecycle-events-v1$lambda$endResourceReload$0$2 in fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1 +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing modification.MinecraftServerMixin from fabric-biome-api-v1.mixins.json into net.minecraft.server.MinecraftServer +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:modification.MinecraftServerMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing events.WorldSaveEventMixin from solstice.mixins.json into net.minecraft.server.MinecraftServer +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-message-api-v1.mixins.json:MinecraftServerMixin from mod fabric-message-api-v1->@Inject::onGetChatDecorator(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:MinecraftServerMixin from mod fabric-gametest-api-v1->@Inject::tickWorlds(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:MinecraftServerMixin from mod fabric-gametest-api-v1->@Inject::tickWorlds(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:MinecraftServerMixin from mod fabric-gametest-api-v1->@Inject::tickWorlds(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0->@Inject::init(Ljava/lang/Thread;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/packs/repository/PackRepository;Lnet/minecraft/server/WorldStem;Ljava/net/Proxy;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/server/Services;Lnet/minecraft/server/level/progress/ChunkProgressListenerFactory;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0->@Inject::init(Ljava/lang/Thread;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/packs/repository/PackRepository;Lnet/minecraft/server/WorldStem;Ljava/net/Proxy;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/server/Services;Lnet/minecraft/server/level/progress/ChunkProgressListenerFactory;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0->@Inject::init(Ljava/lang/Thread;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/packs/repository/PackRepository;Lnet/minecraft/server/WorldStem;Ljava/net/Proxy;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/server/Services;Lnet/minecraft/server/level/progress/ChunkProgressListenerFactory;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onStartTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onStartTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onStartTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onEndTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onEndTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onEndTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onUnloadWorldAtShutdown(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Ljava/util/Iterator;Lnet/minecraft/server/level/ServerLevel;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onUnloadWorldAtShutdown(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Ljava/util/Iterator;Lnet/minecraft/server/level/ServerLevel;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onUnloadWorldAtShutdown(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Ljava/util/Iterator;Lnet/minecraft/server/level/ServerLevel;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startResourceReload(Ljava/util/Collection;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startResourceReload(Ljava/util/Collection;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startResourceReload(Ljava/util/Collection;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::endResourceReload(Ljava/util/Collection;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::endSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::endSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::endSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:modification.MinecraftServerMixin from mod fabric-biome-api-v1->@Inject::finalizeWorldGen(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:modification.MinecraftServerMixin from mod fabric-biome-api-v1->@Inject::finalizeWorldGen(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:modification.MinecraftServerMixin from mod fabric-biome-api-v1->@Inject::finalizeWorldGen(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.WorldSaveEventMixin from mod solstice->@Inject::save(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.WorldSaveEventMixin from mod solstice->@Inject::save(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.WorldSaveEventMixin from mod solstice->@Inject::save(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerConfigurationNetworkHandlerMixin from fabric-networking-api-v1.mixins.json into net.minecraft.server.network.ServerConfigurationPacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerConfigurationNetworkHandlerMixin from fabric-resource-loader-v0.mixins.json into net.minecraft.server.network.ServerConfigurationPacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-resource-loader-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::onClientReady(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerCommonNetworkHandlerMixin from fabric-networking-api-v1.mixins.json into net.minecraft.server.network.ServerCommonPacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing accessor.ServerCommonNetworkHandlerAccessor from fabric-networking-api-v1.mixins.json into net.minecraft.server.network.ServerCommonPacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:accessor.ServerCommonNetworkHandlerAccessor from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.core.RealPingMixin from solstice.mixins.json into net.minecraft.server.network.ServerCommonPacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::handleCustomPayloadReceivedAsync(Lnet/minecraft/network/protocol/common/ServerboundCustomPayloadPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::onPlayPong(Lnet/minecraft/network/protocol/common/ServerboundPongPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::onPlayPong(Lnet/minecraft/network/protocol/common/ServerboundPongPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::onPlayPong(Lnet/minecraft/network/protocol/common/ServerboundPongPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing CustomPayloadS2CPacketAccessor from fabric-data-attachment-api-v1.mixins.json into net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:CustomPayloadS2CPacketAccessor from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing CustomPayloadC2SPacketMixin from fabric-networking-api-v1.mixins.json into net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:CustomPayloadC2SPacketMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$wrapCodec$0(Lnet/minecraft/network/FriendlyByteBuf;Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/network/protocol/common/custom/CustomPacketPayload$TypeAndCodec; to md50bf59$fabric-networking-api-v1$lambda$wrapCodec$0$0 in fabric-networking-api-v1.mixins.json:CustomPayloadC2SPacketMixin from mod fabric-networking-api-v1 +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing CustomPayloadPacketCodecMixin from fabric-networking-api-v1.mixins.json into net.minecraft.network.protocol.common.custom.CustomPacketPayload$1 +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:CustomPayloadPacketCodecMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayNetworkHandlerMixin from fabric-networking-api-v1.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayNetworkHandlerMixin from trinkets.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:ServerPlayNetworkHandlerMixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayNetworkHandlerMixin from sgui.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.styling.PlayerDisconnectMixin from solstice.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.tablist.UpdatePlayerListMixin from solstice.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::handleCustomPayloadReceivedAsync(Lnet/minecraft/network/protocol/common/ServerboundCustomPayloadPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$handleGuiClicks(Lnet/minecraft/network/protocol/game/ServerboundContainerClickPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$resyncGui(Lnet/minecraft/network/protocol/game/ServerboundContainerClickPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$resyncGui(Lnet/minecraft/network/protocol/game/ServerboundContainerClickPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$resyncGui(Lnet/minecraft/network/protocol/game/ServerboundContainerClickPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$storeScreenHandler(Lnet/minecraft/network/protocol/game/ServerboundContainerClosePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$executeClosing(Lnet/minecraft/network/protocol/game/ServerboundContainerClosePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$executeClosing(Lnet/minecraft/network/protocol/game/ServerboundContainerClosePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$executeClosing(Lnet/minecraft/network/protocol/game/ServerboundContainerClosePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRenamingWithCustomGui(Lnet/minecraft/network/protocol/game/ServerboundRenameItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRenamingWithCustomGui(Lnet/minecraft/network/protocol/game/ServerboundRenameItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRenamingWithCustomGui(Lnet/minecraft/network/protocol/game/ServerboundRenameItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRecipeRequests(Lnet/minecraft/network/protocol/game/ServerboundPlaceRecipePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRecipeRequests(Lnet/minecraft/network/protocol/game/ServerboundPlaceRecipePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRecipeRequests(Lnet/minecraft/network/protocol/game/ServerboundPlaceRecipePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchSignUpdate(Lnet/minecraft/network/protocol/game/ServerboundSignUpdatePacket;Ljava/util/List;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchMerchantTradeSelect(Lnet/minecraft/network/protocol/game/ServerboundSelectTradePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchUpdateSelectedSlot(Lnet/minecraft/network/protocol/game/ServerboundSetCarriedItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$cancelCreativeAction(Lnet/minecraft/network/protocol/game/ServerboundSetCreativeModeSlotPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$clickHandSwing(Lnet/minecraft/network/protocol/game/ServerboundSwingPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$clickWithItem(Lnet/minecraft/network/protocol/game/ServerboundUseItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$clickOnBlock(Lnet/minecraft/network/protocol/game/ServerboundUseItemOnPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$onPlayerAction(Lnet/minecraft/network/protocol/game/ServerboundPlayerActionPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$clickOnEntity(Lnet/minecraft/network/protocol/game/ServerboundInteractPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$onMessage(Lnet/minecraft/network/protocol/game/ServerboundChatPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$onCommand(Lnet/minecraft/network/protocol/game/ServerboundChatCommandPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.tablist.UpdatePlayerListMixin from mod solstice->@Inject::solstice$updatePlayerList(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.tablist.UpdatePlayerListMixin from mod solstice->@Inject::solstice$updatePlayerList(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.tablist.UpdatePlayerListMixin from mod solstice->@Inject::solstice$updatePlayerList(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing SinglePreparationResourceReloaderMixin from fabric-resource-conditions-api-v1.mixins.json into net.minecraft.server.packs.resources.SimplePreparableReloadListener +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:SinglePreparationResourceReloaderMixin from mod fabric-resource-conditions-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:SinglePreparationResourceReloaderMixin from mod fabric-resource-conditions-api-v1->@Inject::applyResourceConditions(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:SinglePreparationResourceReloaderMixin from mod fabric-resource-conditions-api-v1->@Inject::applyResourceConditions(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:SinglePreparationResourceReloaderMixin from mod fabric-resource-conditions-api-v1->@Inject::applyResourceConditions(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result +[19:08:23] [main/INFO] (me.alexdevs.solstice.Solstice) Initializing Solstice v1.9.0... +[19:08:23] [main/WARN] (me.alexdevs.solstice.Solstice) LuckPerms not available! It is recommended to install LuckPerms to configure permissions and groups. +[19:08:23] [main/INFO] (me.alexdevs.solstice.Solstice) Registering module provider 'me.alexdevs.solstice.modules.ModuleProvider' +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ComponentMixin from mixins.cardinal_components_base.json into org.ladysnake.cca.api.v3.component.Component +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_base.json:ComponentMixin from mod cardinal-components-base: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) +[19:08:23] [main/DEBUG] (FabricLoader/Entrypoint) No subscribers for entrypoint 'server' +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPropertiesHandlerMixin from fabric-resource-loader-v0.mixins.json into net.minecraft.server.dedicated.DedicatedServerProperties +[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:ServerPropertiesHandlerMixin from mod fabric-resource-loader-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:23] [main/ERROR] (net.minecraft.server.dedicated.Settings) Failed to load properties from file: server.properties +java.nio.file.NoSuchFileException: server.properties + at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85) ~[?:?] + at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103) ~[?:?] + at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108) ~[?:?] + at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:234) ~[?:?] + at java.base/java.nio.file.Files.newByteChannel(Files.java:380) ~[?:?] + at java.base/java.nio.file.Files.newByteChannel(Files.java:432) ~[?:?] + at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420) ~[?:?] + at java.base/java.nio.file.Files.newInputStream(Files.java:160) ~[?:?] + at knot/net.minecraft.server.dedicated.Settings.loadFromFile(Settings.java:62) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] + at knot/net.minecraft.server.dedicated.DedicatedServerProperties.fromFile(DedicatedServerProperties.java:141) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] + at knot/net.minecraft.server.dedicated.DedicatedServerSettings.(DedicatedServerSettings.java:12) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] + at knot/net.minecraft.server.Main.main(Main.java:114) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] + at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) [fabric-loader-0.16.14.jar:?] + at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.16.14.jar:?] + at net.fabricmc.loader.impl.launch.knot.KnotServer.main(KnotServer.java:23) [fabric-loader-0.16.14.jar:?] + at net.fabricmc.devlaunchinjector.Main.main(Main.java:86) [dev-launch-injector-0.2.1+build.8.jar:?] +[19:08:24] [main/DEBUG] (FabricLoader/Mixin) Mixing ResourcePackProfileMixin from fabric-resource-conditions-api-v1.mixins.json into net.minecraft.server.packs.repository.Pack +[19:08:24] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:ResourcePackProfileMixin from mod fabric-resource-conditions-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:24] [main/DEBUG] (FabricLoader/Mixin) Mixing ResourcePackProfileMixin from fabric-resource-loader-v0.mixins.json into net.minecraft.server.packs.repository.Pack +[19:08:24] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:ResourcePackProfileMixin from mod fabric-resource-loader-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) +[19:08:24] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$static$0(Ljava/util/Set;)Z to md50bf59$fabric-resource-loader-v0$lambda$static$0$0 in fabric-resource-loader-v0.mixins.json:ResourcePackProfileMixin from mod fabric-resource-loader-v0 +[19:08:24] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:ResourcePackProfileMixin from mod fabric-resource-loader-v0->@Inject::onCreateResourcePack(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable +[19:08:24] [main/WARN] (net.minecraft.server.Eula) Failed to load eula.txt +[19:08:24] [main/INFO] (net.minecraft.server.Main) You need to agree to the EULA in order to run the server. Go to eula.txt for more info. diff --git a/fabric/runs/server/logs/latest.log b/fabric/runs/server/logs/latest.log new file mode 100644 index 00000000..b5abcfcc --- /dev/null +++ b/fabric/runs/server/logs/latest.log @@ -0,0 +1,81 @@ +[19:08:13] [main/INFO] (FabricLoader/GameProvider) Loading Minecraft 1.21.1 with Fabric Loader 0.16.14 +[19:08:13] [main/WARN] (FabricLoader/Resolution) Warnings were found! + - Mod 'Solstice Essentials' (solstice) 1.9.0 recommends any version of luckperms, which is missing! + - You should install any version of luckperms for the optimal experience. +[19:08:13] [main/INFO] (FabricLoader) Loading 48 mods: + - cardinal-components-base 6.1.0 + - cardinal-components-entity 6.1.0 + - fabric-api 0.116.1+1.21.1 + - fabric-api-base 0.4.42+6573ed8c48 + - fabric-api-lookup-api-v1 1.6.71+b559734419 + - fabric-biome-api-v1 13.0.31+d527f9fd19 + - fabric-block-api-v1 1.1.0+0bc3503219 + - fabric-block-view-api-v2 1.0.11+ebb2264e19 + - fabric-command-api-v1 1.2.49+f71b366f19 + - fabric-command-api-v2 2.2.28+6ced4dd919 + - fabric-commands-v0 0.2.66+df3654b319 + - fabric-content-registries-v0 8.0.19+b559734419 + - fabric-convention-tags-v1 2.1.5+7f945d5b19 + - fabric-convention-tags-v2 2.11.1+a406e79519 + - fabric-crash-report-info-v1 0.2.29+0af3f5a719 + - fabric-data-attachment-api-v1 1.4.5+6116a37819 + - fabric-data-generation-api-v1 20.2.29+16c4ae2519 + - fabric-dimensions-v1 4.0.0+6fc22b9919 + - fabric-entity-events-v1 1.8.0+2b27e0a419 + - fabric-events-interaction-v0 0.7.13+ba9dae0619 + - fabric-game-rule-api-v1 1.0.53+6ced4dd919 + - fabric-gametest-api-v1 2.0.5+6fc22b9919 + - fabric-item-api-v1 11.1.1+d5debaed19 + - fabric-item-group-api-v1 4.1.7+def88e3a19 + - fabric-lifecycle-events-v1 2.6.0+0865547519 + - fabric-loot-api-v2 3.0.15+3f89f5a519 + - fabric-loot-api-v3 1.0.3+3f89f5a519 + - fabric-message-api-v1 6.0.14+8aaf3aca19 + - fabric-networking-api-v1 4.3.0+c7469b2119 + - fabric-object-builder-api-v1 15.2.1+40875a9319 + - fabric-particles-v1 4.0.2+6573ed8c19 + - fabric-recipe-api-v1 5.0.14+248df81c19 + - fabric-registry-sync-v0 5.2.0+34f5d91419 + - fabric-rendering-data-attachment-v1 0.3.49+73761d2e19 + - fabric-rendering-fluids-v1 3.1.6+1daea21519 + - fabric-resource-conditions-api-v1 4.3.0+8dc279b119 + - fabric-resource-loader-v0 1.3.1+5b5275af19 + - fabric-screen-handler-api-v1 1.3.88+b559734419 + - fabric-transfer-api-v1 5.4.3+c24bd99419 + - fabric-transitive-access-wideners-v1 6.2.0+45b9699719 + - fabricloader 0.16.14 + - java 21 + - minecraft 1.21.1 + - mixinextras 0.4.0 + - placeholder-api 2.4.2+1.21 + - sgui 1.9.1+1.21.1 + - solstice 1.9.0 + - trinkets 3.10.0 +[19:08:14] [main/INFO] (FabricLoader/Mixin) SpongePowered MIXIN Subsystem Version=0.8.7 Source=file:/F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.15.0+mixin.0.8.7/2ce1c5d57a061f3e259ec30b8b0cb2dc889c5156/sponge-mixin-0.15.0+mixin.0.8.7.jar Service=Knot/Fabric Env=SERVER +[19:08:14] [main/INFO] (FabricLoader/Mixin) Loaded Fabric development mappings for mixin remapper! +[19:08:14] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_17 +[19:08:14] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_21 +[19:08:15] [main/INFO] (FabricLoader/MixinExtras|Service) Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.0). +[19:08:23] [main/INFO] (Solstice) Initializing Solstice v1.9.0... +[19:08:23] [main/WARN] (Solstice) LuckPerms not available! It is recommended to install LuckPerms to configure permissions and groups. +[19:08:23] [main/INFO] (Solstice) Registering module provider 'me.alexdevs.solstice.modules.ModuleProvider' +[19:08:23] [main/ERROR] (Minecraft) Failed to load properties from file: server.properties +java.nio.file.NoSuchFileException: server.properties + at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85) ~[?:?] + at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103) ~[?:?] + at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108) ~[?:?] + at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:234) ~[?:?] + at java.base/java.nio.file.Files.newByteChannel(Files.java:380) ~[?:?] + at java.base/java.nio.file.Files.newByteChannel(Files.java:432) ~[?:?] + at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420) ~[?:?] + at java.base/java.nio.file.Files.newInputStream(Files.java:160) ~[?:?] + at knot/net.minecraft.server.dedicated.Settings.loadFromFile(Settings.java:62) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] + at knot/net.minecraft.server.dedicated.DedicatedServerProperties.fromFile(DedicatedServerProperties.java:141) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] + at knot/net.minecraft.server.dedicated.DedicatedServerSettings.(DedicatedServerSettings.java:12) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] + at knot/net.minecraft.server.Main.main(Main.java:114) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] + at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) [fabric-loader-0.16.14.jar:?] + at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.16.14.jar:?] + at net.fabricmc.loader.impl.launch.knot.KnotServer.main(KnotServer.java:23) [fabric-loader-0.16.14.jar:?] + at net.fabricmc.devlaunchinjector.Main.main(Main.java:86) [dev-launch-injector-0.2.1+build.8.jar:?] +[19:08:24] [main/WARN] (Minecraft) Failed to load eula.txt +[19:08:24] [main/INFO] (Minecraft) You need to agree to the EULA in order to run the server. Go to eula.txt for more info. diff --git a/fabric/runs/server/server.properties b/fabric/runs/server/server.properties new file mode 100644 index 00000000..4e61c2f7 --- /dev/null +++ b/fabric/runs/server/server.properties @@ -0,0 +1,63 @@ +#Minecraft server properties +#Tue Jun 10 19:08:24 PDT 2025 +accepts-transfers=false +allow-flight=false +allow-nether=true +broadcast-console-to-ops=true +broadcast-rcon-to-ops=true +bug-report-link= +difficulty=easy +enable-command-block=false +enable-jmx-monitoring=false +enable-query=false +enable-rcon=false +enable-status=true +enforce-secure-profile=true +enforce-whitelist=false +entity-broadcast-range-percentage=100 +force-gamemode=false +function-permission-level=2 +gamemode=survival +generate-structures=true +generator-settings={} +hardcore=false +hide-online-players=false +initial-disabled-packs= +initial-enabled-packs=vanilla,fabric,fabric-convention-tags-v2,fabric-gametest-api-v1,trinkets +level-name=world +level-seed= +level-type=minecraft\:normal +log-ips=true +max-chained-neighbor-updates=1000000 +max-players=20 +max-tick-time=60000 +max-world-size=29999984 +motd=A Minecraft Server +network-compression-threshold=256 +online-mode=true +op-permission-level=4 +player-idle-timeout=0 +prevent-proxy-connections=false +pvp=true +query.port=25565 +rate-limit=0 +rcon.password= +rcon.port=25575 +region-file-compression=deflate +require-resource-pack=false +resource-pack= +resource-pack-id= +resource-pack-prompt= +resource-pack-sha1= +server-ip= +server-port=25565 +simulation-distance=10 +spawn-animals=true +spawn-monsters=true +spawn-npcs=true +spawn-protection=16 +sync-chunk-writes=true +text-filtering-config= +use-native-transport=true +view-distance=10 +white-list=false diff --git a/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricPlatform.java b/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricPlatform.java new file mode 100644 index 00000000..c1843fdc --- /dev/null +++ b/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricPlatform.java @@ -0,0 +1,84 @@ +package me.alexdevs.solstice.fabric; + +import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.*; +import me.alexdevs.solstice.api.platform.ModInfo; +import me.alexdevs.solstice.api.platform.PlatformHelper; +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import net.fabricmc.fabric.api.entity.event.v1.EntitySleepEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.event.player.*; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; +import net.fabricmc.loader.api.FabricLoader; + +import java.nio.file.Path; + +public class FabricPlatform extends PlatformHelper { + public void init() { + CommandRegistrationCallback.EVENT.register(ProxyCommandRegistrationCallback.EVENT.invoker()::onRegister); + ServerLifecycleEvents.SERVER_STARTING.register(ProxyServerLifecycleEvents.SERVER_STARTING.invoker()::onServerStarting); + ServerLifecycleEvents.SERVER_STARTED.register(ProxyServerLifecycleEvents.SERVER_STARTED.invoker()::onServerStarted); + ServerLifecycleEvents.SERVER_STOPPING.register(ProxyServerLifecycleEvents.SERVER_STOPPING.invoker()::onServerStopping); + ServerLifecycleEvents.SERVER_STOPPED.register(ProxyServerLifecycleEvents.SERVER_STOPPED.invoker()::onServerStopped); + ServerTickEvents.START_SERVER_TICK.register(ProxyServerTickEvents.START_SERVER_TICK.invoker()::onStartTick); + ServerTickEvents.END_SERVER_TICK.register(ProxyServerTickEvents.END_SERVER_TICK.invoker()::onEndTick); + UseItemCallback.EVENT.register(ProxyUseItemCallback.EVENT.invoker()::interact); + UseBlockCallback.EVENT.register(ProxyUseBlockCallback.EVENT.invoker()::interact); + UseEntityCallback.EVENT.register(ProxyUseEntityCallback.EVENT.invoker()::interact); + PlayerBlockBreakEvents.BEFORE.register(ProxyPlayerBlockBreakEvents.BEFORE.invoker()::beforeBlockBreak); + AttackBlockCallback.EVENT.register(ProxyAttackBlockCallback.EVENT.invoker()::interact); + AttackEntityCallback.EVENT.register(ProxyAttackEntityCallback.EVENT.invoker()::interact); + + ServerPlayConnectionEvents.JOIN.register((handler, _sender, server) -> ProxyServerPlayConnectionEvents.JOIN.invoker() + .onJoin(handler.getPlayer(), server)); + + ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> ProxyServerPlayConnectionEvents.DISCONNECT.invoker() + .onDisconnect(handler.getPlayer(), server)); + + EntitySleepEvents.ALLOW_SLEEP_TIME.register(ProxyEntitySleepEvents.ALLOW_SLEEP_TIME.invoker()::allowSleepTime); + } + + @Override + public Path getGameDir() { + return FabricLoader.getInstance().getGameDir(); + } + + @Override + public Path getConfigDir() { + return FabricLoader.getInstance().getConfigDir(); + } + + @Override + public boolean isModLoaded(String id) { + return FabricLoader.getInstance().isModLoaded(id); + } + + @Override + public boolean isNativeForge() { + return false; + } + + @Override + public Object getModContainer() { + return FabricLoader.getInstance().getModContainer(Solstice.MOD_ID).orElseThrow(); + } + + @Override + public String getModVersion() { + return FabricLoader.getInstance() + .getModContainer(Solstice.MOD_ID) + .orElseThrow() + .getMetadata() + .getVersion() + .toString(); + } + + @Override + public ModInfo getModInfo(String id) { + return FabricLoader.getInstance() + .getModContainer(id) + .map(it -> new ModInfo(it.getMetadata().getName(), it.getMetadata().getVersion().toString())) + .orElse(null); + } +} diff --git a/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricTrinketsApi.java b/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricTrinketsApi.java new file mode 100644 index 00000000..5e30e829 --- /dev/null +++ b/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricTrinketsApi.java @@ -0,0 +1,26 @@ +package me.alexdevs.solstice.fabric; + +import dev.emi.trinkets.api.TrinketsApi; +import me.alexdevs.solstice.integrations.TrinketsApiProxy; +import net.minecraft.world.Container; +import net.minecraft.world.entity.LivingEntity; + +import java.util.Map; +import java.util.Optional; + +public class FabricTrinketsApi extends TrinketsApiProxy { + // Basically, this does getTrinketComponent(target).getInventory().mapValues((map) -> map.mapValues(inv -> inv.values())) + @SuppressWarnings("unchecked") + @Override + public Optional>> getTrinketComponentInventory(LivingEntity target) { + return TrinketsApi.getTrinketComponent(target) + .map(comp -> Map.ofEntries(comp.getInventory().entrySet().stream().map(entry -> Map.entry( + entry.getKey(), + Map.ofEntries(entry.getValue() + .entrySet() + .stream() + .map(it -> Map.entry(it.getKey(), (Container) it.getValue())) + .toArray(Map.Entry[]::new)) + )).toArray(Map.Entry[]::new))); + } +} diff --git a/fabric/src/main/java/me/alexdevs/solstice/fabric/SolsticeFabric.java b/fabric/src/main/java/me/alexdevs/solstice/fabric/SolsticeFabric.java new file mode 100644 index 00000000..cf5d8206 --- /dev/null +++ b/fabric/src/main/java/me/alexdevs/solstice/fabric/SolsticeFabric.java @@ -0,0 +1,16 @@ +package me.alexdevs.solstice.fabric; + +import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.platform.PlatformHelper; +import me.alexdevs.solstice.integrations.TrinketsApiProxy; +import net.fabricmc.api.ModInitializer; + +public class SolsticeFabric implements ModInitializer { + @Override + public void onInitialize() { + PlatformHelper.set(new FabricPlatform()); + TrinketsApiProxy.set(new FabricTrinketsApi()); + + new Solstice().init(); + } +} diff --git a/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json similarity index 68% rename from src/main/resources/fabric.mod.json rename to fabric/src/main/resources/fabric.mod.json index eb6dcbec..b73f3d46 100644 --- a/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -1,9 +1,9 @@ { "schemaVersion": 1, - "id": "solstice", - "version": "${version}", - "name": "Solstice Essentials", - "description": "Server commands, custom chat formats and more", + "id": "${mod_id}", + "version": "${mod_version}", + "name": "${mod_name}", + "description": "${mod_description}", "authors": [ { "name": "AlexDevs", @@ -19,14 +19,11 @@ "homepage": "https://solstice.alexdevs.me", "email": "solstice@alexdevs.me" }, - "license": "MIT", + "license": "${mod_license}", "environment": "*", "entrypoints": { "main": [ - "me.alexdevs.solstice.Solstice" - ], - "solstice": [ - "me.alexdevs.solstice.modules.ModuleProvider" + "me.alexdevs.solstice.fabric.SolsticeFabric" ] }, "mixins": [ @@ -41,5 +38,5 @@ "recommends": { "luckperms": "*" }, - "accessWidener": "solstice.accesswidener" -} \ No newline at end of file + "accessWidener": "${mod_id}.accesswidener" +} diff --git a/gradle.properties b/gradle.properties index 3cfae2ee..31765261 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,26 +1,48 @@ # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx1G + +org.gradle.jvmargs=-Xmx4G +org.gradle.daemon=true org.gradle.parallel=true +org.gradle.caching=true +#org.gradle.configuration-cache=true + +## Environment + +java_version=21 +neoform_version=1.21.1-20240808.144430 -# Fabric Properties -# check these on https://fabricmc.net/develop minecraft_version=1.21.1 -yarn_mappings=1.21.1+build.3 -loader_version=0.16.9 +minecraft_version_range=[1.21.1] + +parchment_minecraft=1.21.1 +parchment_version=2024.11.17 + +## NeoForge + +neo_version=21.1.169 +neo_version_range=[21.1.100,) +neo_loader_version_range=[4,) + +## Fabric -parchment_mappings=2024.11.17 +fabric_version=0.116.1+1.21.1 +fabric_loader_version=0.16.0 -# Mod Properties -mod_version=1.8.1 -maven_group=me.alexdevs -archives_base_name=solstice +## Mod Properties -# Dependencies -fabric_version=0.110.0+1.21.1 +mod_id=solstice +mod_name=Solstice Essentials +mod_license=MIT +mod_version=1.9.0 +mod_authors=AlexDevs +mod_credits= +mod_group_id=me.alexdevs +mod_description=Server commands, custom chat formats, and more! -configurate_version=4.1.2 -permissions_api_version=0.2-SNAPSHOT -placeholderapi_version=2.4.2+1.21 -sgui_version=1.6.1+1.21.1 +## Dependencies -trinkets_version=3.10.0 \ No newline at end of file +configurate_version=4.2.0 +placeholderapi_nf_version=2.4.2+1.21.1-nf +placeholderapi_fabric_version=2.4.2+1.21 +sgui_version=1.9.1+1.21.1 +trinkets_version=3.10.0 diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts new file mode 100644 index 00000000..3945d662 --- /dev/null +++ b/neoforge/build.gradle.kts @@ -0,0 +1,77 @@ +plugins { + id("multiloader-loader") + id("net.neoforged.moddev") +} + +val localRuntime: Configuration by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false +} + +neoForge { + version = "neo_version"() + + val at = project(":common").file("src/main/resources/META-INF/accesstransformer.cfg") + + if (at.exists()) { + accessTransformers.from(at.absolutePath) + } + + parchment { + minecraftVersion = "parchment_minecraft"() + mappingsVersion = "parchment_version"() + } + + runs { + configureEach { + val capitalized = name.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() } + + systemProperty("neoforge.enabledGameTestNamespaces", "mod_id"()) + ideName = "NeoForge $capitalized (${project.path})" + } + + maybeCreate("client").apply { + client() + devLogin = true + } + + maybeCreate("data").apply { + data() + } + + maybeCreate("server").apply { + server() + programArgument("nogui") + } + } + + mods { + maybeCreate("mod_id"()).apply { + sourceSet(sourceSets.main.get()) + } + } +} + +dependencies { + jarJar(implementation("org.spongepowered:configurate-core:${"configurate_version"()}")!!) + jarJar(implementation("org.spongepowered:configurate-hocon:${"configurate_version"()}")!!) + jarJar(implementation("org.spongepowered:configurate-gson:${"configurate_version"()}")!!) + jarJar(implementation("com.typesafe:config:1.4.3")!!) + jarJar(implementation("io.leangen.geantyref:geantyref:1.3.16")!!) + jarJar(implementation("eu.pb4:placeholderapi:${"placeholderapi_nf_version"()}")!!) + jarJar(implementation("eu.pb4:sgui-neoforge:${"sgui_version"()}")!!) + + "additionalRuntimeClasspath"("org.spongepowered:configurate-core:${"configurate_version"()}") + "additionalRuntimeClasspath"("org.spongepowered:configurate-hocon:${"configurate_version"()}") + "additionalRuntimeClasspath"("org.spongepowered:configurate-gson:${"configurate_version"()}") + "additionalRuntimeClasspath"("com.typesafe:config:1.4.3") + "additionalRuntimeClasspath"("io.leangen.geantyref:geantyref:1.3.16") + + compileOnly("net.luckperms:api:5.4") + localRuntime("net.luckperms:api:5.4") +} + +sourceSets.main.get().resources { srcDir("src/generated/resources") } +configurations.runtimeClasspath.get().extendsFrom(localRuntime) + +operator fun String.invoke(): String = rootProject.ext[this] as? String ?: error("No property \"$this\"") diff --git a/neoforge/src/main/java/me/alexdevs/solstice/neoforge/EmptyTrinketsApi.java b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/EmptyTrinketsApi.java new file mode 100644 index 00000000..4fc1ad56 --- /dev/null +++ b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/EmptyTrinketsApi.java @@ -0,0 +1,15 @@ +package me.alexdevs.solstice.neoforge; + +import me.alexdevs.solstice.integrations.TrinketsApiProxy; +import net.minecraft.world.Container; +import net.minecraft.world.entity.LivingEntity; + +import java.util.Map; +import java.util.Optional; + +public class EmptyTrinketsApi extends TrinketsApiProxy { + @Override + public Optional>> getTrinketComponentInventory(LivingEntity target) { + throw new UnsupportedOperationException("Cannot use Trinkets on Forge!"); + } +} diff --git a/neoforge/src/main/java/me/alexdevs/solstice/neoforge/NeoForgePlatform.java b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/NeoForgePlatform.java new file mode 100644 index 00000000..2ff17103 --- /dev/null +++ b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/NeoForgePlatform.java @@ -0,0 +1,240 @@ +package me.alexdevs.solstice.neoforge; + +import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.events.proxy.*; +import me.alexdevs.solstice.api.platform.ModInfo; +import me.alexdevs.solstice.api.platform.PlatformHelper; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.EntityHitResult; +import net.neoforged.fml.ModList; +import net.neoforged.fml.loading.FMLPaths; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.common.util.TriState; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.entity.player.AttackEntityEvent; +import net.neoforged.neoforge.event.entity.player.CanContinueSleepingEvent; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; +import net.neoforged.neoforge.event.level.BlockEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.neoforge.event.server.ServerStartingEvent; +import net.neoforged.neoforge.event.server.ServerStoppedEvent; +import net.neoforged.neoforge.event.server.ServerStoppingEvent; +import net.neoforged.neoforge.event.tick.ServerTickEvent; + +import java.nio.file.Path; + +public class NeoForgePlatform extends PlatformHelper { + public void init() { + NeoForge.EVENT_BUS.addListener( + RegisterCommandsEvent.class, + (ev) -> ProxyCommandRegistrationCallback.EVENT.invoker() + .onRegister(ev.getDispatcher(), ev.getBuildContext(), ev.getCommandSelection()) + ); + + NeoForge.EVENT_BUS.addListener( + ServerStartingEvent.class, + (ev) -> ProxyServerLifecycleEvents.SERVER_STARTING.invoker().onServerStarting(ev.getServer()) + ); + + NeoForge.EVENT_BUS.addListener( + ServerStartedEvent.class, + (ev) -> ProxyServerLifecycleEvents.SERVER_STARTED.invoker().onServerStarted(ev.getServer()) + ); + + NeoForge.EVENT_BUS.addListener( + ServerStoppingEvent.class, + (ev) -> ProxyServerLifecycleEvents.SERVER_STOPPING.invoker().onServerStopping(ev.getServer()) + ); + + NeoForge.EVENT_BUS.addListener( + ServerStoppedEvent.class, + (ev) -> ProxyServerLifecycleEvents.SERVER_STOPPED.invoker().onServerStopped(ev.getServer()) + ); + + NeoForge.EVENT_BUS.addListener( + ServerTickEvent.Pre.class, + (ev) -> ProxyServerTickEvents.START_SERVER_TICK.invoker().onStartTick(ev.getServer()) + ); + + NeoForge.EVENT_BUS.addListener( + ServerTickEvent.Post.class, + (ev) -> ProxyServerTickEvents.END_SERVER_TICK.invoker().onEndTick(ev.getServer()) + ); + + NeoForge.EVENT_BUS.addListener( + PlayerInteractEvent.RightClickItem.class, (ev) -> { + var result = ProxyUseItemCallback.EVENT.invoker() + .interact(ev.getEntity(), ev.getLevel(), ev.getHand()) + .getResult(); + + if (result != InteractionResult.PASS) { + ev.setCanceled(true); + ev.setCancellationResult(result); + } + } + ); + + NeoForge.EVENT_BUS.addListener( + PlayerInteractEvent.RightClickBlock.class, (ev) -> { + var result = ProxyUseBlockCallback.EVENT.invoker() + .interact(ev.getEntity(), ev.getLevel(), ev.getHand(), ev.getHitVec()); + + if (result != InteractionResult.PASS) { + ev.setCanceled(true); + ev.setCancellationResult(result); + } + } + ); + + NeoForge.EVENT_BUS.addListener( + PlayerInteractEvent.EntityInteract.class, (ev) -> { + var result = ProxyUseEntityCallback.EVENT.invoker() + .interact(ev.getEntity(), ev.getLevel(), ev.getHand(), ev.getTarget(), null); + + if (result != InteractionResult.PASS) { + ev.setCanceled(true); + ev.setCancellationResult(result); + } + } + ); + + NeoForge.EVENT_BUS.addListener( + PlayerInteractEvent.EntityInteractSpecific.class, (ev) -> { + var result = ProxyUseEntityCallback.EVENT.invoker().interact( + ev.getEntity(), + ev.getLevel(), + ev.getHand(), + ev.getTarget(), + new EntityHitResult(ev.getTarget(), ev.getLocalPos().add(ev.getTarget().position())) + ); + + if (result != InteractionResult.PASS) { + ev.setCanceled(true); + ev.setCancellationResult(result); + } + } + ); + + NeoForge.EVENT_BUS.addListener( + BlockEvent.BreakEvent.class, (ev) -> { + var player = ev.getPlayer(); + var level = player.level(); + + var result = ProxyPlayerBlockBreakEvents.BEFORE.invoker().beforeBlockBreak( + level, + player, + ev.getPos(), + level.getBlockState(ev.getPos()), + level.getBlockEntity(ev.getPos()) + ); + + if (!result) { + ev.setCanceled(true); + } + } + ); + + NeoForge.EVENT_BUS.addListener( + PlayerInteractEvent.LeftClickBlock.class, (ev) -> { + if (ev.getAction() == PlayerInteractEvent.LeftClickBlock.Action.START) { + var result = ProxyAttackBlockCallback.EVENT.invoker() + .interact(ev.getEntity(), ev.getLevel(), ev.getHand(), ev.getPos(), ev.getFace()); + + if (result != InteractionResult.PASS) { + ev.setUseBlock(result == InteractionResult.SUCCESS ? TriState.TRUE : TriState.FALSE); + ev.setUseItem(result == InteractionResult.SUCCESS ? TriState.TRUE : TriState.FALSE); + } + } + } + ); + + NeoForge.EVENT_BUS.addListener( + AttackEntityEvent.class, (ev) -> { + var result = ProxyAttackEntityCallback.EVENT.invoker() + .interact( + ev.getEntity(), + ev.getEntity().level(), + InteractionHand.MAIN_HAND, + ev.getTarget(), + null + ); + + if (result != InteractionResult.PASS) { + ev.setCanceled(true); + } + } + ); + + NeoForge.EVENT_BUS.addListener( + PlayerEvent.PlayerLoggedInEvent.class, (ev) -> { + if (ev.getEntity() instanceof ServerPlayer player) { + ProxyServerPlayConnectionEvents.JOIN.invoker().onJoin(player, player.server); + } + } + ); + + NeoForge.EVENT_BUS.addListener( + PlayerEvent.PlayerLoggedOutEvent.class, (ev) -> { + if (ev.getEntity() instanceof ServerPlayer player) { + ProxyServerPlayConnectionEvents.DISCONNECT.invoker().onDisconnect(player, player.server); + } + } + ); + + NeoForge.EVENT_BUS.addListener( + CanContinueSleepingEvent.class, (ev) -> { + ev.getEntity().getSleepingPos().ifPresent(sleepingPos -> { + if (ev.getEntity() instanceof Player player) { + InteractionResult result = ProxyEntitySleepEvents.ALLOW_SLEEP_TIME.invoker() + .allowSleepTime(player, sleepingPos, !player.level().isDay()); + if (result != InteractionResult.PASS) { + ev.setContinueSleeping(result.consumesAction()); + } + } + }); + } + ); + } + + @Override + public Path getGameDir() { + return FMLPaths.GAMEDIR.get(); + } + + @Override + public Path getConfigDir() { + return FMLPaths.CONFIGDIR.get(); + } + + @Override + public boolean isModLoaded(String id) { + return ModList.get().isLoaded(id); + } + + @Override + public boolean isNativeForge() { + return true; + } + + @Override + public Object getModContainer() { + return ModList.get().getModContainerById(Solstice.MOD_ID).orElseThrow(); + } + + @Override + public String getModVersion() { + return ModList.get().getModContainerById(Solstice.MOD_ID).orElseThrow().getModInfo().getVersion().toString(); + } + + @Override + public ModInfo getModInfo(String id) { + return ModList.get() + .getModContainerById(id) + .map(it -> new ModInfo(it.getModInfo().getDisplayName(), it.getModInfo().getVersion().toString())) + .orElse(null); + } +} diff --git a/neoforge/src/main/java/me/alexdevs/solstice/neoforge/SolsticeNeoForge.java b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/SolsticeNeoForge.java new file mode 100644 index 00000000..37bef4db --- /dev/null +++ b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/SolsticeNeoForge.java @@ -0,0 +1,18 @@ +package me.alexdevs.solstice.neoforge; + +import me.alexdevs.solstice.Solstice; +import me.alexdevs.solstice.api.platform.PlatformHelper; +import me.alexdevs.solstice.integrations.TrinketsApiProxy; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.common.Mod; + +@Mod(Solstice.MOD_ID) +public class SolsticeNeoForge { + public SolsticeNeoForge(ModContainer mod, IEventBus bus) { + PlatformHelper.set(new NeoForgePlatform()); + TrinketsApiProxy.set(new EmptyTrinketsApi()); + + new Solstice().init(); + } +} diff --git a/neoforge/src/main/java/me/alexdevs/solstice/neoforge/mixin/ServerPlayerMixin.java b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/mixin/ServerPlayerMixin.java new file mode 100644 index 00000000..90ad9a8f --- /dev/null +++ b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/mixin/ServerPlayerMixin.java @@ -0,0 +1,31 @@ +package me.alexdevs.solstice.neoforge.mixin; + +import me.alexdevs.solstice.api.events.proxy.ProxyEntitySleepEvents; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ServerPlayer.class) +public class ServerPlayerMixin { + @Redirect( + method = "lambda$startSleepInBed$13", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;isDay()Z") + ) + private boolean redirectDaySleepCheck(Level world, BlockPos pos) { + boolean day = world.isDay(); + + InteractionResult result = ProxyEntitySleepEvents.ALLOW_SLEEP_TIME.invoker() + .allowSleepTime((Player) (Object) this, pos, !day); + + if (result != InteractionResult.PASS) { + return !result.consumesAction(); // true from the event = night-like conditions, so we have to invert + } + + return day; + } +} diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 00000000..1d15a251 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,31 @@ +modLoader="javafml" +loaderVersion="${neo_loader_version_range}" +license="${mod_license}" + +[[mods]] +modId="${mod_id}" +version="${mod_version}" +displayName="${mod_name}" +credits="${mod_credits}" +authors="${mod_authors}" +description='''${mod_description}''' + +[[mixins]] +config="${mod_id}.mixins.json" + +[[accessTransformers]] +file="META-INF/accesstransformer.cfg" + +[[dependencies.${mod_id}]] +modId="neoforge" +type="required" +versionRange="${neo_version_range}" +ordering="NONE" +side="BOTH" + +[[dependencies.${mod_id}]] +modId="minecraft" +type="required" +versionRange="${minecraft_version_range}" +ordering="NONE" +side="BOTH" diff --git a/neoforge/src/main/resources/solstice-neoforge.mixins.json b/neoforge/src/main/resources/solstice-neoforge.mixins.json new file mode 100644 index 00000000..437ec59b --- /dev/null +++ b/neoforge/src/main/resources/solstice-neoforge.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "me.alexdevs.solstice.neoforge.mixin", + "compatibilityLevel": "JAVA_21", + "client": [], + "server": [], + "injectors": { + "defaultRequire": 1 + }, + "mixins": [ + "ServerPlayerMixin" + ] +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index 75c4d726..00000000 --- a/settings.gradle +++ /dev/null @@ -1,10 +0,0 @@ -pluginManagement { - repositories { - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } - mavenCentral() - gradlePluginPortal() - } -} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..1d3338c7 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + maven("https://maven.fabricmc.net/") + maven("https://maven.neoforged.net/releases") + maven("https://repo.spongepowered.org/repository/maven-public") + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.9.0" +} + +include("common") +include("fabric") +include("neoforge") diff --git a/src/main/java/me/alexdevs/solstice/Paths.java b/src/main/java/me/alexdevs/solstice/Paths.java deleted file mode 100644 index e766f79f..00000000 --- a/src/main/java/me/alexdevs/solstice/Paths.java +++ /dev/null @@ -1,9 +0,0 @@ -package me.alexdevs.solstice; - -import net.fabricmc.loader.api.FabricLoader; - -import java.nio.file.Path; - -public class Paths { - public static final Path configDirectory = FabricLoader.getInstance().getConfigDir().resolve(Solstice.MOD_ID); -} diff --git a/src/main/java/me/alexdevs/solstice/api/events/SolsticeEvents.java b/src/main/java/me/alexdevs/solstice/api/events/SolsticeEvents.java deleted file mode 100644 index d499963a..00000000 --- a/src/main/java/me/alexdevs/solstice/api/events/SolsticeEvents.java +++ /dev/null @@ -1,73 +0,0 @@ -package me.alexdevs.solstice.api.events; - -import me.alexdevs.solstice.Solstice; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ServerPlayer; - -public final class SolsticeEvents { - public static final Event READY = EventFactory.createArrayBacked(Ready.class, callbacks -> - (instance, server) -> { - for (Ready callback : callbacks) { - callback.onReady(instance, server); - } - }); - - public static final Event RELOAD = EventFactory.createArrayBacked(Reload.class, callbacks -> - (instance) -> { - for (Reload callback : callbacks) { - callback.onReload(instance); - } - }); - - public static final Event WELCOME = EventFactory.createArrayBacked(Welcome.class, callbacks -> - (player, server) -> { - for (Welcome callback : callbacks) { - callback.onWelcome(player, server); - } - }); - - public static final Event USERNAME_CHANGE = EventFactory.createArrayBacked(UsernameChange.class, callbacks -> - (player, previousUsername) -> { - for (UsernameChange callback : callbacks) { - callback.onUsernameChange(player, previousUsername); - } - }); - - /** - * @deprecated Superseded by {@link me.alexdevs.solstice.api.events.CommandEvents} - */ - @Deprecated - public static final Event PLAYER_COMMAND = EventFactory.createArrayBacked(PlayerCommand.class, callbacks -> - (player, command) -> { - for (PlayerCommand callback : callbacks) { - callback.onPlayerCommand(player, command); - } - }); - - @FunctionalInterface - public interface Ready { - void onReady(Solstice instance, MinecraftServer server); - } - - @FunctionalInterface - public interface Reload { - void onReload(Solstice instance); - } - - @FunctionalInterface - public interface Welcome { - void onWelcome(ServerPlayer player, MinecraftServer server); - } - - @FunctionalInterface - public interface UsernameChange { - void onUsernameChange(ServerPlayer player, String previousUsername); - } - - @FunctionalInterface - public interface PlayerCommand { - void onPlayerCommand(ServerPlayer player, String command); - } -} diff --git a/src/main/java/me/alexdevs/solstice/core/coreModule/commands/SolsticeCommand.java b/src/main/java/me/alexdevs/solstice/core/coreModule/commands/SolsticeCommand.java deleted file mode 100644 index e351465e..00000000 --- a/src/main/java/me/alexdevs/solstice/core/coreModule/commands/SolsticeCommand.java +++ /dev/null @@ -1,138 +0,0 @@ -package me.alexdevs.solstice.core.coreModule.commands; - -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; -import me.alexdevs.solstice.Solstice; -import me.alexdevs.solstice.api.events.SolsticeEvents; -import me.alexdevs.solstice.api.module.Debug; -import me.alexdevs.solstice.api.module.ModCommand; -import me.alexdevs.solstice.core.coreModule.CoreModule; -import me.alexdevs.solstice.api.text.Format; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.network.chat.ClickEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.HoverEvent; -import net.minecraft.network.chat.Style; -import java.io.FileWriter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; - -import static net.minecraft.commands.Commands.literal; - -public class SolsticeCommand extends ModCommand { - public SolsticeCommand(CoreModule module) { - super(module); - } - - @Override - public List getNames() { - return List.of("solstice", "sol"); - } - - @Override - public LiteralArgumentBuilder command(String name) { - return literal(name) - .requires(require(true)) - .executes(context -> { - var modContainer = FabricLoader.getInstance().getModContainer(Solstice.MOD_ID).orElse(null); - if (modContainer == null) { - context.getSource().sendSuccess(() -> Component.nullToEmpty("Could not find self in mod list???"), false); - return 1; - } - - var metadata = modContainer.getMetadata(); - var placeholders = Map.of( - "name", Component.nullToEmpty(metadata.getName()), - "version", Component.nullToEmpty(metadata.getVersion().getFriendlyString()) - ); - - var text = Format.parse( - "${name} v${version}", - placeholders); - context.getSource().sendSuccess(() -> text, false); - - return 1; - }) - .then(literal("reload") - .requires(require("reload", 3)) - .executes(context -> { - try { - Solstice.configManager.loadData(true); - Solstice.localeManager.reload(); - } catch (Exception e) { - Solstice.LOGGER.error("Failed to reload Solstice", e); - context.getSource().sendSuccess(() -> Component.nullToEmpty("Failed to load Solstice config. Check console for more info."), true); - return 1; - } - - SolsticeEvents.RELOAD.invoker().onReload(Solstice.getInstance()); - - context.getSource().sendSuccess(() -> Component.nullToEmpty("Reloaded Solstice config"), true); - - return 1; - })) - .then(literal("debug") - .requires(require("debug", 4)) - .then(literal("gen-command-list") - .executes(context -> { - var builder = new StringBuilder(); - - var list = new ArrayList<>(Debug.commandDebugList); - - list.sort(Comparator.comparing(Debug.CommandDebug::module)); - - builder.append(String.format("| %s | %s | %s | %s |\n", "Module", "Command", "Aliases", "Permission")); - builder.append("|---|---|---|---|\n"); - for (var command : list) { - builder.append(String.format("| %s | %s | %s | %s |\n", command.module(), command.command(), String.join(" ", command.commands()), command.permission())); - } - - var output = builder.toString(); - - var file = FabricLoader.getInstance().getGameDir().resolve("solstice-commands.md").toFile(); - try (var fw = new FileWriter(file)) { - fw.write(output); - } catch (IOException e) { - throw new SimpleCommandExceptionType(Component.nullToEmpty(e.getMessage())).create(); - } - - context.getSource().sendSuccess(() -> Component.nullToEmpty("Generated 'solstice-commands.md'"), true); - - return 1; - })) - .then(literal("tags") - .executes(context -> { - var player = context.getSource().getPlayerOrException(); - - var hand = player.getUsedItemHand(); - var itemStack = player.getItemInHand(hand); - - var entry = itemStack.getItemHolder().unwrapKey().get(); - var entryString = String.format("Tags for [%s / %s]:", entry.registry(), entry.location()); - - var text = Component.empty(); - text.append(Component.nullToEmpty(entryString)); - var tags = itemStack.getTags().iterator(); - while(tags.hasNext()) { - var tag = tags.next(); - text.append(Component.nullToEmpty("\n")); - text.append( - Component.literal(" #" + tag.location()) - .setStyle(Style.EMPTY - .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.nullToEmpty("Click to copy"))) - .withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, "#" + tag.location())) - ) - ); - } - - context.getSource().sendSuccess(() -> text, false); - - return 1; - })) - ); - } -} diff --git a/src/main/java/me/alexdevs/solstice/modules/inventorySee/commands/InventorySeeCommand.java b/src/main/java/me/alexdevs/solstice/modules/inventorySee/commands/InventorySeeCommand.java deleted file mode 100644 index 319851d1..00000000 --- a/src/main/java/me/alexdevs/solstice/modules/inventorySee/commands/InventorySeeCommand.java +++ /dev/null @@ -1,215 +0,0 @@ -package me.alexdevs.solstice.modules.inventorySee.commands; - -import com.mojang.brigadier.arguments.StringArgumentType; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import dev.emi.trinkets.api.TrinketsApi; -import eu.pb4.sgui.api.gui.SimpleGui; -import me.alexdevs.solstice.api.command.LocalGameProfile; -import me.alexdevs.solstice.api.module.ModCommand; -import me.alexdevs.solstice.api.utils.PlayerUtils; -import me.alexdevs.solstice.integrations.TrinketsIntegration; -import me.alexdevs.solstice.modules.inventorySee.ImmutableSlot; -import me.alexdevs.solstice.modules.inventorySee.InventorySeeModule; -import me.lucko.fabric.api.permissions.v0.Permissions; -import net.minecraft.commands.CommandSourceStack; -import net.minecraft.core.component.DataComponents; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.inventory.ChestMenu; -import net.minecraft.world.inventory.MenuType; -import net.minecraft.world.inventory.Slot; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import static net.minecraft.commands.Commands.argument; -import static net.minecraft.commands.Commands.literal; - -public class InventorySeeCommand extends ModCommand { - public InventorySeeCommand(InventorySeeModule module) { - super(module); - } - - @Override - public List getNames() { - return List.of("invsee", "inventorysee"); - } - - private static final LinkedHashMap> invSizes = new LinkedHashMap<>(); - - static { - invSizes.put(9, MenuType.GENERIC_9x1); - invSizes.put(18, MenuType.GENERIC_9x2); - invSizes.put(27, MenuType.GENERIC_9x3); - invSizes.put(36, MenuType.GENERIC_9x4); - invSizes.put(45, MenuType.GENERIC_9x5); - invSizes.put(54, MenuType.GENERIC_9x6); - } - - @Override - public LiteralArgumentBuilder command(String name) { - return literal(name) - .requires(require(2)) - .then(argument("player", StringArgumentType.word()) - .suggests(LocalGameProfile::suggest) - .executes(context -> { - var source = context.getSource(); - var player = source.getPlayerOrException(); - var targetProfile = LocalGameProfile.getProfile(context, "player"); - var targetOnline = PlayerUtils.isOnline(targetProfile.getId()); - - if (!targetOnline && !Permissions.check(player, getPermissionNode("offline"), 3)) { - source.sendSuccess(() -> module.locale().get("offlineNotAllowed"), false); - return 0; - } - - ServerPlayer target; - if (targetOnline) { - target = context.getSource().getServer().getPlayerList().getPlayer(targetProfile.getId()); - if (Permissions.check(target, getPermissionNode("exempt"), 3)) { - source.sendSuccess(() -> module.locale().get("exempt"), false); - return 0; - } - } else { - target = PlayerUtils.loadOfflinePlayer(targetProfile); - if (Permissions.check(targetProfile, getPermissionNode("exempt"), 3, source.getServer()).getNow(false)) { - source.sendSuccess(() -> module.locale().get("exempt"), false); - return 0; - } - } - - var canEdit = Permissions.check(player, getPermissionNode("edit"), 3); - - var targetInventory = target.getInventory(); - - var container = new SimpleGui(MenuType.GENERIC_9x5, player, false) { - @Override - public void onClose() { - if (!targetOnline) { - PlayerUtils.saveOfflinePlayer(target); - } - } - }; - - for (var i = 0; i < targetInventory.getContainerSize(); i++) { - Slot slot; - if (canEdit) { - slot = new Slot(targetInventory, i, 0, 0); - } else { - slot = new ImmutableSlot(targetInventory, i, 0, 0); - } - container.setSlotRedirect(i, slot); - } - - var barrier = new ItemStack(Items.BLACK_STAINED_GLASS_PANE); - barrier.set(DataComponents.CUSTOM_NAME, Component.literal("")); - for (var i = targetInventory.getContainerSize(); i < container.getSize(); i++) { - container.setSlot(i, barrier); - } - - container.setTitle(target.getName()); - - container.open(); - - var map = Map.of( - "user", Component.nullToEmpty(target.getGameProfile().getName()) - ); - source.sendSuccess(() -> module.locale().get("openedInventory", map), true); - - return 1; - }) - .then(literal("trinkets") - .executes(context -> { - var source = context.getSource(); - var player = source.getPlayerOrException(); - var targetProfile = LocalGameProfile.getProfile(context, "player"); - var targetOnline = PlayerUtils.isOnline(targetProfile.getId()); - - if (!targetOnline && !Permissions.check(player, getPermissionNode("offline"), 3)) { - source.sendSuccess(() -> module.locale().get("offlineNotAllowed"), false); - return 0; - } - - ServerPlayer target; - if (targetOnline) { - target = context.getSource().getServer().getPlayerList().getPlayer(targetProfile.getId()); - if (Permissions.check(target, getPermissionNode("exempt"), 3)) { - source.sendSuccess(() -> module.locale().get("exempt"), false); - return 0; - } - } else { - target = PlayerUtils.loadOfflinePlayer(targetProfile); - if (Permissions.check(targetProfile, getPermissionNode("exempt"), 3, source.getServer()).getNow(false)) { - source.sendSuccess(() -> module.locale().get("exempt"), false); - return 0; - } - } - - if (!TrinketsIntegration.isAvailable()) { - source.sendSuccess(() -> module.locale().get("trinketsNotInstalled"), false); - return 0; - } - - var canEdit = Permissions.check(player, getPermissionNode("edit"), 3); - - var trinkets = TrinketsApi.getTrinketComponent(target).orElse(null); - var slots = new ArrayList(); - for (var group : trinkets.getInventory().values()) { - for (var inventory : group.values()) { - for (var i = 0; i < inventory.getContainerSize(); i++) { - Slot slot; - if (canEdit) { - slot = new Slot(inventory, i, 0, 0); - } else { - slot = new ImmutableSlot(inventory, i, 0, 0); - } - slots.add(slot); - } - } - } - - var size = slots.size(); - MenuType handlerType = null; - for (var entry : invSizes.entrySet()) { - handlerType = entry.getValue(); - if (size <= entry.getKey()) { - break; - } - } - - var container = new SimpleGui(handlerType, player, false) { - @Override - public void onClose() { - if (!targetOnline) { - PlayerUtils.saveOfflinePlayer(target); - } - } - }; - - for (var i = 0; i < slots.size(); i++) { - var slot = slots.get(i); - container.setSlotRedirect(i, slot); - } - - var barrier = new ItemStack(Items.BLACK_STAINED_GLASS_PANE); - barrier.set(DataComponents.CUSTOM_NAME, Component.literal("")); - for (var i = size; i < container.getSize(); i++) { - container.setSlot(i, barrier); - } - - container.setTitle(target.getName()); - container.open(); - - var map = Map.of( - "user", Component.nullToEmpty(target.getGameProfile().getName()) - ); - source.sendSuccess(() -> module.locale().get("openedTrinkets", map), true); - - return 1; - })) - ); - } -} diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml deleted file mode 100644 index 4641cd68..00000000 --- a/src/main/resources/META-INF/neoforge.mods.toml +++ /dev/null @@ -1,34 +0,0 @@ -modLoader="javafml" -loaderVersion="[1,)" -license="MIT" - -[properties] -"connector:placeholder"=true - -[[mods]] -modId="solstice" -version="0.0.1" -displayName="Solstice Essentials" -authors="AlexDevs" -description='''Server commands, custom chat formats and more''' - -[[dependencies.solstice]] -modId="forge" -mandatory=true -versionRange="[47,)" -ordering="NONE" -side="SERVER" - -[[dependencies.solstice]] -modId="minecraft" -mandatory=true -versionRange="[1.21.1]" -ordering="NONE" -side="SERVER" - -[[dependencies.solstice]] -modId="connector" -mandatory=true -versionRange="*" -ordering="NONE" -side="BOTH" \ No newline at end of file From 72d2c1bc3a5440461a1184ef3cd4bd3bb7b3f77c Mon Sep 17 00:00:00 2001 From: RedstoneWizard08 <94275204+RedstoneWizard08@users.noreply.github.com> Date: Wed, 11 Jun 2025 13:15:40 -0700 Subject: [PATCH 2/4] Fix javadoc --- .../java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java | 1 - 1 file changed, 1 deletion(-) diff --git a/common/src/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java b/common/src/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java index 813b317c..3f77c5b9 100644 --- a/common/src/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java +++ b/common/src/main/java/me/alexdevs/solstice/api/text/tag/PhaseGradientTag.java @@ -16,7 +16,6 @@ /** * Implement an improved gradient that can also take in the phase. - *

* Most of the code is from Kyori Adventure. * * @see Kyori Adventure GradientTag From 21fa9213f05cf7480fdd36b5d1d90d9b0a3e7f81 Mon Sep 17 00:00:00 2001 From: RedstoneWizard08 <94275204+RedstoneWizard08@users.noreply.github.com> Date: Wed, 11 Jun 2025 14:38:25 -0700 Subject: [PATCH 3/4] Fix errors --- .github/workflows/build.yml | 6 +- .gitignore | 1 + build.gradle.kts | 11 +- .../main/kotlin/multiloader-common.gradle.kts | 12 - .../main/kotlin/multiloader-loader.gradle.kts | 39 +- common/build.gradle.kts | 15 - .../solstice/api/platform/PlatformHelper.java | 10 +- .../integrations/LuckPermsIntegration.java | 2 +- .../integrations/TrinketsApiProxy.java | 11 +- .../customname/CustomDisplayNameMixin.java | 7 +- .../modules/restart/RestartModule.java | 49 +- .../src/main/resources/solstice.mixins.json | 14 +- fabric/build.gradle.kts | 26 +- .../config/cardinal-components-api.properties | 9 - .../runs/server/config/solstice/config.conf | 319 ----- .../config/solstice/info/formatting.txt | 24 - .../runs/server/config/solstice/info/motd.txt | 6 - .../server/config/solstice/info/rules.txt | 3 - .../runs/server/config/solstice/locale.json | 365 ------ .../runs/server/config/solstice/modules.conf | 55 - fabric/runs/server/eula.txt | 3 - fabric/runs/server/logs/2025-06-10-1.log.gz | Bin 3145 -> 0 bytes fabric/runs/server/logs/2025-06-10-2.log.gz | Bin 2614 -> 0 bytes fabric/runs/server/logs/debug-1.log.gz | Bin 18232 -> 0 bytes fabric/runs/server/logs/debug-2.log.gz | Bin 17950 -> 0 bytes fabric/runs/server/logs/debug.log | 1154 ----------------- fabric/runs/server/logs/latest.log | 81 -- fabric/runs/server/server.properties | 63 - .../solstice/fabric/FabricPlatform.java | 1 + .../solstice/fabric/SolsticeFabric.java | 5 - ...xdevs.solstice.api.platform.PlatformHelper | 1 + ...evs.solstice.integrations.TrinketsApiProxy | 1 + neoforge/build.gradle.kts | 21 + .../solstice/neoforge/SolsticeNeoForge.java | 5 - .../solstice/neoforge/mixin}/PlayerMixin.java | 2 +- ...xdevs.solstice.api.platform.PlatformHelper | 1 + ...evs.solstice.integrations.TrinketsApiProxy | 1 + .../resources/solstice-neoforge.mixins.json | 3 +- 38 files changed, 100 insertions(+), 2226 deletions(-) delete mode 100644 fabric/runs/server/config/cardinal-components-api.properties delete mode 100644 fabric/runs/server/config/solstice/config.conf delete mode 100644 fabric/runs/server/config/solstice/info/formatting.txt delete mode 100644 fabric/runs/server/config/solstice/info/motd.txt delete mode 100644 fabric/runs/server/config/solstice/info/rules.txt delete mode 100644 fabric/runs/server/config/solstice/locale.json delete mode 100644 fabric/runs/server/config/solstice/modules.conf delete mode 100644 fabric/runs/server/eula.txt delete mode 100644 fabric/runs/server/logs/2025-06-10-1.log.gz delete mode 100644 fabric/runs/server/logs/2025-06-10-2.log.gz delete mode 100644 fabric/runs/server/logs/debug-1.log.gz delete mode 100644 fabric/runs/server/logs/debug-2.log.gz delete mode 100644 fabric/runs/server/logs/debug.log delete mode 100644 fabric/runs/server/logs/latest.log delete mode 100644 fabric/runs/server/server.properties create mode 100644 fabric/src/main/resources/META-INF/services/me.alexdevs.solstice.api.platform.PlatformHelper create mode 100644 fabric/src/main/resources/META-INF/services/me.alexdevs.solstice.integrations.TrinketsApiProxy rename {common/src/main/java/me/alexdevs/solstice/mixin/events => neoforge/src/main/java/me/alexdevs/solstice/neoforge/mixin}/PlayerMixin.java (94%) create mode 100644 neoforge/src/main/resources/META-INF/services/me.alexdevs.solstice.api.platform.PlatformHelper create mode 100644 neoforge/src/main/resources/META-INF/services/me.alexdevs.solstice.integrations.TrinketsApiProxy diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac07fef0..60a4bcae 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,7 @@ jobs: uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} - distribution: 'microsoft' + distribution: 'temurin' - name: make gradle wrapper executable run: chmod +x ./gradlew - uses: actions/cache@v4 @@ -36,10 +36,10 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - name: build - run: ./gradlew remapJar + run: ./gradlew build - name: capture build artifacts if: ${{ matrix.java == '21' }} # Only upload artifacts built from latest java uses: actions/upload-artifact@v4 with: name: Artifacts - path: build/libs/ + path: build/artifacts/ diff --git a/.gitignore b/.gitignore index c476faf2..4ba18e75 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ hs_err_*.log replay_*.log *.hprof *.jfr +runs diff --git a/build.gradle.kts b/build.gradle.kts index d1a91c0b..3a2fef1f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,12 @@ -import net.fabricmc.loom.task.RemapJarTask - plugins { - id("java") id("fabric-loom") version "1.8-SNAPSHOT" apply false id("net.neoforged.moddev") version "2.0.88" apply false + id("com.gradleup.shadow") version "9.0.0-beta15" apply false +} + +tasks.register("build") { + group = "all" + + dependsOn(project(":fabric").tasks.named("build")) + dependsOn(project(":neoforge").tasks.named("build")) } diff --git a/buildSrc/src/main/kotlin/multiloader-common.gradle.kts b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts index 3fbbbe00..7def4b81 100644 --- a/buildSrc/src/main/kotlin/multiloader-common.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-common.gradle.kts @@ -28,18 +28,6 @@ repositories { maven("https://maven.stardustmodding.org/releases") } -listOf("apiElements", "runtimeElements", "sourcesElements", "javadocElements").forEach { variant -> - configurations[variant].outgoing { - capability("${"mod_group_id"()}:${base.archivesName.get()}:${"mod_version"()}") - capability("${"mod_group_id"()}:${"mod_id"()}-${project.name}-${"minecraft_version"()}:${"mod_version"()}") - capability("${"mod_group_id"()}:${"mod_id"()}:${"mod_version"()}") - } - -// publishing.publications.configureEach { -// suppressPomMetadataWarningsFor(variant) -// } -} - tasks.named("sourcesJar") { from(rootProject.file("LICENSE")) { rename { "${it}_${"mod_id"()}" } diff --git a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts index 2c70b79f..417adad0 100644 --- a/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts +++ b/buildSrc/src/main/kotlin/multiloader-loader.gradle.kts @@ -2,45 +2,8 @@ plugins { id("multiloader-common") } -val commonJava by configurations.creating { - isCanBeResolved = true -} - -val commonResources by configurations.creating { - isCanBeResolved = true -} - dependencies { - compileOnly(project(":common")) { - capabilities { - requireCapability("${"mod_group_id"()}:${"mod_id"()}") - } - } - - commonJava(project(path = ":common", configuration = "commonJava")) - commonResources(project(path = ":common", configuration = "commonResources")) -} - -tasks.named("compileJava") { - dependsOn(configurations["commonJava"]) - source(configurations["commonJava"]) -} - -tasks.processResources { - dependsOn(configurations["commonResources"]) - from(configurations["commonResources"]) -} - -tasks.named("javadoc").configure { - dependsOn(configurations["commonJava"]) - source(configurations["commonJava"]) -} - -tasks.named("sourcesJar") { - dependsOn(configurations["commonJava"]) - from(configurations["commonJava"]) - dependsOn(configurations["commonResources"]) - from(configurations["commonResources"]) + compileOnly(project(":common")) } operator fun String.invoke(): String = rootProject.ext[this] as? String ?: error("No property \"$this\"") diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 1766ea37..ba60c20f 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -34,19 +34,4 @@ dependencies { compileOnly("net.luckperms:api:5.4") } -val commonJava: Configuration by configurations.creating { - isCanBeResolved = false - isCanBeConsumed = true -} - -val commonResources: Configuration by configurations.creating { - isCanBeResolved = false - isCanBeConsumed = true -} - -artifacts { - add(commonJava.name, sourceSets.main.get().java.sourceDirectories.singleFile) - add(commonResources.name, sourceSets.main.get().resources.sourceDirectories.singleFile) -} - operator fun String.invoke(): String = rootProject.ext[this] as? String ?: error("No property \"$this\"") diff --git a/common/src/main/java/me/alexdevs/solstice/api/platform/PlatformHelper.java b/common/src/main/java/me/alexdevs/solstice/api/platform/PlatformHelper.java index fc00dd8a..e1b7c947 100644 --- a/common/src/main/java/me/alexdevs/solstice/api/platform/PlatformHelper.java +++ b/common/src/main/java/me/alexdevs/solstice/api/platform/PlatformHelper.java @@ -1,21 +1,15 @@ package me.alexdevs.solstice.api.platform; -import org.jetbrains.annotations.ApiStatus; - import java.nio.file.Path; +import java.util.ServiceLoader; public abstract class PlatformHelper { - private static PlatformHelper INSTANCE; + private static final PlatformHelper INSTANCE = ServiceLoader.load(PlatformHelper.class).findFirst().orElseThrow(); public static PlatformHelper get() { return INSTANCE; } - @ApiStatus.Internal - public static void set(PlatformHelper helper) { - INSTANCE = helper; - } - public abstract void init(); public abstract Path getGameDir(); diff --git a/common/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java b/common/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java index c9796f4d..ba855c45 100644 --- a/common/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java +++ b/common/src/main/java/me/alexdevs/solstice/integrations/LuckPermsIntegration.java @@ -61,7 +61,7 @@ public static void register() { eventBus.subscribe(NodeRemoveEvent.class, Listeners::onNodeRemoved); eventBus.subscribe(NodeClearEvent.class, Listeners::onNodeCleared); - Solstice.LOGGER.warn("Permissions API is not available. Solstice is now taking over!"); + Solstice.LOGGER.warn("Fabric Permissions API is not available. Solstice is now taking over!"); // become the permissions api PermissionCheckEvent.EVENT.register((suggestion, permission) -> { diff --git a/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsApiProxy.java b/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsApiProxy.java index 84c439e1..585a1e4c 100644 --- a/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsApiProxy.java +++ b/common/src/main/java/me/alexdevs/solstice/integrations/TrinketsApiProxy.java @@ -2,23 +2,20 @@ import net.minecraft.world.Container; import net.minecraft.world.entity.LivingEntity; -import org.jetbrains.annotations.ApiStatus; import java.util.Map; import java.util.Optional; +import java.util.ServiceLoader; public abstract class TrinketsApiProxy { - private static TrinketsApiProxy INSTANCE; + private static final TrinketsApiProxy INSTANCE = ServiceLoader.load(TrinketsApiProxy.class) + .findFirst() + .orElseThrow(); public static TrinketsApiProxy get() { return INSTANCE; } - @ApiStatus.Internal - public static void set(TrinketsApiProxy proxy) { - INSTANCE = proxy; - } - // Basically, this does getTrinketComponent(target).getInventory().mapValues((map) -> map.mapValues(inv -> inv.values())) public abstract Optional>> getTrinketComponentInventory(LivingEntity target); } diff --git a/common/src/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java index 28222c79..549c1276 100644 --- a/common/src/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java +++ b/common/src/main/java/me/alexdevs/solstice/mixin/modules/customname/CustomDisplayNameMixin.java @@ -2,6 +2,7 @@ import me.alexdevs.solstice.Solstice; import me.alexdevs.solstice.modules.customName.CustomNameModule; +import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; @@ -14,12 +15,10 @@ @Mixin(Player.class) public abstract class CustomDisplayNameMixin { @Shadow - private MutableComponent decorateDisplayNameComponent(MutableComponent component) { - return null; - } + protected abstract MutableComponent decorateDisplayNameComponent(MutableComponent component); @Inject(method = "getDisplayName", at = @At("HEAD"), cancellable = true) - public void solstice$getDisplayName(CallbackInfoReturnable cir) { + public void solstice$getDisplayName(CallbackInfoReturnable cir) { var customNameModule = Solstice.modules.getModule(CustomNameModule.class); var name = customNameModule.getNameForPlayer((ServerPlayer) (Object) this); cir.setReturnValue(decorateDisplayNameComponent(name)); diff --git a/common/src/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java b/common/src/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java index ccbae3dd..99982a0b 100644 --- a/common/src/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java +++ b/common/src/main/java/me/alexdevs/solstice/modules/restart/RestartModule.java @@ -5,7 +5,6 @@ import me.alexdevs.solstice.api.events.SolsticeEvents; import me.alexdevs.solstice.api.events.TimeBarEvents; import me.alexdevs.solstice.api.module.ModuleBase; -import me.alexdevs.solstice.integrations.ConnectorIntegration; import me.alexdevs.solstice.modules.restart.commands.RestartCommand; import me.alexdevs.solstice.modules.restart.data.RestartConfig; import me.alexdevs.solstice.modules.restart.data.RestartLocale; @@ -54,8 +53,7 @@ public void init() { }); TimeBarEvents.PROGRESS.register((timeBar, server) -> { - if (restartBar == null || !timeBar.getUuid().equals(restartBar.getUuid())) - return; + if (restartBar == null || !timeBar.getUuid().equals(restartBar.getUuid())) return; var notificationTimes = getConfig().restartNotifications; @@ -68,8 +66,7 @@ public void init() { // Shutdown TimeBarEvents.END.register((timeBar, server) -> { - if (restartBar == null || !timeBar.getUuid().equals(restartBar.getUuid())) - return; + if (restartBar == null || !timeBar.getUuid().equals(restartBar.getUuid())) return; restart(); }); @@ -79,8 +76,7 @@ public void init() { @Override public boolean isEnabled() { - if (!Solstice.modules.getModule(TimeBarModule.class).isEnabled()) - return false; + if (!Solstice.modules.getModule(TimeBarModule.class).isEnabled()) return false; return super.isEnabled(); } @@ -110,17 +106,14 @@ public BossEvent.BossBarColor getBarColor() { } public void restart() { - if (!ConnectorIntegration.isForge()) { - var kickMessage = locale().get("kickMessage"); - for (var player : Solstice.server.getPlayerList().getPlayers()) { - try { - player.connection.disconnect(kickMessage); - } catch (Exception e) { - Solstice.LOGGER.error("An error occurred while disconnecting player {}", player, e); - } + var kickMessage = locale().get("kickMessage"); + + for (var player : Solstice.server.getPlayerList().getPlayers()) { + try { + player.connection.disconnect(kickMessage); + } catch (Exception e) { + Solstice.LOGGER.error("An error occurred while disconnecting player {}", player, e); } - } else { - Solstice.LOGGER.warn("Kicking players with restart message is not compatible with Forge at the moment."); } Solstice.server.halt(false); @@ -129,6 +122,7 @@ public void restart() { private void setup() { var soundName = getConfig().restartSound; var id = ResourceLocation.tryParse(soundName); + if (id == null) { Solstice.LOGGER.error("Invalid restart notification sound name {}", soundName); sound = SoundEvents.NOTE_BLOCK_BELL.value(); @@ -144,13 +138,7 @@ public void schedule(int seconds, String message, RestartEvents.RestartType rest } var timeBar = Solstice.modules.getModule(TimeBarModule.class); - restartBar = timeBar.startTimeBar( - message, - seconds, - getBarColor(), - getBarStyle(), - true - ); + restartBar = timeBar.startTimeBar(message, seconds, getBarColor(), getBarStyle(), true); RestartEvents.SCHEDULED.invoker().onSchedule(restartBar, restartType); } @@ -183,19 +171,24 @@ private void notifyRestart(MinecraftServer server, TimeBar bar) { solstice.broadcast(text); var pitch = getConfig().restartSoundPitch; - server.getPlayerList().getPlayers().forEach(player -> player.playNotifySound(sound, SoundSource.MASTER, 1f, pitch)); + server.getPlayerList() + .getPlayers() + .forEach(player -> player.playNotifySound(sound, SoundSource.MASTER, 1f, pitch)); } @Nullable public Long scheduleNextRestart() { var delay = getNextDelay(); - if (delay == null) - return null; + if (delay == null) return null; var barTime = getConfig().restartNotifications.stream().max(Integer::compareTo).orElse(600); var barStartTime = delay - barTime; - currentSchedule = Solstice.scheduler.schedule(() -> schedule(barTime, locale().raw("barLabel"), RestartEvents.RestartType.AUTOMATIC), barStartTime, TimeUnit.SECONDS); + currentSchedule = Solstice.scheduler.schedule( + () -> schedule(barTime, locale().raw("barLabel"), RestartEvents.RestartType.AUTOMATIC), + barStartTime, + TimeUnit.SECONDS + ); Solstice.LOGGER.info("Restart scheduled for in {} seconds", delay); return delay; diff --git a/common/src/main/resources/solstice.mixins.json b/common/src/main/resources/solstice.mixins.json index ade4ccae..2c4d1282 100644 --- a/common/src/main/resources/solstice.mixins.json +++ b/common/src/main/resources/solstice.mixins.json @@ -2,18 +2,13 @@ "required": true, "minVersion": "0.8", "package": "me.alexdevs.solstice.mixin", - "compatibilityLevel": "JAVA_21", + "refmap": "${mod_id}.mixins.json", "plugin": "me.alexdevs.solstice.mixin.SolsticeMixinConfigPlugin", - "client": [], - "server": [], - "injectors": { - "defaultRequire": 1 - }, + "compatibilityLevel": "JAVA_21", "mixins": [ "events.CommandEventsMixin", "events.LivingEntityMixin", "events.PlayerListMixin", - "events.PlayerMixin", "events.WorldSaveEventMixin", "modules.admin.ConnectionBypassMixin", "modules.afk.FixPlayerSleepPercentageMixin", @@ -33,5 +28,8 @@ "modules.styling.PlayerDisconnectMixin", "modules.tablist.CustomPlayerListNameMixin", "modules.tablist.UpdatePlayerListMixin" - ] + ], + "injectors": { + "defaultRequire": 1 + } } \ No newline at end of file diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 699dfc33..ebe3bb54 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -6,8 +6,7 @@ plugins { dependencies { minecraft("com.mojang:minecraft:${"minecraft_version"()}") - @Suppress("UnstableApiUsage") - mappings(loom.layered { + @Suppress("UnstableApiUsage") mappings(loom.layered { officialMojangMappings() parchment("org.parchmentmc.data:parchment-${"parchment_minecraft"()}:${"parchment_version"()}@zip") }) @@ -29,6 +28,8 @@ dependencies { modCompileOnly("net.luckperms:api:5.4") modLocalRuntime("net.luckperms:api:5.4") + + include("net.kyori:option:1.1.0") } loom { @@ -38,25 +39,40 @@ loom { accessWidenerPath.set(aw) } - mixin { + @Suppress("UnstableApiUsage") mixin { defaultRefmapName.set("${"mod_id"()}.refmap.json") + useLegacyMixinAp = false } runs { maybeCreate("client").apply { client() - setConfigName("Fabric Client") + configName = "Fabric Client" ideConfigGenerated(true) runDir("runs/client") + property("mixin.debug.export", "true") } maybeCreate("server").apply { server() - setConfigName("Fabric Server") + configName = "Fabric Server" ideConfigGenerated(true) runDir("runs/server") + property("mixin.debug.export", "true") } } } +tasks.compileJava { + source(project(":common").sourceSets["main"].java) +} + +tasks.processResources { + from(project(":common").sourceSets["main"].resources) +} + +tasks.remapJar { + destinationDirectory.set(rootProject.layout.buildDirectory.dir("artifacts")) +} + operator fun String.invoke(): String = rootProject.ext[this] as? String ?: error("No property \"$this\"") diff --git a/fabric/runs/server/config/cardinal-components-api.properties b/fabric/runs/server/config/cardinal-components-api.properties deleted file mode 100644 index d04b6043..00000000 --- a/fabric/runs/server/config/cardinal-components-api.properties +++ /dev/null @@ -1,9 +0,0 @@ -# If set to false, warnings will not get logged when a component fails to be resolved (typically due to mods being removed) -# Default value: true -log-deserialization-warnings = true -# If log-deserialization-warnings is enabled, warnings will be printed at most *this number of times* for every component type -# Default value: 5 -max-deserialization-warnings = 5 - -# Internal value, do not edit or your changes may be arbitrarily reset -config-version = 2 diff --git a/fabric/runs/server/config/solstice/config.conf b/fabric/runs/server/config/solstice/config.conf deleted file mode 100644 index 205e12bf..00000000 --- a/fabric/runs/server/config/solstice/config.conf +++ /dev/null @@ -1,319 +0,0 @@ -broadcast { - # Format to use when broadcasting a message. - format="[Broadcast] ${message}" -} -note { - # Show a player's note when they login to users with the permission 'solstice.note.showonlogin' - show-login=true -} -autoannouncement { - # Enable automatic announcements functionality. - enable=true - # Pick the next announcement randomly, else linearly. - pick-randomly=false - # Send announcement every X seconds. Defaults to 300 seconds. - delay=300 - # Announcement list. Announcements can have a permission as condition. If result is true, the permission has to be granted, else the permission has to be denied (or unset). - announcements=[ - { - text="Tip! Solstice is open-source! Contribute on GitHub!" - }, - { - text="Fun fact! This announcement is only visible to players that do not have the 'solstice.example' permission granted!" - permission="solstice.example" - result=false - } - ] -} -tablist { - # Enable the custom tab list functionality. - enable=true - # Send tab list updates every X milliseconds. Defaults to 250 ms. - delay=250 - # How fast the phase is. Lower is faster. Defaults to 300 - phase-period=300.0 - # Header lines - header=[ - " " - ] - # Footer lines - footer=[ - " " - ] - # Format to use when displaying the player name in the tab list. - player-tab-name="%solstice:afk%%player:displayname_visual%" -} -teleportrequest { - # The teleport request times out after the following seconds. Defaults to 120 seconds. - teleport-request-timeout=120 -} -restart { - # Enable auto restart functionality. - enable=true - # Restart the server at exactly the following times. Time is local. - restart-at=[ - "06:00", - "18:00" - ] - # Sound to play when sending the restart notification in chat. - restart-sound="minecraft:block.note_block.bell" - # Pitch of the sound. - restart-sound-pitch=0.8999999761581421 - # Style of the restart bar. - bar-style="NOTCHED_10" - # Color of the restart bar. - bar-color=RED - # Milestones of the restart notifications in seconds. - restart-notifications=[ - 600, - 300, - 120, - 60, - 30, - 15, - 10, - 5, - 4, - 3, - 2, - 1 - ] -} -afk { - # Enable the AFK functionality. Requires server restart. - enable=true - # Announce in chat when a player goes or return from AFK. - announce=true - # AFK triggers after the player has been inactive for the following seconds. Defaults to 300 seconds. - time-trigger=300 - # This tag is displayed with `solstice:afk` placeholder when the player is AFK. - tag="[AFK] " - # These triggers clear the AFK status. Events regarding entities, blocks or item usage may be triggered by fake players. - triggers { - # Movement is triggered when the velocity threshold is met. - on-movement=true - # Look change is triggered when the player yaw and/or pitch change. - on-look-change=true - # Trigger on chat messages sent by the player. - on-chat=true - # Trigger on commands. - on-command=true - # Trigger when a block is being attacked (left click). - on-block-attack=true - # Trigger when a block is being interacted with (right click). - on-block-interact=true - # Trigger when an entity is attacked. - on-entity-attack=true - # Trigger when an entity is interacted with. - on-entity-interact=true - # Trigger when an item is used. - on-item-use=true - } -} -jail { - # List of commands the jailed players can execute. - allowed-commands=[ - afk, - ignore, - msg, - tell, - w, - dm, - r, - reply, - mail, - info, - motd, - rules - ] - # Mute jailed players. They will not be able to send chat messages. - mute=false -} -commandspy { - # Commands to ignore. - ignored-commands=[ - tell, - w, - msg, - dm, - r, - staffchat, - sc, - helpop, - sos - ] -} -home { - # The amount of homes a player can set based on their permission group. = . - # Use the permission 'solstice.home.unlimited' to bypass this limit. - homes { - vip=10 - default=5 - } -} -rtp { - # How many times to try to find a valid spot to teleport to before failing. - attempts=10 - # How much time in milliseconds /rtp can take at most before failing. - timeout=10000 - # Minimum radius from the center of the world border. - min-radius=0 - # Maximum radius from the center of the world border. It caps to world border size. - max-radius=30000 - # Use player as the center of the radius instead of the world border. - around-player=false - # List of biomes an attempt should fail at. - prohibited-biomes=[ - "minecraft:ocean", - "minecraft:cold_ocean", - "minecraft:deep_cold_ocean", - "minecraft:deep_frozen_ocean", - "minecraft:deep_lukewarm_ocean", - "minecraft:deep_ocean", - "minecraft:frozen_ocean", - "minecraft:lukewarm_ocean", - "minecraft:warm_ocean", - "minecraft:river", - "minecraft:frozen_river", - "minecraft:small_end_islands" - ] - # Require that the player has the permission of the world 'solstice.rtp.worlds.' to initiate the random teleport in the world. - require-world-permission=true - # Groups of biomes the player is allowed to RTP to. - # Use 'solstice.rtp.biomes..' to assign. - # Requires 'solstice.rtp.biome.base'. - biome-groups { - "minecraft:overworld" { - forests=[ - "minecraft:forest", - "minecraft:flower_forest", - "minecraft:taiga", - "minecraft:old_growth_spruce_taiga", - "minecraft:snowy_taiga", - "minecraft:birch_forest", - "minecraft:old_growth_birch_forest", - "minecraft:dark_forest", - "minecraft:pale_garden", - "minecraft:jungle", - "minecraft:sparse_jungle", - "minecraft:bamboo_jungle" - ] - } - } - # Cooldown configuration - cooldown { - # This setting makes it so players have to wait before running the command a second time. - enable=true - # Seconds to wait for the cooldown to expire. - cooldown=600 - # Cancel the cooldown if /rtp fails. - cancel-on-fail=true - } -} -core { - # Generic date format to use. - # Metric format: dd/MM/yyyy - # USA format: MM/dd/yyyy - date-format="dd/MM/yyyy" - # Generic time format to use. - # 24h format: HH:mm - # 12h format: hh:mm a - time-format="HH:mm" - # Generic date + time format to use. - date-time-format="dd/MM/yyyy HH:mm" - # Format to use when displaying links in chat. - link="${label}" - # Format to use when hovering over the link in chat. - link-hover="${url}" -} -spawn { - # Require that the player has the permission of the world 'solstice.spawn.worlds.' to warp to its spawn. - # Mind that 'solstice.spawn.worlds.base' is required to be able to use the `world` argument. - require-world-permission=true - # This setting defines whether `/spawn` and respawning work on a per world or global server basis. - global-spawn { - # Send the player to the global spawn instead of the world spawn when using the /spawn command. - on-spawn-command=false - # Send the player to the global spawn instead of their bed or anchor when respawning. - on-respawn=false - # Send the player to the global spawn when logging in. - on-login=false - # ID of the world to use as global spawn. Minecraft dimensions: 'minecraft:overworld', 'minecraft:the_nether', 'minecraft:the_end' - target-spawn-world="minecraft:overworld" - } -} -styling { - # Enable Markdown support in chat. - enable-markdown=true - # Whether to broadcast a welcome message to everyone when a player joins for the first time. - welcome-new-players=true - # Replace text chunks in chat messages. - replacements { - ":shrug:"="¯\\\\_(ツ)_/¯" - } - # Task advancement format. - advancement-task=" %player:displayname% completed the task ${title}" - # Challenge advancement format. - advancement-challenge="🎆 %player:displayname% completed the challenge ${title}" - # Goal advancement format. - advancement-goal="🎖 %player:displayname% completed the goal ${title}" - # Player chat format. - chat-format="%player:displayname%: ${message}" - # Emote format (/me) - emote-format="👤 %player:displayname% ${message}" - # Player join format - join-format="+ %player:displayname% joined!" - # Player joined with a new username format - join-renamed-format="+ %player:displayname% joined! (Previously known as ${previousName})" - # Player quit format - leave-format="- %player:displayname% left!" - # Player death format - death-format="☠ ${message}" - # New player welcome message format - welcome="Welcome %player:displayname% to the server!" -} -kit { - # Require 'solstice.kit.kits.' permission node by default to claim a kit. - require-permission=false -} -customname { - # Customize player display names based on their LuckPerms group. Priority is determined by the list order: first comes before last. - name-formats=[ - { - group=admin - format="${prefix}${name}${suffix}" - }, - { - group=default - format="${prefix}${name}${suffix}" - } - ] -} -hat { - # Make the filter setting act as a whitelist instead of a blacklist. - whitelist-filter=false - # Items & tags to allow/deny. See the 'whitelist-filter' setting to change the behaviour of this list. - # Use '#' as prefix to filter as tag. - filter=[ - "#c:shulker_boxes" - ] -} -near { - # Max range in blocks. Defaults to 48 blocks. - max-range=48 - # Default range in blocks. Defaults to 32 blocks. - default-range=32 -} -notifications { - default-values { - sound-id="minecraft:block.note_block.bell" - pitch=1 - volume=1 - afk-only=true - on-chat=true - } -} -info { - # Send the 'Message Of The Day' to the player when joining the server. Content is in the 'config/solstice/info/motd.txt' file. - enable-motd=true -} diff --git a/fabric/runs/server/config/solstice/info/formatting.txt b/fabric/runs/server/config/solstice/info/formatting.txt deleted file mode 100644 index ebbb2808..00000000 --- a/fabric/runs/server/config/solstice/info/formatting.txt +++ /dev/null @@ -1,24 +0,0 @@ -This page is an example of the formatting and placeholders used in pages and command texts. - -Formatting: - -Colors: -yellow, dark_blue, dark_purple, gold, red, aqua, gray, light_purple, white, dark_gray, green, dark_green, blue, dark_aqua, dark_green, black. - -Decorations: -strikethrough, st, underline, underlined, u, italic, i, obfuscated, obf(obfuscated, obf), bold, b - -Fonts: -default, uniform(uniform), alt(alt) - -Gradients: -smooth white to black, hard white to black, rainbow - -For the complete documentation on text formatting check out this link. - -Placeholders: - -Player name: %player:name% -Player display name: %player:displayname% - -For the complete documentation on placeholders check out this link. \ No newline at end of file diff --git a/fabric/runs/server/config/solstice/info/motd.txt b/fabric/runs/server/config/solstice/info/motd.txt deleted file mode 100644 index 83676e75..00000000 --- a/fabric/runs/server/config/solstice/info/motd.txt +++ /dev/null @@ -1,6 +0,0 @@ -Welcome to the server, %player:displayname%! - -The world time is %world:time%. -There are %server:online%/%server:max_players% online players. - -Make sure to read the /rules! \ No newline at end of file diff --git a/fabric/runs/server/config/solstice/info/rules.txt b/fabric/runs/server/config/solstice/info/rules.txt deleted file mode 100644 index 6d4f6602..00000000 --- a/fabric/runs/server/config/solstice/info/rules.txt +++ /dev/null @@ -1,3 +0,0 @@ -1. Respect players. -2. Respect staff members. -3. Enjoy your stay! \ No newline at end of file diff --git a/fabric/runs/server/config/solstice/locale.json b/fabric/runs/server/config/solstice/locale.json deleted file mode 100644 index b6e5c789..00000000 --- a/fabric/runs/server/config/solstice/locale.json +++ /dev/null @@ -1,365 +0,0 @@ -{ - "shared": { - "unit.months": "${n} months", - "buttonSuggest": "[${label}]", - "refuse.hover": "Click to refuse", - "unit.day": "${n} day", - "unit.year": "${n} year", - "unit.hour": "${n} hour", - "accept": "Accept", - "unit.month": "${n} month", - "unit.seconds": "${n} seconds", - "button": "[${label}]", - "unit.years": "${n} years", - "refuse": "Refuse", - "unit.minutes": "${n} minutes", - "unit.weeks": "${n} weeks", - "unit.second": "${n} second", - "unit.hours": "${n} hours", - "unit.week": "${n} week", - "unit.minute": "${n} minute", - "cooldown": "You are on cooldown for ${timespan}.", - "accept.hover": "Click to accept", - "unit.days": "${n} days", - "tooManyTargets": "The provided selector contains too many targets." - }, - "modules": { - "note": { - "deleteButton": "Delete", - "checkButton": "Check", - "hoverCheck": "Click to check the note", - "addedNotification": "${operator} added a note to ${user}! ${checkButton}", - "userNotFound": "User ${user} not found!", - "hoverDelete": "Click to delete the note", - "noteListHeader": "${user}'s notes:", - "noteAdded": "Note added!", - "noteDetails": "From ${operator} on ${date}\n ${message}\n\n ${deleteButton}", - "loginInfo": "${user} has ${notes} notes! ${checkButton}", - "emptyNotes": "There are no notes for this user.", - "notFound": "Note not found", - "noteListEntry": "[${date}] ${operator}: ${message} ${checkButton}", - "notesCleared": "All ${user}'s notes cleared!", - "noteDeleted": "Note deleted!" - }, - "miscellaneous": { - "noEffects": "This player has no active effects.", - "infinite": "infinite", - "effectHeader": "Active effects:", - "effect": "${effect}: x${amplifier} for ${duration}" - }, - "teleportrequest": { - "targetAccepted": "Teleport request accepted.", - "playerUnavailable": "The other player is no longer available.", - "sourceRefused": "${player} refused your teleport request!", - "noPending": "There are no pending teleport requests for you.", - "unavailable": "This request expired or is no longer available.", - "teleporting": "Teleporting...", - "targetRefused": "Teleport request refused.", - "pendingTeleportHere": "${requesterPlayer} requested you to teleport to them.\n ${acceptButton} ${refuseButton}", - "requestSent": "Teleport request sent.", - "sourceAccepted": "${player} accepted your teleport request!", - "pendingTeleport": "${requesterPlayer} requested to teleport to you.\n ${acceptButton} ${refuseButton}" - }, - "mail": { - "deleteButton": "Delete", - "mailDeleted": "Mail deleted!", - "replyButton": "Reply", - "hoverRead": "Click to read the mail", - "playerNotFound": "Player ${recipient} not found!", - "mailSent": "Mail sent!", - "mailPending": "You have pending mails! Run /mail to read your mails.", - "emptyMailbox": "Your mailbox is empty.", - "mailListEntry": "${index}. From ${sender} on ${date} ${readButton}", - "hoverReply": "Click to reply to the mail", - "hoverDelete": "Click to delete the mail", - "readButton": "Read", - "mailReceived": "You received a new mail! Run /mail to read the emails!", - "notFound": "Mail not found", - "mailListHeader": "Your mails:", - "mailDetails": "From ${sender} on ${date}\n ${message}\n\n ${replyButton} ${deleteButton}" - }, - "tell": { - "playerNotFound": "Player ${targetPlayer} not found!", - "noLastSenderReply": "You have no one to reply to.", - "messageSpy": "👁 [${sourcePlayer} → ${targetPlayer}] ${message}", - "message": "[${sourcePlayer} ${targetPlayer}] ${message}", - "you": "You" - }, - "back": { - "teleporting": "Teleporting to previous position...", - "noPosition": "There is no position to return back to." - }, - "ban": { - "tempBanMessageFormat": "You are temporarily banned from this server:\n\n${reason}\n\nExpires: ${expiry_date}", - "banMessageFormat": "You are banned from this server:\n\n${reason}" - }, - "seen": { - "online": "online", - "playerNotFound": "Could not find this player", - "extended": " IP Address: ${ipAddress}\n Location: ${location}", - "neverJoined": "Never joined", - "unknown": "unknown", - "base": "${username}'s information:\n UUID: ${uuid}\n First seen: ${firstSeenDate}\n Last seen: ${lastSeenDate}" - }, - "inventorysee": { - "offlineNotAllowed": "You cannot open offline player inventories.", - "openedTrinkets": "Opened ${user}'s trinkets inventory.", - "trinketsNotInstalled": "Trinkets not available because the mod is missing.", - "playerNotFound": "Player not found!", - "exempt": "You cannot open this inventory because the user is exempt.", - "openedInventory": "Opened ${user}'s inventory." - }, - "kit": { - "listAvailableKit": "${kit}", - "noStackInHand": "You need to hold an item to set a kit icon!", - "edited": "Kit ${kit} edited!", - "noPermission": "You do not have permission to claim this kit!", - "created": "New kit ${kit} created!", - "claimed": "Kit ${kit} claimed!", - "onCooldown": "You can claim this kit again in ${timespan}!", - "setCooldown": "Set cooldown to ${value} for kit ${kit}.", - "listComma": ", ", - "listHeader": "Available kits: ${list}.", - "claimKit": "Click to claim this kit!", - "kits": "Kits", - "setOneTime": "Set one time to ${value} for kit ${kit}.", - "setIcon": "Set icon for kit ${kit}.", - "setFirstJoin": "Set first join to ${value} for kit ${kit}.", - "deleted": "Kit ${kit} deleted!", - "newKitTitle": "New kit: ${kit}", - "listUnavailableKit": "${kit}", - "notFound": "The kit ${kit} does not exist!", - "alreadyClaimed": "You already claimed this kit!", - "editKitTitle": "Edit kit: ${kit}", - "alreadyExists": "A kit with this name already exists!", - "listNoKits": "There are no kits available." - }, - "helpop": { - "helpRequestMessage": "❗ [%player:displayname%] ${message}", - "helpRequestFeedback": "Help request sent: ${message}" - }, - "ignore": { - "blockedPlayer": "${targetName} is now ignored.", - "unblockedPlayer": "${targetName} is no longer ignored.", - "ignoreListEmpty": "You are not ignoring anyone at the moment.", - "ignoreList": "Ignored players: ${playerList}", - "playerNotFound": "Could not find this player", - "ignoreListFormat": "${player}", - "ignoreListComma": ", ", - "targetIsSelf": "You cannot ignore yourself." - }, - "hat": { - "success": "Check out your new hat!", - "notAllowed": "You cannot wear this item!", - "emptyStack": "You are not holding any item!" - }, - "near": { - "comma": ", ", - "noOne": "There are no players near you.", - "nearestPlayers": "Nearest players: ${playerList}", - "format": "${player} (${distance})" - }, - "info": { - "noPages ": "There are no pages so far.", - "pageNotFound": "This page does not exist!", - "pageError": "There was an error opening the info page.", - "pagesFormat": "${page}", - "pageList": "Available pages: ${pageList}", - "pagesComma": ", " - }, - "enderchest": { - "opened": "Opened ${player}'s Ender Chest.", - "exempt": "You cannot open this Ender Chest because the player is exempt.", - "title": "${player}'s Ender Chest" - }, - "item": { - "noItem": "You are not holding any item!", - "notRepairable": "This item is not repairable!", - "alreadyRepaired": "This item is already repaired!", - "nameSet": "Successfully set the new item name!", - "loreCleared": "Item lore cleared!", - "loreSet": "Successfully set the new item lore!", - "nameCleared": "Item name cleared!", - "repaired": "Item repaired!", - "stackRefilled": "Item stack refilled!" - }, - "staffchat": { - "disabled": "Staff chat disabled.", - "message": "🔧 ${name}: ${message}", - "enabled": "Staff chat enabled. All your messages will be sent to staff chat instead." - }, - "restart": { - "barLabel": "Server restarting in ${remaining_time}", - "chatMessage": "The server is restarting in ${remaining_time}", - "kickMessage": "The server is restarting!" - }, - "afk": { - "leaderboardHeader": "Active Time Leaderboard:", - "leaderboardEntry": " ${index}. ${player}: ${time}", - "yourActiveTime": "Your active time is ${activeTime}.", - "leaderboardRecalculated": "Recalculated active time leaderboard!", - "neverPlayed": "This player never played.", - "returnAfk": "%player:displayname% is no longer AFK", - "playerActiveTime": "${player}'s active time is ${activeTime}.", - "notFound": "Player not found.", - "activeTimeSet": "Set ${player}'s active time to ${time}!", - "goneAfk": "%player:displayname% is now AFK" - }, - "mute": { - "youAreMuted": "You are muted!" - }, - "jail": { - "playerJailedFor": "You have been jailed for ${duration}!", - "notJailed": "This user is not jailed!", - "infoJailReason": "Reason: ${reason}", - "infoJailedBy": "Jailed by: ${operator}", - "jailNotFound": "This jail does not exist.", - "noJails": "There are no jails yet.", - "jailedFor": "${player} has been jailed at ${jail} for ${duration}!", - "jailed": "${player} has been jailed at ${jail} indefinitely!", - "unjailed": "Unjailed ${player}!", - "playerUnjailed": "You have been unjailed!", - "infoJailedFor": "Jail time: ${duration}", - "cannotUseBlocks": "You are not allowed to use blocks in jail!", - "infoJailReasonEmpty": "No reason", - "alreadyJailed": "This player is already jailed!", - "playerJailedForWithReason": "You have been jailed for ${duration} with reason: ${reason}", - "jailList": "Jails: ${list}.", - "created": "New jail ${jail} created!", - "playerExempt": "This player is exempt from being jailed!", - "teleporting": "Teleporting to ${jail}...", - "jailAlreadyExists": "A jail with this name already exists.", - "infoJailedAt": "Jailed at: ${jail}", - "jailedForWithReason": "${player} has been jailed at ${jail} for ${duration} with reason: ${reason}", - "listEntry": "${jail}", - "cannotAttackEntities": "You are not allowed to attack entities in jail!", - "cannotUseEntities": "You are not allowed to interact with entities in jail!", - "comma": ", ", - "cannotRunCommands": "You are not allowed to run this command in jail!", - "deleted": "Jail ${jail} deleted!", - "infoJailedOn": "Jailed on: ${date}", - "playerJailed": "You have been jailed!", - "cannotSpeak": "You are not allowed to speak in jail!", - "cannotBreakBlocks": "You are not allowed to break blocks in jail!", - "infoHeader": "${player} Jail Information:", - "infoJailedForEmpty": "Indefinitely", - "cannotUseItems": "You are not allowed to use items in jail!" - }, - "commandspy": { - "spyFormat": "👁 ${player}: /${command}" - }, - "trash": { - "trash": "Trash Bin" - }, - "home": { - "forceSetLabel": "Force set home", - "homeListOther": "${owner}'s homes: ${homeList}", - "homeNotFound": "The home ${home} does not exist!", - "teleporting": "Teleporting to ${home}", - "homeDeleted": "Home ${home} deleted!", - "homesFormat": "${home}", - "maxHomesReached": "You have reached the maximum amount of homes!", - "forceSetHover": "Click to force setting new home", - "noHomesOther": "${owner} did not set any home so far.", - "homeSetSuccess": "New home ${home} set!", - "homesFormatOther": "${home}", - "noHomes": "You did not set any home so far.", - "homesComma": ", ", - "teleportingOther": "Teleporting to ${owner}'s ${home}", - "homeExists": "You already have set this home.\n ${forceSetButton}", - "homeList": "Your homes: ${homeList}" - }, - "rtp": { - "noWorldPermission": "You do not have permission to run this command in this world.", - "noBiomePermission": "You do not have permission to use this biome.", - "success": "Teleporting to a random location...", - "searching": "Finding a good spot...", - "unsafe": "Could not place you in a safe spot.", - "tooManyAttempts": "Too many failed attempts at locating a valid spot.", - "timeout": "Could not find a valid spot in a timely manner." - }, - "core": { - "stat.uptime": "Server Uptime: ${uptime}", - "ping.self": "Ping: ${ping}ms", - "ping.other": "${player}'s ping: ${ping}ms", - "stat.tps": "Current TPS: %server:tps_colored%/20.0", - "stat.dedicatedMemory": "Dedicated memory: ${memory} MB", - "stat.maxMemory.hover": "How much memory the JVM can take at most in the system.", - "stat.title": "Server Statistics", - "stat.maxMemory": "Maximum memory: ${memory} MB", - "stat.freeMemory.hover": "How much memory is left free in the dedicated memory.", - "stat.freeMemory": "Free memory: ${memory} MB", - "stat.dedicatedMemory.hover": "How much memory the JVM is using, can expand up to maximum memory." - }, - "fly": { - "disabled": "Flight disabled", - "enabledForOther": "Flight enabled for ${player}", - "disabledForOther": "Flight disabled for ${player}", - "enabled": "Flight enabled" - }, - "powertool": { - "checkEntry": " - ${action}: ${command}", - "allCleared": "All commands cleared from ${item}!", - "actionCleared": "Command cleared from ${item} on ${action}.", - "checkEntryNotSet": " - ${action}: Not set", - "check": "Actions for ${item}:", - "emptyHand": "You are not holding any item.", - "actionSet": "Command bound to ${item} on ${action}.", - "noAction": "This action is not bound for this item." - }, - "spawn": { - "noWorldPermission": "You do not have permission to teleport to this world spawn.", - "noFirstSpawn": "There is no first spawn yet.", - "worldSpawnSet": "${world} spawn point set to ${coordinates}.", - "teleporting": "Teleporting to spawn...", - "firstSpawnDeleted": "First spawn deleted!", - "firstSpawnSet": "First spawn set!" - }, - "customname": { - "setOther": "${player}'s nickname set to ${nickname}!", - "clearedOther": "${player}'s nickname cleared!", - "setSelf": "Nickname set to ${nickname}!", - "errorEmpty": "Username cannot be empty!", - "clearedSelf": "Nickname cleared!" - }, - "god": { - "disabled": "Invincibility disabled", - "enabledForOther": "Invincibility enabled for ${player}", - "disabledForOther": "Invincibility disabled for ${player}", - "enabled": "Invincibility enabled" - }, - "notifications": { - "getAfkOnly.false": " AFK-Only: disabled", - "setOnChatEnabled": "Chat pings enabled.", - "setAfkOnlyDisabled": "Notifications always enabled.", - "setVolume": "Notifications volume set to ${volume}.", - "getAfkOnly.true": " AFK-Only: enabled", - "getHeader": "Your notifications settings:", - "getOnChat.false": " On chat: disabled", - "getOnChat.true": " On chat: enabled", - "getVolume": " Volume: ${volume}", - "setAfkOnlyEnabled": "Notifications enabled only while AFK.", - "getPitch": " Pitch: ${pitch}", - "setOnChatDisabled": "Chat pings disabled.", - "toggleDisabled": "Notifications disabled.", - "setPitch": "Notifications pitch set to ${pitch}.", - "setSound": "Notifications sound set to ${sound}.", - "reset": "Notification settings cleared.", - "getEnabled.true": " Enabled: enabled", - "getEnabled.false": " Enabled: disabled", - "toggleEnabled": "Notifications enabled.", - "getSound": " Sound: ${sound}" - }, - "warp": { - "deleted": "Warp ${warp} deleted!", - "warpsFormat": "${warp}", - "noWarps": "There are no warps so far.", - "noPermission": "You do not have permission to warp to ${warp}.", - "created": "New warp ${warp} created!", - "warpNotFound": "The warp ${warp} does not exist!", - "teleporting": "Warping to ${warp}...", - "warpsComma": ", ", - "warpList": "Server warps: ${warpList}" - } - } -} \ No newline at end of file diff --git a/fabric/runs/server/config/solstice/modules.conf b/fabric/runs/server/config/solstice/modules.conf deleted file mode 100644 index 5adc4a4c..00000000 --- a/fabric/runs/server/config/solstice/modules.conf +++ /dev/null @@ -1,55 +0,0 @@ -admin=true -afk=true -autoannouncement=true -back=true -ban=true -broadcast=true -commandspy=true -core=true -customname=true -enderchest=true -extinguish=true -feed=true -fly=true -god=true -hat=true -heal=true -helpop=true -home=true -ignite=true -ignore=true -info=true -inventorysee=true -item=true -jail=true -kick=true -kit=true -mail=true -miscellaneous=true -mute=true -near=true -note=true -notifications=true -placeholders=true -powertool=true -restart=true -rtp=true -seen=true -sign=true -skull=true -smite=true -spawn=true -staffchat=true -styling=true -sudo=true -suicide=true -tablist=true -teleporthere=true -teleportoffline=true -teleportposition=true -teleportrequest=true -tell=true -timebar=true -trash=true -utilities=true -warp=true diff --git a/fabric/runs/server/eula.txt b/fabric/runs/server/eula.txt deleted file mode 100644 index 81a8bc29..00000000 --- a/fabric/runs/server/eula.txt +++ /dev/null @@ -1,3 +0,0 @@ -#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA). -#Tue Jun 10 19:08:24 PDT 2025 -eula=false diff --git a/fabric/runs/server/logs/2025-06-10-1.log.gz b/fabric/runs/server/logs/2025-06-10-1.log.gz deleted file mode 100644 index fd8306fbe41a0365db0b1cd0d341872cfcb6e5ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3145 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 diff --git a/fabric/runs/server/logs/2025-06-10-2.log.gz b/fabric/runs/server/logs/2025-06-10-2.log.gz deleted file mode 100644 index 3ce9a5866972579fb4eb29e9b1d086a844ba56ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2614 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 Y3%BmVt-EkL)(f})0#`VY9>7Nc0M(xwCIA2c diff --git a/fabric/runs/server/logs/debug-1.log.gz b/fabric/runs/server/logs/debug-1.log.gz deleted file mode 100644 index 8733c665b87be08f570571d1058c1387617d166e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18232 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 net/minecraft/server/Main -[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Patching game constructor main([Ljava/lang/String;)V -[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) 20w22a+ detected, patching main method... -[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Detected version above 20w22a -[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Applying brand name hook to net/minecraft/client/ClientBrandRetriever::getClientModName -[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Applying brand name hook to net/minecraft/server/MinecraftServer::getServerModName -[19:08:13] [main/DEBUG] (FabricLoader/GamePatch) Patched 3 classs -[19:08:13] [main/DEBUG] (FabricLoader/Discovery) Mod discovery time: 36.2 ms -[19:08:13] [main/WARN] (FabricLoader/Resolution) Warnings were found! - - Mod 'Solstice Essentials' (solstice) 1.9.0 recommends any version of luckperms, which is missing! - - You should install any version of luckperms for the optimal experience. -[19:08:13] [main/DEBUG] (FabricLoader/Resolution) Mod resolution time: 74.0 ms -[19:08:13] [main/INFO] (FabricLoader) Loading 48 mods: - - cardinal-components-base 6.1.0 - - cardinal-components-entity 6.1.0 - - fabric-api 0.116.1+1.21.1 - - fabric-api-base 0.4.42+6573ed8c48 - - fabric-api-lookup-api-v1 1.6.71+b559734419 - - fabric-biome-api-v1 13.0.31+d527f9fd19 - - fabric-block-api-v1 1.1.0+0bc3503219 - - fabric-block-view-api-v2 1.0.11+ebb2264e19 - - fabric-command-api-v1 1.2.49+f71b366f19 - - fabric-command-api-v2 2.2.28+6ced4dd919 - - fabric-commands-v0 0.2.66+df3654b319 - - fabric-content-registries-v0 8.0.19+b559734419 - - fabric-convention-tags-v1 2.1.5+7f945d5b19 - - fabric-convention-tags-v2 2.11.1+a406e79519 - - fabric-crash-report-info-v1 0.2.29+0af3f5a719 - - fabric-data-attachment-api-v1 1.4.5+6116a37819 - - fabric-data-generation-api-v1 20.2.29+16c4ae2519 - - fabric-dimensions-v1 4.0.0+6fc22b9919 - - fabric-entity-events-v1 1.8.0+2b27e0a419 - - fabric-events-interaction-v0 0.7.13+ba9dae0619 - - fabric-game-rule-api-v1 1.0.53+6ced4dd919 - - fabric-gametest-api-v1 2.0.5+6fc22b9919 - - fabric-item-api-v1 11.1.1+d5debaed19 - - fabric-item-group-api-v1 4.1.7+def88e3a19 - - fabric-lifecycle-events-v1 2.6.0+0865547519 - - fabric-loot-api-v2 3.0.15+3f89f5a519 - - fabric-loot-api-v3 1.0.3+3f89f5a519 - - fabric-message-api-v1 6.0.14+8aaf3aca19 - - fabric-networking-api-v1 4.3.0+c7469b2119 - - fabric-object-builder-api-v1 15.2.1+40875a9319 - - fabric-particles-v1 4.0.2+6573ed8c19 - - fabric-recipe-api-v1 5.0.14+248df81c19 - - fabric-registry-sync-v0 5.2.0+34f5d91419 - - fabric-rendering-data-attachment-v1 0.3.49+73761d2e19 - - fabric-rendering-fluids-v1 3.1.6+1daea21519 - - fabric-resource-conditions-api-v1 4.3.0+8dc279b119 - - fabric-resource-loader-v0 1.3.1+5b5275af19 - - fabric-screen-handler-api-v1 1.3.88+b559734419 - - fabric-transfer-api-v1 5.4.3+c24bd99419 - - fabric-transitive-access-wideners-v1 6.2.0+45b9699719 - - fabricloader 0.16.14 - - java 21 - - minecraft 1.21.1 - - mixinextras 0.4.0 - - placeholder-api 2.4.2+1.21 - - sgui 1.9.1+1.21.1 - - solstice 1.9.0 - - trinkets 3.10.0 -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-loot-api-v2\3.0.15+3f89f5a519\fabric-loot-api-v2-3.0.15+3f89f5a519.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-entity-events-v1\1.8.0+2b27e0a419\fabric-entity-events-v1-1.8.0+2b27e0a419.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-object-builder-api-v1\15.2.1+40875a9319\fabric-object-builder-api-v1-15.2.1+40875a9319.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.github.llamalad7\mixinextras-fabric\0.4.0\37e5d2590769ab4e465dd140f8f1efe42f5fda9e\mixinextras-fabric-0.4.0.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-command-api-v1\1.2.49+f71b366f19\fabric-command-api-v1-1.2.49+f71b366f19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-message-api-v1\6.0.14+8aaf3aca19\fabric-message-api-v1-6.0.14+8aaf3aca19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-resource-conditions-api-v1\4.3.0+8dc279b119\fabric-resource-conditions-api-v1-4.3.0+8dc279b119.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-convention-tags-v2\2.11.1+a406e79519\fabric-convention-tags-v2-2.11.1+a406e79519.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-particles-v1\4.0.2+6573ed8c19\fabric-particles-v1-4.0.2+6573ed8c19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api\0.116.1+1.21.1\fabric-api-0.116.1+1.21.1.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-screen-handler-api-v1\1.3.88+b559734419\fabric-screen-handler-api-v1-1.3.88+b559734419.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-gametest-api-v1\2.0.5+6fc22b9919\fabric-gametest-api-v1-2.0.5+6fc22b9919.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-resource-loader-v0\1.3.1+5b5275af19\fabric-resource-loader-v0-1.3.1+5b5275af19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-recipe-api-v1\5.0.14+248df81c19\fabric-recipe-api-v1-5.0.14+248df81c19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-content-registries-v0\8.0.19+b559734419\fabric-content-registries-v0-8.0.19+b559734419.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-data-attachment-api-v1\1.4.5+6116a37819\fabric-data-attachment-api-v1-1.4.5+6116a37819.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-events-interaction-v0\0.7.13+ba9dae0619\fabric-events-interaction-v0-0.7.13+ba9dae0619.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\dev\emi\trinkets\3.10.0\trinkets-3.10.0.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-block-api-v1\1.1.0+0bc3503219\fabric-block-api-v1-1.1.0+0bc3503219.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-item-api-v1\11.1.1+d5debaed19\fabric-item-api-v1-11.1.1+d5debaed19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-transfer-api-v1\5.4.3+c24bd99419\fabric-transfer-api-v1-5.4.3+c24bd99419.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-loot-api-v3\1.0.3+3f89f5a519\fabric-loot-api-v3-1.0.3+3f89f5a519.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-transitive-access-wideners-v1\6.2.0+45b9699719\fabric-transitive-access-wideners-v1-6.2.0+45b9699719.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-convention-tags-v1\2.1.5+7f945d5b19\fabric-convention-tags-v1-2.1.5+7f945d5b19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-block-view-api-v2\1.0.11+ebb2264e19\fabric-block-view-api-v2-1.0.11+ebb2264e19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api-base\0.4.42+6573ed8c48\fabric-api-base-0.4.42+6573ed8c48.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api-lookup-api-v1\1.6.71+b559734419\fabric-api-lookup-api-v1-1.6.71+b559734419.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-item-group-api-v1\4.1.7+def88e3a19\fabric-item-group-api-v1-4.1.7+def88e3a19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-data-attachment-v1\0.3.49+73761d2e19\fabric-rendering-data-attachment-v1-0.3.49+73761d2e19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-lifecycle-events-v1\2.6.0+0865547519\fabric-lifecycle-events-v1-2.6.0+0865547519.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-commands-v0\0.2.66+df3654b319\fabric-commands-v0-0.2.66+df3654b319.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\org\ladysnake\cardinal-components-api\cardinal-components-base\6.1.0\cardinal-components-base-6.1.0.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\eu\pb4\sgui-fabric\1.9.1+1.21.1\sgui-fabric-1.9.1+1.21.1-fabric.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\eu\pb4\placeholder-api\2.4.2+1.21\placeholder-api-2.4.2+1.21.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-biome-api-v1\13.0.31+d527f9fd19\fabric-biome-api-v1-13.0.31+d527f9fd19.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-command-api-v2\2.2.28+6ced4dd919\fabric-command-api-v2-2.2.28+6ced4dd919.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-fluids-v1\3.1.6+1daea21519\fabric-rendering-fluids-v1-3.1.6+1daea21519.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-networking-api-v1\4.3.0+c7469b2119\fabric-networking-api-v1-4.3.0+c7469b2119.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-crash-report-info-v1\0.2.29+0af3f5a719\fabric-crash-report-info-v1-0.2.29+0af3f5a719.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-game-rule-api-v1\1.0.53+6ced4dd919\fabric-game-rule-api-v1-1.0.53+6ced4dd919.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\fabric\build\resources\main to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\org\ladysnake\cardinal-components-api\cardinal-components-entity\6.1.0\cardinal-components-entity-6.1.0.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-registry-sync-v0\5.2.0+34f5d91419\fabric-registry-sync-v0-5.2.0+34f5d91419.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-dimensions-v1\4.0.0+6fc22b9919\fabric-dimensions-v1-4.0.0+6fc22b9919.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-data-generation-api-v1\20.2.29+16c4ae2519\fabric-data-generation-api-v1-20.2.29+16c4ae2519.jar to classpath. -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.loot.v2.LootInitializer for mod fabric-loot-api-v2 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.command.v1.LegacyHandler for mod fabric-command-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.resource.conditions.ResourceConditionsImpl for mod fabric-resource-conditions-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.tag.convention.v2.TranslationConventionLogWarnings for mod fabric-convention-tags-v2 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.screenhandler.client.ClientNetworking for mod fabric-screen-handler-api-v1 (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.screenhandler.Networking for mod fabric-screen-handler-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.gametest.FabricGameTestModInitializer for mod fabric-gametest-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.recipe.ingredient.client.CustomIngredientSyncClient for mod fabric-recipe-api-v1 (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.recipe.ingredient.CustomIngredientInit for mod fabric-recipe-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.recipe.ingredient.CustomIngredientSync for mod fabric-recipe-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.attachment.client.AttachmentSyncClient for mod fabric-data-attachment-api-v1 (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.attachment.AttachmentEntrypoint for mod fabric-data-attachment-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.attachment.sync.AttachmentSync for mod fabric-data-attachment-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.event.interaction.client.InteractionEventsRouterClient for mod fabric-events-interaction-v0 (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.event.interaction.InteractionEventsRouter for mod fabric-events-interaction-v0 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.compat.TrinketsEmiPlugin for mod trinkets (key emi) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.compat.TrinketsREIPlugin for mod trinkets (key rei_client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.TrinketsClient for mod trinkets (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.TrinketsMain for mod trinkets (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer dev.emi.trinkets.TrinketsMain for mod trinkets (key cardinal-components-entity) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.tag.convention.ConventionLogWarnings for mod fabric-convention-tags-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.lookup.ApiLookupImpl for mod fabric-api-lookup-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.client.event.lifecycle.ClientLifecycleEventsImpl for mod fabric-lifecycle-events-v1 (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.event.lifecycle.LifecycleEventsImpl for mod fabric-lifecycle-events-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer org.ladysnake.cca.internal.base.ComponentsInternals::init for mod cardinal-components-base (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.networking.client.ClientNetworkingImpl::clientInit for mod fabric-networking-api-v1 (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.networking.CommonPacketsImpl::init for mod fabric-networking-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.networking.NetworkingImpl::init for mod fabric-networking-api-v1 (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer me.alexdevs.solstice.fabric.SolsticeFabric for mod solstice (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer org.ladysnake.cca.internal.entity.CcaEntityClient::initClient for mod cardinal-components-entity (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer org.ladysnake.cca.internal.entity.CardinalComponentsEntity::init for mod cardinal-components-entity (key main) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.client.registry.sync.FabricRegistryClientInit for mod fabric-registry-sync-v0 (key client) -[19:08:13] [main/DEBUG] (FabricLoader/Entrypoint) Registering new-style initializer net.fabricmc.fabric.impl.registry.sync.FabricRegistryInit for mod fabric-registry-sync-v0 (key main) -[19:08:14] [main/INFO] (FabricLoader/Mixin) SpongePowered MIXIN Subsystem Version=0.8.7 Source=file:/F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.15.0+mixin.0.8.7/2ce1c5d57a061f3e259ec30b8b0cb2dc889c5156/sponge-mixin-0.15.0+mixin.0.8.7.jar Service=Knot/Fabric Env=SERVER -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Initialising Mixin Platform Manager -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Adding mixin platform agents for container ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Instancing new MixinPlatformAgentDefault for ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) MixinPlatformAgentDefault accepted container ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Instancing new MixinPlatformAgentDefault for ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) MixinPlatformAgentDefault accepted container ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar)] -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:ContainerHandleURI(file:///F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/fabric-loader/0.16.14/5778d47f536bf2c63ed2abc1a56f5a1c129e34a/fabric-loader-0.16.14.jar)] -[19:08:14] [main/DEBUG] (FabricLoader/Mappings) Loading mappings took 157 ms -[19:08:14] [main/INFO] (FabricLoader/Mixin) Loaded Fabric development mappings for mixin remapper! -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-loot-api-v2.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_17 -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-loot-api-v2.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-entity-events-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-object-builder-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-message-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-resource-conditions-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-convention-tags-api-v2.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-screen-handler-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-gametest-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-resource-loader-v0.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-recipe-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-content-registries-v0.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-data-attachment-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-events-interaction-v0.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config trinkets.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-block-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-item-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-transfer-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-loot-api-v3.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-block-view-api-v2.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-api-lookup-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-item-group-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_21 specified by fabric-rendering-data-attachment-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_21 -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-rendering-data-attachment-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-lifecycle-events-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-lifecycle-events-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-biome-api-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-biome-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-command-api-v2.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-command-api-v2.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-networking-api-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-networking-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-crash-report-info-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-crash-report-info-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-game-rule-api-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-game-rule-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-registry-sync-v0.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-registry-sync-v0.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-dimensions-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-dimensions-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Compatibility level JAVA_17 specified by fabric-data-generation-api-v1.mixins.json is higher than the maximum level supported by this version of mixin (JAVA_13). -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Mixin config fabric-data-generation-api-v1.mixins.json does not specify "minVersion" or "requiredFeatures" property -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\minecraftMaven\net\minecraft\minecraft-merged-9beed7dc48\1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2\minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\fabric\build\classes\java\main to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\fabric\build\resources\main to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\fabric-loom\1.21.1\loom.mappings.1_21_1.layered+hash.730628366-v2\mappings.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.spongepowered\configurate-hocon\4.2.0\de6f890d9b7eaf2e8bb68866dd19c1d719835\configurate-hocon-4.2.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.spongepowered\configurate-gson\4.2.0\8bc56bc3d77e45b66324be9dbf1fc688bf528969\configurate-gson-4.2.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.spongepowered\configurate-core\4.2.0\7b322107fae38a6b8d30690b6b512696c49d9d66\configurate-core-4.2.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.typesafe\config\1.4.3\b57e0fbdc7270d8ea59c1ba367457a5cc7ba0e98\config-1.4.3.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.leangen.geantyref\geantyref\1.3.16\177fe050a1ecc6f121bd3ffa511f2f5ce9099f00\geantyref-1.3.16.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.github.llamalad7\mixinextras-fabric\0.4.0\37e5d2590769ab4e465dd140f8f1efe42f5fda9e\mixinextras-fabric-0.4.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.fabricmc\dev-launch-injector\0.2.1+build.8\da8bef7e6e2f952da707f282bdb46882a0fce5e3\dev-launch-injector-0.2.1+build.8.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.github.oshi\oshi-core\6.4.10\b1d8ab82d11d92fd639b56d639f8f46f739dd5fa\oshi-core-6.4.10.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.google.guava\failureaccess\1.0.1\1dcf1de382a0bf95a3d8b0849546c88bac1292c9\failureaccess-1.0.1.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\32.1.2-jre\5e64ec7e056456bef3a4bc4c6fdaef71e8ab6318\guava-32.1.2-jre.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.mojang\brigadier\1.3.10\d15b53a14cf20fdcaa98f731af5dda654452c010\brigadier-1.3.10.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\com.mojang\datafixerupper\8.0.16\67d4de6d7f95d89bcf5862995fb854ebaec02a34\datafixerupper-8.0.16.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\commons-io\commons-io\2.15.1\f11560da189ab563a5c8e351941415430e9304ea\commons-io-2.15.1.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-buffer\4.1.97.Final\f8f3d8644afa5e6e1a40a3a6aeb9d9aa970ecb4f\netty-buffer-4.1.97.Final.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-codec\4.1.97.Final\384ba4d75670befbedb45c4d3b497a93639c206d\netty-codec-4.1.97.Final.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-common\4.1.97.Final\7cceacaf11df8dc63f23d0fb58e9d4640fc88404\netty-common-4.1.97.Final.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-handler\4.1.97.Final\abb86c6906bf512bf2b797a41cd7d2e8d3cd7c36\netty-handler-4.1.97.Final.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-resolver\4.1.97.Final\cec8348108dc76c47cf87c669d514be52c922144\netty-resolver-4.1.97.Final.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport-classes-epoll\4.1.97.Final\795da37ded759e862457a82d9d92c4d39ce8ecee\netty-transport-classes-epoll-4.1.97.Final.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport-native-unix-common\4.1.97.Final\d469d84265ab70095b01b40886cabdd433b6e664\netty-transport-native-unix-common-4.1.97.Final.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport\4.1.97.Final\f37380d23c9bb079bc702910833b2fd532c9abd0\netty-transport-4.1.97.Final.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\it.unimi.dsi\fastutil\8.5.12\c24946d46824bd528054bface3231d2ecb7e95e8\fastutil-8.5.12.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.java.dev.jna\jna-platform\5.14.0\28934d48aed814f11e4c584da55c49fa7032b31b\jna-platform-5.14.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.java.dev.jna\jna\5.14.0\67bf3eaea4f0718cb376a181a629e5f88fa1c9dd\jna-5.14.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.sf.jopt-simple\jopt-simple\5.0.4\4fdac2fbe92dfad86aa6e9301736f6b4342a3f5c\jopt-simple-5.0.4.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-lang3\3.14.0\1ed471194b02f2c6cb734a0cd6f6f107c673afae\commons-lang3-3.14.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.joml\joml\1.10.5\22566d58af70ad3d72308bab63b8339906deb649\joml-1.10.5.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.3.3\81091b006dbb43fab04c8c638e9ac87c51b4096d\lwjgl-freetype-3.3.3-natives-windows.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.3.3\82028265a0a2ff33523ca75137ada7dc176e5210\lwjgl-freetype-3.3.3-natives-windows-arm64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.3.3\15a8c1de7f51d07a92eae7ce1222557073a0c0c3\lwjgl-freetype-3.3.3-natives-windows-x86.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\e449e28b4891fc423c54c85fbc5bb0b9efece67a\lwjgl-glfw-3.3.3-natives-windows.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\f27018dc74f6289574502b46cce55d52817554e2\lwjgl-glfw-3.3.3-natives-windows-arm64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\32334f3fd5270a59bad9939a93115acb6de36dcf\lwjgl-glfw-3.3.3-natives-windows-x86.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.3\426222fc027602a5f21b9c0fe79cde6a4c7a011f\lwjgl-jemalloc-3.3.3-natives-windows.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.3\ba1f3fed0ee4be0217eaa41c5bbfb4b9b1383c33\lwjgl-jemalloc-3.3.3-natives-windows-arm64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.3\f6063b6e0f23be483c5c88d84ce51b39dc69126c\lwjgl-jemalloc-3.3.3-natives-windows-x86.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.3\cf83862ae95d98496b26915024c7e666d8ab1c8f\lwjgl-openal-3.3.3-natives-windows.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.3\8e0615235116b9e4160dfe87bec90f5f6378bf72\lwjgl-openal-3.3.3-natives-windows-arm64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.3\87b8d5050e3adb46bb58fe1cb2669a4a48fce10d\lwjgl-openal-3.3.3-natives-windows-x86.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.3\e6c1eec8be8a71951b830a4d69efc01c6531900c\lwjgl-opengl-3.3.3-natives-windows.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.3\65e956d3735a1abdc82eff4baec1b61174697d4b\lwjgl-opengl-3.3.3-natives-windows-arm64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.3\d32d833dcaa2f355a886eaf21f0408b5f03241d\lwjgl-opengl-3.3.3-natives-windows-x86.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.3\1d9facdf6541de114b0f963be33505b7679c78cb\lwjgl-stb-3.3.3-natives-windows.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.3\a584ab44de569708871f0a79561f4d8c37487f2c\lwjgl-stb-3.3.3-natives-windows-arm64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.3\b5c874687b9aac1a936501d4ed2c49567fd1b575\lwjgl-stb-3.3.3-natives-windows-x86.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.3\a6697981b0449a5087c1d546fc08b4f73e8f98c9\lwjgl-tinyfd-3.3.3-natives-windows.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.3\a88c494f3006eb91a7433b12a3a55a9a6c20788b\lwjgl-tinyfd-3.3.3-natives-windows-arm64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.3\c336c84ee88cccb495c6ffa112395509e7378e8a\lwjgl-tinyfd-3.3.3-natives-windows-x86.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.3\a5ed18a2b82fc91b81f40d717cb1f64c9dcb0540\lwjgl-3.3.3-natives-windows.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.3\e9aca8c5479b520a2a7f0d542a118140e812c5e8\lwjgl-3.3.3-natives-windows-arm64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.3\9e670718e050aeaeea0c2d5b907cffb142f2e58f\lwjgl-3.3.3-natives-windows-x86.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.lz4\lz4-java\1.8.0\4b986a99445e49ea5fbf5d149c4b63f6ed6c6780\lz4-java-1.8.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport-native-epoll\4.1.97.Final\54188f271e388e7f313aea995e82f58ce2cdb809\netty-transport-native-epoll-4.1.97.Final-linux-x86_64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\io.netty\netty-transport-native-epoll\4.1.97.Final\5514744c588190ffda076b35a9b8c9f24946a960\netty-transport-native-epoll-4.1.97.Final-linux-aarch_64.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.luckperms\api\5.4\7b07573b0c9f06a1e5ddfc6b0042d04759d0ba8a\api-5.4.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\eu\pb4\sgui-fabric\1.9.1+1.21.1\sgui-fabric-1.9.1+1.21.1-fabric.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api\0.116.1+1.21.1\fabric-api-0.116.1+1.21.1.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\eu\pb4\placeholder-api\2.4.2+1.21\placeholder-api-2.4.2+1.21.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-transfer-api-v1\5.4.3+c24bd99419\fabric-transfer-api-v1-5.4.3+c24bd99419.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api-lookup-api-v1\1.6.71+b559734419\fabric-api-lookup-api-v1-1.6.71+b559734419.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-blockrenderlayer-v1\1.1.52+0af3f5a719\fabric-blockrenderlayer-v1-1.1.52+0af3f5a719.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-client-tags-api-v1\1.1.15+6573ed8c19\fabric-client-tags-api-v1-1.1.15+6573ed8c19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-command-api-v1\1.2.49+f71b366f19\fabric-command-api-v1-1.2.49+f71b366f19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-commands-v0\0.2.66+df3654b319\fabric-commands-v0-0.2.66+df3654b319.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-command-api-v2\2.2.28+6ced4dd919\fabric-command-api-v2-2.2.28+6ced4dd919.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-content-registries-v0\8.0.19+b559734419\fabric-content-registries-v0-8.0.19+b559734419.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-data-generation-api-v1\20.2.29+16c4ae2519\fabric-data-generation-api-v1-20.2.29+16c4ae2519.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-convention-tags-v1\2.1.5+7f945d5b19\fabric-convention-tags-v1-2.1.5+7f945d5b19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-convention-tags-v2\2.11.1+a406e79519\fabric-convention-tags-v2-2.11.1+a406e79519.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-data-attachment-api-v1\1.4.5+6116a37819\fabric-data-attachment-api-v1-1.4.5+6116a37819.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-entity-events-v1\1.8.0+2b27e0a419\fabric-entity-events-v1-1.8.0+2b27e0a419.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-events-interaction-v0\0.7.13+ba9dae0619\fabric-events-interaction-v0-0.7.13+ba9dae0619.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-gametest-api-v1\2.0.5+6fc22b9919\fabric-gametest-api-v1-2.0.5+6fc22b9919.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-item-api-v1\11.1.1+d5debaed19\fabric-item-api-v1-11.1.1+d5debaed19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-item-group-api-v1\4.1.7+def88e3a19\fabric-item-group-api-v1-4.1.7+def88e3a19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-lifecycle-events-v1\2.6.0+0865547519\fabric-lifecycle-events-v1-2.6.0+0865547519.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-loot-api-v2\3.0.15+3f89f5a519\fabric-loot-api-v2-3.0.15+3f89f5a519.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-loot-api-v3\1.0.3+3f89f5a519\fabric-loot-api-v3-1.0.3+3f89f5a519.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-message-api-v1\6.0.14+8aaf3aca19\fabric-message-api-v1-6.0.14+8aaf3aca19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-model-loading-api-v1\2.0.0+fe474d6b19\fabric-model-loading-api-v1-2.0.0+fe474d6b19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-recipe-api-v1\5.0.14+248df81c19\fabric-recipe-api-v1-5.0.14+248df81c19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-screen-handler-api-v1\1.3.88+b559734419\fabric-screen-handler-api-v1-1.3.88+b559734419.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-registry-sync-v0\5.2.0+34f5d91419\fabric-registry-sync-v0-5.2.0+34f5d91419.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-networking-api-v1\4.3.0+c7469b2119\fabric-networking-api-v1-4.3.0+c7469b2119.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-object-builder-api-v1\15.2.1+40875a9319\fabric-object-builder-api-v1-15.2.1+40875a9319.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-particles-v1\4.0.2+6573ed8c19\fabric-particles-v1-4.0.2+6573ed8c19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-renderer-indigo\1.7.0+c705a49c19\fabric-renderer-indigo-1.7.0+c705a49c19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-renderer-api-v1\3.4.0+c705a49c19\fabric-renderer-api-v1-3.4.0+c705a49c19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-fluids-v1\3.1.6+1daea21519\fabric-rendering-fluids-v1-3.1.6+1daea21519.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-renderer-registries-v1\3.2.68+df3654b319\fabric-renderer-registries-v1-3.2.68+df3654b319.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-v0\1.1.71+df3654b319\fabric-rendering-v0-1.1.71+df3654b319.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-v1\5.0.5+df16efd019\fabric-rendering-v1-5.0.5+df16efd019.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-screen-api-v1\2.0.25+8b68f1c719\fabric-screen-api-v1-2.0.25+8b68f1c719.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-api-base\0.4.42+6573ed8c48\fabric-api-base-0.4.42+6573ed8c48.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-biome-api-v1\13.0.31+d527f9fd19\fabric-biome-api-v1-13.0.31+d527f9fd19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-block-api-v1\1.1.0+0bc3503219\fabric-block-api-v1-1.1.0+0bc3503219.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-rendering-data-attachment-v1\0.3.49+73761d2e19\fabric-rendering-data-attachment-v1-0.3.49+73761d2e19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-block-view-api-v2\1.0.11+ebb2264e19\fabric-block-view-api-v2-1.0.11+ebb2264e19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-crash-report-info-v1\0.2.29+0af3f5a719\fabric-crash-report-info-v1-0.2.29+0af3f5a719.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-dimensions-v1\4.0.0+6fc22b9919\fabric-dimensions-v1-4.0.0+6fc22b9919.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-game-rule-api-v1\1.0.53+6ced4dd919\fabric-game-rule-api-v1-1.0.53+6ced4dd919.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-keybindings-v0\0.2.45+df3654b319\fabric-keybindings-v0-0.2.45+df3654b319.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-key-binding-api-v1\1.0.47+0af3f5a719\fabric-key-binding-api-v1-1.0.47+0af3f5a719.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-resource-conditions-api-v1\4.3.0+8dc279b119\fabric-resource-conditions-api-v1-4.3.0+8dc279b119.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-resource-loader-v0\1.3.1+5b5275af19\fabric-resource-loader-v0-1.3.1+5b5275af19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-sound-api-v1\1.0.23+6573ed8c19\fabric-sound-api-v1-1.0.23+6573ed8c19.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\net\fabricmc\fabric-api\fabric-transitive-access-wideners-v1\6.2.0+45b9699719\fabric-transitive-access-wideners-v1-6.2.0+45b9699719.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\dev\emi\trinkets\3.10.0\trinkets-3.10.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\org\ladysnake\cardinal-components-api\cardinal-components-entity\6.1.0\cardinal-components-entity-6.1.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\Source\Solstice\.gradle\loom-cache\remapped_mods\loom_mappings_1_21_1_layered_hash_730628366_v2\org\ladysnake\cardinal-components-api\cardinal-components-base\6.1.0\cardinal-components-base-6.1.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\net.kyori\option\1.1.0\593fecb9c42688eebc7d8da5d6ea127f4d4c92a2\option-1.1.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.jline\jline-reader\3.20.0\8f15415b022a25b473e8e16c28ae913186ffb9c4\jline-reader-3.20.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Knot) Adding F:\.gradle\caches\modules-2\files-2.1\org.jline\jline-terminal\3.20.0\d0ddcc708ddf527a3454c941b7b9225cc83a15ff\jline-terminal-3.20.0.jar to classpath. -[19:08:14] [main/DEBUG] (FabricLoader/Entrypoint) No subscribers for entrypoint 'preLaunch' -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing mixins for MixinEnvironment[DEFAULT] -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-loot-api-v2.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-loot-api-v2-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-entity-events-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-entity-events-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-object-builder-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-object-builder-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config mixinextras.init.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/MixinExtras|Service) com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.0) is taking over from null -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @Inject with org.spongepowered.asm.mixin.injection.struct.CallbackInjectionInfo -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @ModifyArg with org.spongepowered.asm.mixin.injection.struct.ModifyArgInjectionInfo -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @ModifyArgs with org.spongepowered.asm.mixin.injection.struct.ModifyArgsInjectionInfo -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @Redirect with org.spongepowered.asm.mixin.injection.struct.RedirectInjectionInfo -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @ModifyVariable with org.spongepowered.asm.mixin.injection.struct.ModifyVariableInjectionInfo -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @ModifyConstant with org.spongepowered.asm.mixin.injection.struct.ModifyConstantInjectionInfo -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-message-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-message-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-resource-conditions-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-resource-conditions-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-convention-tags-api-v2.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-convention-tags-v2-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-screen-handler-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-screen-handler-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-gametest-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-gametest-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-resource-loader-v0.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-resource-loader-v0-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-recipe-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-recipe-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-content-registries-v0.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-content-registries-v0-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-data-attachment-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-data-attachment-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-events-interaction-v0.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-events-interaction-v0-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config trinkets.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap trinkets-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-block-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-block-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-item-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-item-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-transfer-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-transfer-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-loot-api-v3.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-loot-api-v3-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-block-view-api-v2.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-block-view-api-v2-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-api-lookup-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-api-lookup-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-item-group-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-item-group-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-rendering-data-attachment-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-rendering-data-attachment-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-lifecycle-events-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-lifecycle-events-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config mixins.cardinal_components_base.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap cardinal-components-base-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config sgui.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap sgui-fabric-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-biome-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-biome-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-command-api-v2.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-command-api-v2-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-networking-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-networking-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-crash-report-info-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-crash-report-info-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-game-rule-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-game-rule-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config solstice.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config mixins.cardinal_components_entity.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap cardinal-components-entity-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-registry-sync-v0.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-registry-sync-v0-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-dimensions-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-dimensions-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Selecting config fabric-data-generation-api-v1.mixins.json -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Remapping refMap fabric-data-generation-api-v1-refmap.json using remapper chain -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-loot-api-v2.mixins.json (2) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-entity-events-v1.mixins.json (12) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-object-builder-v1.mixins.json (11) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing mixinextras.init.mixins.json (0) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-message-api-v1.mixins.json (2) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-resource-conditions-api-v1.mixins.json (10) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-convention-tags-api-v2.mixins.json (1) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-screen-handler-api-v1.mixins.json (2) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-gametest-api-v1.mixins.json (8) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-resource-loader-v0.mixins.json (14) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-recipe-api-v1.mixins.json (4) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-content-registries-v0.mixins.json (13) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-data-attachment-api-v1.mixins.json (15) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-events-interaction-v0.mixins.json (4) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/server/network/ServerGamePacketListenerImpl$1 is public in fabric-events-interaction-v0.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-events-interaction-v0 and should be specified in value -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing trinkets.mixins.json (17) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-block-api-v1.mixins.json (5) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/world/level/chunk/LevelChunkSection$1BlockCounter is public in fabric-block-api-v1.mixins.json:ChunkSectionBlockStateCounterMixin from mod fabric-block-api-v1 and should be specified in value -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-item-api-v1.mixins.json (16) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-transfer-api-v1.mixins.json (15) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-loot-api-v3.mixins.json (6) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-block-view-api-v2.mixins.json (3) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-api-lookup-api-v1.mixins.json (2) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-item-group-api-v1.mixins.json (3) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-rendering-data-attachment-v1.mixins.json (2) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-lifecycle-events-v1.mixins.json (11) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/server/level/ServerLevel$EntityCallbacks is public in fabric-lifecycle-events-v1.mixins.json:ServerWorldServerEntityHandlerMixin from mod fabric-lifecycle-events-v1 and should be specified in value -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing mixins.cardinal_components_base.json (1) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing sgui.mixins.json (6) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-biome-api-v1.mixins.json (9) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/world/level/biome/MultiNoiseBiomeSourceParameterList$Preset$1 is public in fabric-biome-api-v1.mixins.json:NetherBiomePresetMixin from mod fabric-biome-api-v1 and should be specified in value -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-command-api-v2.mixins.json (5) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-networking-api-v1.mixins.json (18) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/network/protocol/common/custom/CustomPacketPayload$1 is public in fabric-networking-api-v1.mixins.json:CustomPayloadPacketCodecMixin from mod fabric-networking-api-v1 and should be specified in value -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/server/level/ChunkMap$TrackedEntity is public in fabric-networking-api-v1.mixins.json:accessor.EntityTrackerAccessor from mod fabric-networking-api-v1 and should be specified in value -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-crash-report-info-v1.mixins.json (1) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-game-rule-api-v1.mixins.json (6) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) @Mixin target net/minecraft/server/commands/GameRuleCommand$1 is public in fabric-game-rule-api-v1.mixins.json:GameRuleCommandVisitorMixin from mod fabric-game-rule-api-v1 and should be specified in value -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing solstice.mixins.json (23) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing mixins.cardinal_components_entity.json (7) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-registry-sync-v0.mixins.json (14) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-dimensions-v1.mixins.json (4) -[19:08:14] [main/DEBUG] (FabricLoader/Mixin) Preparing fabric-data-generation-api-v1.mixins.json (7) -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Inner class net/fabricmc/fabric/mixin/transfer/ChiseledBookshelfBlockEntityMixin$1 in net/fabricmc/fabric/mixin/transfer/ChiseledBookshelfBlockEntityMixin on net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity gets unique name net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity$Anonymous$28373269ae304d9b9b0a862ca0793b7f -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Inner class net/fabricmc/fabric/mixin/itemgroup/ItemGroupsMixin$1ItemGroupPosition in net/fabricmc/fabric/mixin/itemgroup/ItemGroupsMixin on net/minecraft/world/item/CreativeModeTabs gets unique name net/minecraft/world/item/CreativeModeTabs$1ItemGroupPosition$f7ce9f9d67974a18b62b763e2d30b675 -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Prepared 269 mixins in 0.558 sec (2.1ms avg) (0ms load, 0ms transform, 0ms plugin) -[19:08:15] [main/INFO] (FabricLoader/MixinExtras|Service) Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.0). -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @SugarWrapper with com.llamalad7.mixinextras.sugar.impl.SugarWrapperInjectionInfo -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Registering new injector for @FactoryRedirectWrapper with com.llamalad7.mixinextras.wrapper.factory.FactoryRedirectWrapperInjectionInfo -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Mixing server.MainMixin from fabric-gametest-api-v1.mixins.json into net.minecraft.server.Main -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:server.MainMixin from mod fabric-gametest-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Mixing MainMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.server.Main -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:MainMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Mixing server.MainMixin from fabric-data-generation-api-v1.mixins.json into net.minecraft.server.Main -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-data-generation-api-v1.mixins.json:server.MainMixin from mod fabric-data-generation-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:server.MainMixin from mod fabric-gametest-api-v1->@Inject::main([Ljava/lang/String;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:server.MainMixin from mod fabric-gametest-api-v1->@Inject::exitOnError(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:MainMixin from mod fabric-registry-sync-v0->@Inject::afterModInit(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-data-generation-api-v1.mixins.json:server.MainMixin from mod fabric-data-generation-api-v1->@Inject::main([Ljava/lang/String;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:15] [main/DEBUG] (io.netty.util.internal.logging.InternalLoggerFactory) Using SLF4J as the default logging framework -[19:08:15] [main/DEBUG] (io.netty.util.ResourceLeakDetector) -Dio.netty.leakDetection.level: simple -[19:08:15] [main/DEBUG] (io.netty.util.ResourceLeakDetector) -Dio.netty.leakDetection.targetRecords: 4 -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Mixing SystemDetailsMixin from fabric-crash-report-info-v1.mixins.json into net.minecraft.SystemReport -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$appendMods$1(Lnet/fabricmc/loader/api/ModContainer;)Ljava/lang/String; to md50bf59$fabric-crash-report-info-v1$lambda$appendMods$1$0 in fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1 -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fillSystemDetails$0()Ljava/lang/String; to md50bf59$fabric-crash-report-info-v1$lambda$fillSystemDetails$0$1 in fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1 -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1->@Inject::fillSystemDetails(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1->@Inject::fillSystemDetails(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:15] [main/DEBUG] (FabricLoader/Mixin) fabric-crash-report-info-v1.mixins.json:SystemDetailsMixin from mod fabric-crash-report-info-v1->@Inject::fillSystemDetails(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing BootstrapMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.server.Bootstrap -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:BootstrapMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$initialize$1(Lnet/minecraft/world/level/material/Fluid;)Ljava/util/Collection; to md50bf59$fabric-registry-sync-v0$lambda$initialize$1$0 in fabric-registry-sync-v0.mixins.json:BootstrapMixin from mod fabric-registry-sync-v0 -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$initialize$0(Lnet/minecraft/world/level/block/Block;)Ljava/util/Collection; to md50bf59$fabric-registry-sync-v0$lambda$initialize$0$1 in fabric-registry-sync-v0.mixins.json:BootstrapMixin from mod fabric-registry-sync-v0 -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:BootstrapMixin from mod fabric-registry-sync-v0->@Inject::initialize(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing RegistriesMixin from fabric-item-api-v1.mixins.json into net.minecraft.core.registries.BuiltInRegistries -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RegistriesMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing RegistriesAccessor from fabric-registry-sync-v0.mixins.json into net.minecraft.core.registries.BuiltInRegistries -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:RegistriesAccessor from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getROOT()Lnet/minecraft/core/WritableRegistry; to getROOT$fabric-registry-sync-v0_$md$50bf59$0 in fabric-registry-sync-v0.mixins.json:RegistriesAccessor from mod fabric-registry-sync-v0 -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing RegistriesMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.core.registries.BuiltInRegistries -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:RegistriesMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RegistriesMixin from mod fabric-item-api-v1->@Inject::modifyDefaultItemComponents(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:RegistriesMixin from mod fabric-registry-sync-v0->@Inject::init(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing SimpleRegistryAccessor from fabric-registry-sync-v0.mixins.json into net.minecraft.core.MappedRegistry -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryAccessor from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing SimpleRegistryMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.core.MappedRegistry -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$3([Lnet/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback;)Lnet/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback; to md50bf59$fabric-registry-sync-v0$lambda$init$3$0 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$2([Lnet/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback;Lnet/fabricmc/fabric/api/event/registry/RegistryIdRemapCallback$RemapState;)V to md50bf59$fabric-registry-sync-v0$lambda$init$2$1 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$1([Lnet/fabricmc/fabric/api/event/registry/RegistryEntryAddedCallback;)Lnet/fabricmc/fabric/api/event/registry/RegistryEntryAddedCallback; to md50bf59$fabric-registry-sync-v0$lambda$init$1$2 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$0([Lnet/fabricmc/fabric/api/event/registry/RegistryEntryAddedCallback;ILnet/minecraft/resources/ResourceLocation;Ljava/lang/Object;)V to md50bf59$fabric-registry-sync-v0$lambda$init$0$3 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Renaming @Unique field LOGGERLorg/slf4j/Logger; to fd50bf59$fabric-registry-sync-v0$LOGGER$0 in fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0 -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0->@Inject::init(Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Lifecycle;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0->@Inject::init(Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Lifecycle;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0->@Inject::init(Lnet/minecraft/resources/ResourceKey;Lcom/mojang/serialization/Lifecycle;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:SimpleRegistryMixin from mod fabric-registry-sync-v0->@Inject::set(Lnet/minecraft/resources/ResourceKey;Ljava/lang/Object;Lnet/minecraft/core/RegistrationInfo;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) Mixing RegistryKeysMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.core.registries.Registries -[19:08:16] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:RegistryKeysMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ArgumentTypesMixin from fabric-gametest-api-v1.mixins.json into net.minecraft.commands.synchronization.ArgumentTypeInfos -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:ArgumentTypesMixin from mod fabric-gametest-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ArgumentTypesAccessor from fabric-command-api-v2.mixins.json into net.minecraft.commands.synchronization.ArgumentTypeInfos -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-command-api-v2.mixins.json:ArgumentTypesAccessor from mod fabric-command-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method fabric_getClassMap()Ljava/util/Map; to fabric_getClassMap$fabric-command-api-v2_$md$50bf59$0 in fabric-command-api-v2.mixins.json:ArgumentTypesAccessor from mod fabric-command-api-v2 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:ArgumentTypesMixin from mod fabric-gametest-api-v1->@Inject::register(Lnet/minecraft/core/Registry;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemGroupsMixin from fabric-item-group-api-v1.mixins.json into net.minecraft.world.item.CreativeModeTabs -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupsMixin from mod fabric-item-group-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$paginateGroups$0(Lnet/minecraft/core/Holder$Reference;Lnet/minecraft/core/Holder$Reference;)I to md50bf59$fabric-item-group-api-v1$lambda$paginateGroups$0$0 in fabric-item-group-api-v1.mixins.json:ItemGroupsMixin from mod fabric-item-group-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupsMixin from mod fabric-item-group-api-v1->@Inject::deferDuplicateCheck(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupsMixin from mod fabric-item-group-api-v1->@Inject::paginateGroups(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemGroupAccessor from fabric-item-group-api-v1.mixins.json into net.minecraft.world.item.CreativeModeTab -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupAccessor from mod fabric-item-group-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemGroupMixin from fabric-item-group-api-v1.mixins.json into net.minecraft.world.item.CreativeModeTab -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$getStacks$0(Lnet/minecraft/world/item/CreativeModeTab;)Ljava/lang/IllegalStateException; to md50bf59$fabric-item-group-api-v1$lambda$getStacks$0$0 in fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1->@Inject::getStacks(Lnet/minecraft/world/item/CreativeModeTab$ItemDisplayParameters;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1->@Inject::getStacks(Lnet/minecraft/world/item/CreativeModeTab$ItemDisplayParameters;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-group-api-v1.mixins.json:ItemGroupMixin from mod fabric-item-group-api-v1->@Inject::getStacks(Lnet/minecraft/world/item/CreativeModeTab$ItemDisplayParameters;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing FireBlockMixin from fabric-content-registries-v0.mixins.json into net.minecraft.world.level.block.FireBlock -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::afterConstruct(Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::afterConstruct(Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::afterConstruct(Lnet/minecraft/world/level/block/state/BlockBehaviour$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::getFabricBurnChance(Lnet/minecraft/world/level/block/state/BlockState;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:FireBlockMixin from mod fabric-content-registries-v0->@Inject::getFabricSpreadChance(Lnet/minecraft/world/level/block/state/BlockState;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockMixin from fabric-block-api-v1.mixins.json into net.minecraft.world.level.block.Block -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-api-v1.mixins.json:BlockMixin from mod fabric-block-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractBlockAccessor from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.state.BlockBehaviour -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:AbstractBlockAccessor from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockViewMixin from fabric-block-view-api-v2.mixins.json into net.minecraft.world.level.BlockGetter -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-view-api-v2.mixins.json:BlockViewMixin from mod fabric-block-view-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing EntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.Entity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing AttachmentTargetsMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.entity.Entity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_readAttachmentsFromNbt$0(Lnet/minecraft/core/HolderLookup$Provider;Lnet/fabricmc/fabric/api/attachment/v1/AttachmentType;Ljava/lang/Object;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_readAttachmentsFromNbt$0$0 in fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing EntityMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.entity.Entity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_syncChange$0(Lnet/fabricmc/fabric/api/attachment/v1/AttachmentSyncPredicate;Lnet/fabricmc/fabric/impl/attachment/sync/s2c/AttachmentSyncPayloadS2C;Lnet/minecraft/server/level/ServerPlayer;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_syncChange$0$1 in fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing common.MixinEntity from mixins.cardinal_components_entity.json into net.minecraft.world.entity.Entity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/world/level/portal/DimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/world/level/portal/DimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterEntityTeleportedToWorld(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FLnet/minecraft/world/entity/Entity;)V doesn't use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterEntityTeleportedToWorld(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FLnet/minecraft/world/entity/Entity;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:EntityMixin from mod fabric-entity-events-v1->@Inject::afterEntityTeleportedToWorld(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FLnet/minecraft/world/entity/Entity;)V won't be passed a CallbackInfoReturnable as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::readEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::readEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::readEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::writeEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::writeEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:EntityMixin from mod fabric-data-attachment-api-v1->@Inject::writeEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::initDataTracker(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::initDataTracker(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::initDataTracker(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::toTag(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::fromTag(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::fromTag(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinEntity from mod cardinal-components-entity->@Inject::fromTag(Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing PlayerEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.player.Player -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:PlayerEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing elytra.PlayerEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.player.Player -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:elytra.PlayerEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing events.PlayerMixin from solstice.mixins.json into net.minecraft.world.entity.player.Player -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.customname.CustomDisplayNameMixin from solstice.mixins.json into net.minecraft.world.entity.player.Player -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:PlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onTrySleep(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:PlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onIsSleepingLongEnough(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:elytra.PlayerEntityMixin from mod fabric-entity-events-v1->@Inject::injectElytraCheck(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.PlayerMixin from mod solstice->@Inject::onIsSleepingLongEnough(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.customname.CustomDisplayNameMixin from mod solstice->@Inject::solstice$getDisplayName(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.LivingEntity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing elytra.LivingEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.LivingEntity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:elytra.LivingEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from trinkets.mixins.json into net.minecraft.world.entity.LivingEntity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$6(Lnet/minecraft/world/entity/LivingEntity;Ldev/emi/trinkets/api/TrinketComponent;)V to md50bf59$trinkets$lambda$tick$6$0 in trinkets.mixins.json:LivingEntityMixin from mod trinkets -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$5(Lnet/minecraft/world/entity/LivingEntity;Ljava/util/Map;Ldev/emi/trinkets/api/TrinketComponent;Ljava/util/Map;Ldev/emi/trinkets/api/SlotReference;Lnet/minecraft/world/item/ItemStack;)V to md50bf59$trinkets$lambda$tick$5$1 in trinkets.mixins.json:LivingEntityMixin from mod trinkets -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$4(Lnet/minecraft/core/Holder;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)V to md50bf59$trinkets$lambda$tick$4$2 in trinkets.mixins.json:LivingEntityMixin from mod trinkets -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$3(Lnet/minecraft/core/Holder;Ljava/util/Collection;)V to md50bf59$trinkets$lambda$tick$3$3 in trinkets.mixins.json:LivingEntityMixin from mod trinkets -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$tick$2(Lnet/minecraft/world/entity/ai/attributes/AttributeInstance;Lnet/minecraft/world/entity/ai/attributes/AttributeModifier;)V to md50bf59$trinkets$lambda$tick$2$4 in trinkets.mixins.json:LivingEntityMixin from mod trinkets -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$dropInventory$1(Lnet/minecraft/world/entity/LivingEntity;ZLdev/emi/trinkets/api/TrinketComponent;)V to md50bf59$trinkets$lambda$dropInventory$1$5 in trinkets.mixins.json:LivingEntityMixin from mod trinkets -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$dropInventory$0(Lnet/minecraft/world/entity/LivingEntity;ZLdev/emi/trinkets/api/SlotReference;Lnet/minecraft/world/item/ItemStack;)V to md50bf59$trinkets$lambda$dropInventory$0$6 in trinkets.mixins.json:LivingEntityMixin from mod trinkets -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from fabric-block-api-v1.mixins.json into net.minecraft.world.entity.LivingEntity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-api-v1.mixins.json:LivingEntityMixin from mod fabric-block-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.entity.LivingEntity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:LivingEntityMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing LivingEntityMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.world.entity.LivingEntity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:LivingEntityMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing events.LivingEntityMixin from solstice.mixins.json into net.minecraft.world.entity.LivingEntity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.miscellaneous.BypassSleepingInBedCheckMixin from solstice.mixins.json into net.minecraft.world.entity.LivingEntity -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::beforeDamage(Lnet/minecraft/world/damagesource/DamageSource;FLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::afterDamage(Lnet/minecraft/world/damagesource/DamageSource;FLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FZ)V doesn't use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::afterDamage(Lnet/minecraft/world/damagesource/DamageSource;FLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FZ)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::afterDamage(Lnet/minecraft/world/damagesource/DamageSource;FLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;FZ)V won't be passed a CallbackInfoReturnable as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onSleep(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onSleep(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onSleep(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:LivingEntityMixin from mod fabric-entity-events-v1->@Inject::onIsSleepingInBed(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:elytra.LivingEntityMixin from mod fabric-entity-events-v1->@Inject::injectElytraTick(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::canFreeze(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::dropInventory(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::dropInventory(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::dropInventory(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::tick(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::tick(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:LivingEntityMixin from mod trinkets->@Inject::tick(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-api-v1.mixins.json:LivingEntityMixin from mod fabric-block-api-v1->@Inject::allowTaggedBlocksForTrapdoorClimbing(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:LivingEntityMixin from mod fabric-item-api-v1->@Inject::onGetPreferredEquipmentSlot(Lnet/minecraft/world/item/ItemStack;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:LivingEntityMixin from mod fabric-lifecycle-events-v1->@Inject::getEquipmentChanges(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Ljava/util/Map;[Lnet/minecraft/world/entity/EquipmentSlot;IILnet/minecraft/world/entity/EquipmentSlot;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)V doesn't use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:LivingEntityMixin from mod fabric-lifecycle-events-v1->@Inject::getEquipmentChanges(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Ljava/util/Map;[Lnet/minecraft/world/entity/EquipmentSlot;IILnet/minecraft/world/entity/EquipmentSlot;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:LivingEntityMixin from mod fabric-lifecycle-events-v1->@Inject::getEquipmentChanges(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Ljava/util/Map;[Lnet/minecraft/world/entity/EquipmentSlot;IILnet/minecraft/world/entity/EquipmentSlot;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)V won't be passed a CallbackInfoReturnable as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.LivingEntityMixin from mod solstice->@Inject::onWakeUp(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.miscellaneous.BypassSleepingInBedCheckMixin from mod solstice->@Inject::isSleepingInBed(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing AttachmentTargetsMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.Level -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.Level -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.world.level.Level -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:WorldMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldViewMixin from fabric-block-view-api-v2.mixins.json into net.minecraft.world.level.LevelReader -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-block-view-api-v2.mixins.json:WorldViewMixin from mod fabric-block-view-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldViewMixin from fabric-rendering-data-attachment-v1.mixins.json into net.minecraft.world.level.LevelReader -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerWorldMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.server.level.ServerLevel -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_syncChange$2(Lnet/fabricmc/fabric/api/attachment/v1/AttachmentType;Lnet/fabricmc/fabric/impl/attachment/sync/s2c/AttachmentSyncPayloadS2C;Lnet/minecraft/server/level/ServerPlayer;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_syncChange$2$0 in fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$createAttachmentsPersistentState$1(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/core/HolderLookup$Provider;)Lnet/fabricmc/fabric/impl/attachment/AttachmentPersistentState; to md50bf59$fabric-data-attachment-api-v1$lambda$createAttachmentsPersistentState$1$1 in fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$createAttachmentsPersistentState$0(Lnet/minecraft/server/level/ServerLevel;)Lnet/fabricmc/fabric/impl/attachment/AttachmentPersistentState; to md50bf59$fabric-data-attachment-api-v1$lambda$createAttachmentsPersistentState$0$2 in fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerWorldMixin from fabric-api-lookup-api-v1.mixins.json into net.minecraft.server.level.ServerLevel -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_invalidateCache$5(Ljava/util/Map$Entry;)Z to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_invalidateCache$5$3 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_invalidateCache$4(Ljava/lang/ref/WeakReference;)Z to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_invalidateCache$4$4 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_invalidateCache$3(Ljava/lang/ref/WeakReference;)V to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_invalidateCache$3$5 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_invalidateCache$2(Ljava/lang/ref/WeakReference;)Z to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_invalidateCache$2$6 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_registerCache$1(Ljava/lang/ref/WeakReference;)Z to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_registerCache$1$7 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_registerCache$0(Lnet/minecraft/core/BlockPos;)Ljava/util/List; to md50bf59$fabric-api-lookup-api-v1$lambda$fabric_registerCache$0$8 in fabric-api-lookup-api-v1.mixins.json:ServerWorldMixin from mod fabric-api-lookup-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerWorldMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.server.level.ServerLevel -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing common.MixinServerWorld from mixins.cardinal_components_entity.json into net.minecraft.server.level.ServerLevel -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1->@Inject::createAttachmentsPersistentState(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1->@Inject::createAttachmentsPersistentState(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ServerWorldMixin from mod fabric-data-attachment-api-v1->@Inject::createAttachmentsPersistentState(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::startWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::startWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::startWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::endWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::endWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:ServerWorldMixin from mod fabric-lifecycle-events-v1->@Inject::endWorldTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tick(Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tick(Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tick(Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tickRiding(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tickRiding(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerWorld from mod cardinal-components-entity->@Inject::tickRiding(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractBlockSettingsAccessor from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.state.BlockBehaviour$Properties -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:AbstractBlockSettingsAccessor from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing IdListMixin from fabric-registry-sync-v0.mixins.json into net.minecraft.core.IdMapper -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:IdListMixin from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_remapIds$0(Lit/unimi/dsi/fastutil/ints/Int2IntMap;Ljava/lang/Object;Ljava/lang/Integer;)Ljava/lang/Integer; to md50bf59$fabric-registry-sync-v0$lambda$fabric_remapIds$0$0 in fabric-registry-sync-v0.mixins.json:IdListMixin from mod fabric-registry-sync-v0 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing DetectorRailBlockMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.DetectorRailBlock -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DetectorRailBlockMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$getCustomComparatorOutput$0(Lnet/minecraft/world/entity/Entity;)Z to md50bf59$fabric-object-builder-api-v1$lambda$getCustomComparatorOutput$0$0 in fabric-object-builder-v1.mixins.json:DetectorRailBlockMixin from mod fabric-object-builder-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DetectorRailBlockMixin from mod fabric-object-builder-api-v1->@Inject::getCustomComparatorOutput(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing DropperBlockMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.DropperBlock -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:DropperBlockMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$hookDispense$0(Lnet/fabricmc/fabric/api/transfer/v1/item/ItemVariant;)Z to md50bf59$fabric-transfer-api-v1$lambda$hookDispense$0$0 in fabric-transfer-api-v1.mixins.json:DropperBlockMixin from mod fabric-transfer-api-v1 -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:DropperBlockMixin from mod fabric-transfer-api-v1->@Inject::hookDispense(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) Mixing OxidizableMixin from fabric-content-registries-v0.mixins.json into net.minecraft.world.level.block.WeatheringCopper -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:OxidizableMixin from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:17] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:OxidizableMixin from mod fabric-content-registries-v0->@Inject::createOxidationLevelIncreasesMap(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing CrafterBlockMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.CrafterBlock -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:CrafterBlockMixin from mod fabric-transfer-api-v1->@Inject::transferOrSpawnStack(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/CrafterBlockEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/item/crafting/RecipeHolder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockStateMixin from fabric-block-api-v1.mixins.json into net.minecraft.world.level.block.state.BlockState -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-block-api-v1.mixins.json:BlockStateMixin from mod fabric-block-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing EntityTypeMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.entity.EntityType -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:EntityTypeMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:EntityTypeMixin from mod fabric-object-builder-api-v1->@Inject::alwaysUpdateVelocity(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing FluidMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.material.Fluid -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:FluidMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:FluidMixin from mod fabric-transfer-api-v1->@Inject::hookGetBucketFillSound(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing ComponentMapBuilderMixin from fabric-item-api-v1.mixins.json into net.minecraft.core.component.DataComponentMap$Builder -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ComponentMapBuilderMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing AttachmentTargetsMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_syncChange$0(Lnet/fabricmc/fabric/api/attachment/v1/AttachmentType;Lnet/fabricmc/fabric/impl/attachment/sync/s2c/AttachmentSyncPayloadS2C;Lnet/minecraft/server/level/ServerPlayer;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_syncChange$0$0 in fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1 -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityMixin from fabric-block-view-api-v2.mixins.json into net.minecraft.world.level.block.entity.BlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-block-view-api-v2.mixins.json:BlockEntityMixin from mod fabric-block-view-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityMixin from fabric-rendering-data-attachment-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1->@Inject::readBlockEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/core/HolderLookup$Provider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1->@Inject::readBlockEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/core/HolderLookup$Provider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1->@Inject::readBlockEntityAttachments(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/core/HolderLookup$Provider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BlockEntityMixin from mod fabric-data-attachment-api-v1->@Inject::writeBlockEntityAttachments(Lnet/minecraft/core/HolderLookup$Provider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing LockableContainerBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.BaseContainerBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:LockableContainerBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing NamedScreenHandlerFactoryMixin from fabric-screen-handler-api-v1.mixins.json into net.minecraft.world.MenuProvider -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:NamedScreenHandlerFactoryMixin from mod fabric-screen-handler-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing MobEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.Mob -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:MobEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing ChiseledBookshelfBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.ChiseledBookShelfBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:ChiseledBookshelfBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:ChiseledBookshelfBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::setStackBypass(ILnet/minecraft/world/item/ItemStack;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityTypeMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntityType -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityTypeAccessor from fabric-api-lookup-api-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntityType -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-api-lookup-api-v1.mixins.json:BlockEntityTypeAccessor from mod fabric-api-lookup-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeMixin from mod fabric-object-builder-api-v1->@Inject::mutableBlocks(Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;Lcom/mojang/datafixers/types/Type;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeMixin from mod fabric-object-builder-api-v1->@Inject::mutableBlocks(Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;Lcom/mojang/datafixers/types/Type;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeMixin from mod fabric-object-builder-api-v1->@Inject::mutableBlocks(Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;Lcom/mojang/datafixers/types/Type;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing accessor.ScreenHandlerAccessor from trinkets.mixins.json into net.minecraft.world.inventory.AbstractContainerMenu -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:accessor.ScreenHandlerAccessor from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing ScreenHandlerMixin from sgui.mixins.json into net.minecraft.world.inventory.AbstractContainerMenu -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ScreenHandlerMixin from mod sgui->@Inject::sgui$blockIfVirtual(Lnet/minecraft/world/inventory/Slot;Lnet/minecraft/world/item/ItemStack;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractFurnaceBlockEntityMixin from fabric-content-registries-v0.mixins.json into net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractFurnaceBlockEntityMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing AbstractFurnaceBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-content-registries-v0->@Inject::fuelTimeMapHook(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-content-registries-v0->@Inject::fuelTimeMapHook(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-item-api-v1->@Inject::getStackRemainder(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;ZZLnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;ZZLnet/minecraft/world/item/crafting/RecipeHolder;I)V doesn't use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:AbstractFurnaceBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::setStackSuppressUpdate(ILnet/minecraft/world/item/ItemStack;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing SignBlockEntityAccessor from sgui.mixins.json into net.minecraft.world.level.block.entity.SignBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.sign.FormatSignMixin from solstice.mixins.json into net.minecraft.world.level.block.entity.SignBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.sign.FormatSignMixin from mod solstice->@Inject::solstice$formatSignText(Lnet/minecraft/world/entity/player/Player;Ljava/util/List;Lnet/minecraft/world/level/block/entity/SignText;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing JukeboxBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.JukeboxBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:JukeboxBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:JukeboxBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::setStackBypass(Lnet/minecraft/world/item/ItemStack;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing BrewingStandBlockEntityMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.level.block.entity.BrewingStandBlockEntity -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:BrewingStandBlockEntityMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:BrewingStandBlockEntityMixin from mod fabric-item-api-v1->@Inject::captureItemStack(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/NonNullList;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraft/world/item/ItemStack;)V doesn't use it's CallbackInfo -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemStackMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.item.ItemStack -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemStackMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:18] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$hookDamage$0(Lorg/apache/commons/lang3/mutable/MutableBoolean;Ljava/util/function/Consumer;)V to md50bf59$fabric-item-api-v1$lambda$hookDamage$0$0 in fabric-item-api-v1.mixins.json:ItemStackMixin from mod fabric-item-api-v1 -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing AnvilScreenHandlerMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.inventory.AnvilMenu -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:AnvilScreenHandlerMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing HopperBlockEntityMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.level.block.entity.HopperBlockEntity -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$hookExtract$1(Lnet/fabricmc/fabric/api/transfer/v1/item/ItemVariant;)Z to md50bf59$fabric-transfer-api-v1$lambda$hookExtract$1$0 in fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1 -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$hookInsert$0(Lnet/fabricmc/fabric/api/transfer/v1/item/ItemVariant;)Z to md50bf59$fabric-transfer-api-v1$lambda$hookInsert$0$1 in fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1 -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::hookInsert(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/HopperBlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:HopperBlockEntityMixin from mod fabric-transfer-api-v1->@Inject::hookExtract(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/level/block/entity/Hopper;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing BannerBlockEntityMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.block.entity.BannerBlockEntity -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:BannerBlockEntityMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing TadpoleEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.animal.frog.Tadpole -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:TadpoleEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) Mixing common.BucketableMixin from mixins.cardinal_components_entity.json into net.minecraft.world.entity.animal.Bucketable -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.BucketableMixin from mod cardinal-components-entity: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.BucketableMixin from mod cardinal-components-entity->@Inject::writeComponentsToStack(Lnet/minecraft/world/entity/Mob;Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:19] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.BucketableMixin from mod cardinal-components-entity->@Inject::readComponentsFromStack(Lnet/minecraft/world/entity/Mob;Lnet/minecraft/nbt/CompoundTag;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemAccessor from fabric-item-api-v1.mixins.json into net.minecraft.world.item.Item -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemAccessor from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.item.Item -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.Item -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:ItemMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemMixin from mod fabric-item-api-v1->@Inject::onConstruct(Lnet/minecraft/world/item/Item$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemMixin from mod fabric-item-api-v1->@Inject::onConstruct(Lnet/minecraft/world/item/Item$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemMixin from mod fabric-item-api-v1->@Inject::onConstruct(Lnet/minecraft/world/item/Item$Properties;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ShovelItemAccessor from fabric-content-registries-v0.mixins.json into net.minecraft.world.item.ShovelItem -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:ShovelItemAccessor from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getPathStates()Ljava/util/Map; to getPathStates$fabric-content-registries-v0_$md$50bf59$0 in fabric-content-registries-v0.mixins.json:ShovelItemAccessor from mod fabric-content-registries-v0 -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing AxeItemAccessor from fabric-content-registries-v0.mixins.json into net.minecraft.world.item.AxeItem -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:AxeItemAccessor from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getStrippedBlocks()Ljava/util/Map; to getStrippedBlocks$fabric-content-registries-v0_$md$50bf59$0 in fabric-content-registries-v0.mixins.json:AxeItemAccessor from mod fabric-content-registries-v0 -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method setStrippedBlocks(Ljava/util/Map;)V to setStrippedBlocks$fabric-content-registries-v0_$md$50bf59$1 in fabric-content-registries-v0.mixins.json:AxeItemAccessor from mod fabric-content-registries-v0 -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing HoeItemAccessor from fabric-content-registries-v0.mixins.json into net.minecraft.world.item.HoeItem -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:HoeItemAccessor from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getTillingActions()Ljava/util/Map; to getTillingActions$fabric-content-registries-v0_$md$50bf59$0 in fabric-content-registries-v0.mixins.json:HoeItemAccessor from mod fabric-content-registries-v0 -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing BucketItemAccessor from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.BucketItem -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:BucketItemAccessor from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing BucketItemMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.BucketItem -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:BucketItemMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing HoneycombItemMixin from fabric-content-registries-v0.mixins.json into net.minecraft.world.item.HoneycombItem -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:HoneycombItemMixin from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:HoneycombItemMixin from mod fabric-content-registries-v0->@Inject::createUnwaxedToWaxedMap(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ItemSettingsMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.item.Item$Properties -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:ItemSettingsMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing EnchantmentDefinitionMixin from trinkets.mixins.json into net.minecraft.world.item.enchantment.Enchantment$EnchantmentDefinition -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:EnchantmentDefinitionMixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$extendCodec$2(Lcom/mojang/serialization/MapCodec;Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; to md50bf59$trinkets$lambda$extendCodec$2$0 in trinkets.mixins.json:EnchantmentDefinitionMixin from mod trinkets -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$extendCodec$1(Lnet/minecraft/world/item/enchantment/Enchantment$EnchantmentDefinition;Ljava/util/Set;)Lnet/minecraft/world/item/enchantment/Enchantment$EnchantmentDefinition; to md50bf59$trinkets$lambda$extendCodec$1$1 in trinkets.mixins.json:EnchantmentDefinitionMixin from mod trinkets -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$extendCodec$0(Lnet/minecraft/world/item/enchantment/Enchantment$EnchantmentDefinition;)Ljava/util/Set; to md50bf59$trinkets$lambda$extendCodec$0$2 in trinkets.mixins.json:EnchantmentDefinitionMixin from mod trinkets -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing TagKeyMixin from fabric-convention-tags-api-v2.mixins.json into net.minecraft.tags.TagKey -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-convention-tags-api-v2.mixins.json:TagKeyMixin from mod fabric-convention-tags-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing BundleContentsComponentAccessor from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.component.BundleContents -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:BundleContentsComponentAccessor from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming @Invoker method getOccupancy(Lnet/minecraft/world/item/ItemStack;)Lorg/apache/commons/lang3/math/Fraction; to getOccupancy$fabric-transfer-api-v1_$md$50bf59$0 in fabric-transfer-api-v1.mixins.json:BundleContentsComponentAccessor from mod fabric-transfer-api-v1 -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing AttachmentTargetsMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.chunk.ChunkAccess -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:AttachmentTargetsMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ChunkMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.chunk.ChunkAccess -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:ChunkMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing WorldChunkMixin from fabric-data-attachment-api-v1.mixins.json into net.minecraft.world.level.chunk.LevelChunk -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$fabric_syncChange$0(Lnet/fabricmc/fabric/api/attachment/v1/AttachmentType;Lnet/fabricmc/fabric/impl/attachment/sync/s2c/AttachmentSyncPayloadS2C;Lnet/minecraft/server/level/ServerPlayer;)V to md50bf59$fabric-data-attachment-api-v1$lambda$fabric_syncChange$0$0 in fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1 -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing server.WorldChunkMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.world.level.chunk.LevelChunk -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1->@Inject::transferProtoChunkAttachement(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ProtoChunk;Lnet/minecraft/world/level/chunk/LevelChunk$PostLoadProcessor;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1->@Inject::transferProtoChunkAttachement(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ProtoChunk;Lnet/minecraft/world/level/chunk/LevelChunk$PostLoadProcessor;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:WorldChunkMixin from mod fabric-data-attachment-api-v1->@Inject::transferProtoChunkAttachement(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/level/chunk/ProtoChunk;Lnet/minecraft/world/level/chunk/LevelChunk$PostLoadProcessor;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onLoadBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onLoadBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onLoadBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/world/level/block/entity/BlockEntity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraft/world/level/block/entity/BlockEntity;)V doesn't use it's CallbackInfo -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraft/world/level/block/entity/BlockEntity;)V has 0 override(s) in child classes -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:server.WorldChunkMixin from mod fabric-lifecycle-events-v1->@Inject::onRemoveBlockEntity(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lnet/minecraft/world/level/block/entity/BlockEntity;)V won't be passed a CallbackInfo as a result -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing ContainerComponentAccessor from fabric-transfer-api-v1.mixins.json into net.minecraft.world.item.component.ItemContainerContents -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:ContainerComponentAccessor from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing EntityTypeBuilderMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.entity.EntityType$Builder -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:EntityTypeBuilderMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:EntityTypeBuilderMixin from mod fabric-object-builder-api-v1->@Inject::applyChildBuilders(Ljava/lang/String;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing TaggedChoiceMixin from fabric-dimensions-v1.mixins.json into com.mojang.datafixers.types.templates.TaggedChoice -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:TaggedChoiceMixin from mod fabric-dimensions-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:TaggedChoiceMixin from mod fabric-dimensions-v1->@Inject::onApply(Lcom/mojang/datafixers/util/Pair;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) Mixing TaggedChoiceTypeMixin from fabric-dimensions-v1.mixins.json into com.mojang.datafixers.types.templates.TaggedChoice$TaggedChoiceType -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:TaggedChoiceTypeMixin from mod fabric-dimensions-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:20] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:TaggedChoiceTypeMixin from mod fabric-dimensions-v1->@Inject::onGetCodec(Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing datafixer.Schema1460Mixin from trinkets.mixins.json into net.minecraft.util.datafix.schemas.V1460 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:datafixer.Schema1460Mixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:datafixer.Schema1460Mixin from mod trinkets->@Inject::captureSchema(Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:datafixer.Schema1460Mixin from mod trinkets->@Inject::captureSchema(Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:datafixer.Schema1460Mixin from mod trinkets->@Inject::captureSchema(Lcom/mojang/datafixers/schemas/Schema;Ljava/util/Map;Ljava/util/Map;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing Schema2832Mixin from fabric-dimensions-v1.mixins.json into net.minecraft.util.datafix.schemas.V2832 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-dimensions-v1.mixins.json:Schema2832Mixin from mod fabric-dimensions-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityMixin from fabric-screen-handler-api-v1.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-screen-handler-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityMixin from fabric-events-interaction-v0.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-events-interaction-v0.mixins.json:ServerPlayerEntityMixin from mod fabric-events-interaction-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityAccessor from sgui.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayerEntityMixin from sgui.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.back.PreTeleportMixin from solstice.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.spawn.OverrideSpawnPointMixin from solstice.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.styling.CustomDeathMessageMixin from solstice.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.tablist.CustomPlayerListNameMixin from solstice.mixins.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing common.MixinServerPlayerEntity from mixins.cardinal_components_entity.json into net.minecraft.server.level.ServerPlayer -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_entity.json:common.MixinServerPlayerEntity from mod cardinal-components-entity: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::callOnKillForPlayer(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::callOnKillForPlayer(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::callOnKillForPlayer(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::notifyDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/server/level/ServerLevel;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/server/level/ServerLevel;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::afterWorldChanged(Lnet/minecraft/server/level/ServerLevel;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onCopyFrom(Lnet/minecraft/server/level/ServerPlayer;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onCopyFrom(Lnet/minecraft/server/level/ServerPlayer;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onCopyFrom(Lnet/minecraft/server/level/ServerPlayer;ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-entity-events-v1->@Inject::onTrySleepDirectionCheck(Lnet/minecraft/core/BlockPos;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/core/Direction;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-screen-handler-api-v1->@Inject::fabric_storeOpenedScreenHandler(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/world/inventory/AbstractContainerMenu;)V doesn't use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-screen-handler-api-v1->@Inject::fabric_storeOpenedScreenHandler(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/world/inventory/AbstractContainerMenu;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-screen-handler-api-v1.mixins.json:ServerPlayerEntityMixin from mod fabric-screen-handler-api-v1->@Inject::fabric_storeOpenedScreenHandler(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/world/inventory/AbstractContainerMenu;)V won't be passed a CallbackInfoReturnable as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-events-interaction-v0.mixins.json:ServerPlayerEntityMixin from mod fabric-events-interaction-v0->@Inject::onPlayerInteractEntity(Lnet/minecraft/world/entity/Entity;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$dontForceCloseFor(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$dontForceCloseFor(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$dontForceCloseFor(Lnet/minecraft/world/MenuProvider;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$ignoreClosing(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$onDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$onDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayerEntityMixin from mod sgui->@Inject::sgui$onDeath(Lnet/minecraft/world/damagesource/DamageSource;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.back.PreTeleportMixin from mod solstice->@Inject::solstice$getPreTeleportLocation(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.back.PreTeleportMixin from mod solstice->@Inject::solstice$getPreTeleportLocation(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.back.PreTeleportMixin from mod solstice->@Inject::solstice$getPreTeleportLocation(Lnet/minecraft/server/level/ServerLevel;DDDLjava/util/Set;FFLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideSpawnPos(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideSpawnDimension(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideRespawnTarget(ZLnet/minecraft/world/level/portal/DimensionTransition$PostDimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideRespawnTarget(ZLnet/minecraft/world/level/portal/DimensionTransition$PostDimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.spawn.OverrideSpawnPointMixin from mod solstice->@Inject::solstice$overrideRespawnTarget(ZLnet/minecraft/world/level/portal/DimensionTransition$PostDimensionTransition;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.tablist.CustomPlayerListNameMixin from mod solstice->@Inject::solstice$customizePlayerListName(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing MooshroomEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.animal.MushroomCow -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:MooshroomEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing PigEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.animal.Pig -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:PigEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing VillagerEntityMixin from fabric-entity-events-v1.mixins.json into net.minecraft.world.entity.npc.Villager -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-entity-events-v1.mixins.json:VillagerEntityMixin from mod fabric-entity-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing VillagerEntityAccessor from fabric-content-registries-v0.mixins.json into net.minecraft.world.entity.npc.Villager -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-content-registries-v0.mixins.json:VillagerEntityAccessor from mod fabric-content-registries-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method fabric_setItemFoodValues(Ljava/util/Map;)V to fabric_setItemFoodValues$fabric-content-registries-v0_$md$50bf59$0 in fabric-content-registries-v0.mixins.json:VillagerEntityAccessor from mod fabric-content-registries-v0 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method fabric_setGatherableItems(Ljava/util/Set;)V to fabric_setGatherableItems$fabric-content-registries-v0_$md$50bf59$1 in fabric-content-registries-v0.mixins.json:VillagerEntityAccessor from mod fabric-content-registries-v0 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method fabric_getGatherableItems()Ljava/util/Set; to fabric_getGatherableItems$fabric-content-registries-v0_$md$50bf59$2 in fabric-content-registries-v0.mixins.json:VillagerEntityAccessor from mod fabric-content-registries-v0 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing PlayerScreenHandlerMixin from trinkets.mixins.json into net.minecraft.world.inventory.InventoryMenu -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$quickMove$4(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/player/Player;Ldev/emi/trinkets/api/TrinketComponent;)V to md50bf59$trinkets$lambda$quickMove$4$0 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$trinkets$updateTrinketSlots$3(ZLdev/emi/trinkets/api/TrinketComponent;)V to md50bf59$trinkets$lambda$trinkets$updateTrinketSlots$3$1 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$trinkets$updateTrinketSlots$2(Ldev/emi/trinkets/api/SlotGroup;)Ljava/util/List; to md50bf59$trinkets$lambda$trinkets$updateTrinketSlots$2$2 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$trinkets$updateTrinketSlots$1(Ldev/emi/trinkets/api/SlotGroup;)Ljava/util/List; to md50bf59$trinkets$lambda$trinkets$updateTrinketSlots$1$3 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$trinkets$updateTrinketSlots$0(Ljava/util/Map$Entry;Ljava/util/Map$Entry;)I to md50bf59$trinkets$lambda$trinkets$updateTrinketSlots$0$4 in trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::init(Lnet/minecraft/world/entity/player/Inventory;ZLnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::init(Lnet/minecraft/world/entity/player/Inventory;ZLnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::init(Lnet/minecraft/world/entity/player/Inventory;ZLnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::onClosed(Lnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::onClosed(Lnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::onClosed(Lnet/minecraft/world/entity/player/Player;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:PlayerScreenHandlerMixin from mod trinkets->@Inject::quickMove(Lnet/minecraft/world/entity/player/Player;ILorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Mixing ingredient.IngredientMixin from fabric-recipe-api-v1.mixins.json into net.minecraft.world.item.crafting.Ingredient -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$injectCodec$3(Lnet/minecraft/world/item/crafting/Ingredient;)Lcom/mojang/datafixers/util/Either; to md50bf59$fabric-recipe-api-v1$lambda$injectCodec$3$0 in fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$injectCodec$2(Lcom/mojang/datafixers/util/Either;)Lnet/minecraft/world/item/crafting/Ingredient; to md50bf59$fabric-recipe-api-v1$lambda$injectCodec$2$1 in fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$injectCodec$1(Lnet/minecraft/world/item/crafting/Ingredient;)Lnet/minecraft/world/item/crafting/Ingredient; to md50bf59$fabric-recipe-api-v1$lambda$injectCodec$1$2 in fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$injectCodec$0(ZLnet/fabricmc/fabric/api/recipe/v1/ingredient/CustomIngredientSerializer;)Lcom/mojang/serialization/MapCodec; to md50bf59$fabric-recipe-api-v1$lambda$injectCodec$0$3 in fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1 -[19:08:21] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.IngredientMixin from mod fabric-recipe-api-v1->@Inject::injectCodec(ZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing EntitySelectorOptionsAccessor from fabric-command-api-v2.mixins.json into net.minecraft.commands.arguments.selector.options.EntitySelectorOptions -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-command-api-v2.mixins.json:EntitySelectorOptionsAccessor from mod fabric-command-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming @Invoker method callPutOption(Ljava/lang/String;Lnet/minecraft/commands/arguments/selector/options/EntitySelectorOptions$Modifier;Ljava/util/function/Predicate;Lnet/minecraft/network/chat/Component;)V to callPutOption$fabric-command-api-v2_$md$50bf59$0 in fabric-command-api-v2.mixins.json:EntitySelectorOptionsAccessor from mod fabric-command-api-v2 -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing EntitySelectorReaderMixin from fabric-command-api-v2.mixins.json into net.minecraft.commands.arguments.selector.EntitySelectorParser -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-command-api-v2.mixins.json:EntitySelectorReaderMixin from mod fabric-command-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing BlockEntityTypeBuilderMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.level.block.entity.BlockEntityType$Builder -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:BlockEntityTypeBuilderMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Generating mapped inner class net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity$Anonymous$28373269ae304d9b9b0a862ca0793b7f (originally net/fabricmc/fabric/mixin/transfer/ChiseledBookshelfBlockEntityMixin$1) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing SimpleInventoryMixin from fabric-transfer-api-v1.mixins.json into net.minecraft.world.SimpleContainer -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-transfer-api-v1.mixins.json:SimpleInventoryMixin from mod fabric-transfer-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing RecipeMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.item.crafting.Recipe -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RecipeMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RecipeMixin from mod fabric-item-api-v1->@Inject::captureStack(Lnet/minecraft/world/item/crafting/RecipeInput;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/core/NonNullList;I)V doesn't use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RecipeMixin from mod fabric-item-api-v1->@Inject::captureStack(Lnet/minecraft/world/item/crafting/RecipeInput;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/core/NonNullList;I)V has 0 override(s) in child classes -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:RecipeMixin from mod fabric-item-api-v1->@Inject::captureStack(Lnet/minecraft/world/item/crafting/RecipeInput;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;Lnet/minecraft/core/NonNullList;I)V won't be passed a CallbackInfoReturnable as a result -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing ingredient.ShapelessRecipeMixin from fabric-recipe-api-v1.mixins.json into net.minecraft.world.item.crafting.ShapelessRecipe -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1->@Inject::cacheRequiresTesting(Ljava/lang/String;Lnet/minecraft/world/item/crafting/CraftingBookCategory;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/core/NonNullList;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1->@Inject::cacheRequiresTesting(Ljava/lang/String;Lnet/minecraft/world/item/crafting/CraftingBookCategory;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/core/NonNullList;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1->@Inject::cacheRequiresTesting(Ljava/lang/String;Lnet/minecraft/world/item/crafting/CraftingBookCategory;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/core/NonNullList;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-recipe-api-v1.mixins.json:ingredient.ShapelessRecipeMixin from mod fabric-recipe-api-v1->@Inject::customIngredientMatch(Lnet/minecraft/world/item/crafting/CraftingInput;Lnet/minecraft/world/level/Level;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing EnchantRandomlyLootFunctionMixin from fabric-item-api-v1.mixins.json into net.minecraft.world.level.storage.loot.functions.EnchantRandomlyFunction -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-item-api-v1.mixins.json:EnchantRandomlyLootFunctionMixin from mod fabric-item-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing LootTableAccessor from fabric-loot-api-v3.mixins.json into net.minecraft.world.level.storage.loot.LootTable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-loot-api-v3.mixins.json:LootTableAccessor from mod fabric-loot-api-v3: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing LootPoolAccessor from fabric-loot-api-v3.mixins.json into net.minecraft.world.level.storage.loot.LootPool -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-loot-api-v3.mixins.json:LootPoolAccessor from mod fabric-loot-api-v3: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing StructureTemplateManagerMixin from fabric-gametest-api-v1.mixins.json into net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:StructureTemplateManagerMixin from mod fabric-gametest-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:StructureTemplateManagerMixin from mod fabric-gametest-api-v1->@Inject::addFabricTemplateProvider(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lcom/google/common/collect/ImmutableList$Builder;)V doesn't use it's CallbackInfo -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:StructureTemplateManagerMixin from mod fabric-gametest-api-v1->@Inject::addFabricTemplateProvider(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lcom/google/common/collect/ImmutableList$Builder;)V has 0 override(s) in child classes -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:StructureTemplateManagerMixin from mod fabric-gametest-api-v1->@Inject::addFabricTemplateProvider(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Lcom/google/common/collect/ImmutableList$Builder;)V won't be passed a CallbackInfo as a result -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing BiomeSourceMixin from fabric-biome-api-v1.mixins.json into net.minecraft.world.level.biome.BiomeSource -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:BiomeSourceMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing MultiNoiseBiomeSourceMixin from fabric-biome-api-v1.mixins.json into net.minecraft.world.level.biome.MultiNoiseBiomeSource -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:MultiNoiseBiomeSourceMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing NetherBiomePresetMixin from fabric-biome-api-v1.mixins.json into net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList$Preset$1 -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:NetherBiomePresetMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:NetherBiomePresetMixin from mod fabric-biome-api-v1->@Inject::apply(Ljava/util/function/Function;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing TheEndBiomeSourceMixin from fabric-biome-api-v1.mixins.json into net.minecraft.world.level.biome.TheEndBiomeSource -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$1(Lnet/minecraft/core/HolderGetter;)Lnet/fabricmc/fabric/impl/biome/TheEndBiomeData$Overrides; to md50bf59$fabric-biome-api-v1$lambda$init$1$0 in fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1 -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$modifyCodec$0(Lcom/mojang/serialization/codecs/RecordCodecBuilder$Instance;)Lcom/mojang/datafixers/kinds/App; to md50bf59$fabric-biome-api-v1$lambda$modifyCodec$0$1 in fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1 -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::modifyCodec(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::rememberLookup(Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::clearLookup(Lnet/minecraft/core/HolderGetter;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::init(Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::init(Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::init(Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lnet/minecraft/core/Holder;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:TheEndBiomeSourceMixin from mod fabric-biome-api-v1->@Inject::getWeightedEndBiome(IIILnet/minecraft/world/level/biome/Climate$Sampler;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Mixing DebugChunkGeneratorAccessor from fabric-registry-sync-v0.mixins.json into net.minecraft.world.level.levelgen.DebugLevelSource -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) fabric-registry-sync-v0.mixins.json:DebugChunkGeneratorAccessor from mod fabric-registry-sync-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method setBLOCK_STATES(Ljava/util/List;)V to setBLOCK_STATES$fabric-registry-sync-v0_$md$50bf59$0 in fabric-registry-sync-v0.mixins.json:DebugChunkGeneratorAccessor from mod fabric-registry-sync-v0 -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method setX_SIDE_LENGTH(I)V to setX_SIDE_LENGTH$fabric-registry-sync-v0_$md$50bf59$1 in fabric-registry-sync-v0.mixins.json:DebugChunkGeneratorAccessor from mod fabric-registry-sync-v0 -[19:08:22] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method setZ_SIDE_LENGTH(I)V to setZ_SIDE_LENGTH$fabric-registry-sync-v0_$md$50bf59$2 in fabric-registry-sync-v0.mixins.json:DebugChunkGeneratorAccessor from mod fabric-registry-sync-v0 -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing DefaultAttributeRegistryAccessor from fabric-object-builder-v1.mixins.json into net.minecraft.world.entity.ai.attributes.DefaultAttributes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DefaultAttributeRegistryAccessor from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming @Accessor method getRegistry()Ljava/util/Map; to getRegistry$fabric-object-builder-api-v1_$md$50bf59$0 in fabric-object-builder-v1.mixins.json:DefaultAttributeRegistryAccessor from mod fabric-object-builder-api-v1 -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing DefaultAttributeRegistryMixin from fabric-object-builder-v1.mixins.json into net.minecraft.world.entity.ai.attributes.DefaultAttributes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DefaultAttributeRegistryMixin from mod fabric-object-builder-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-object-builder-v1.mixins.json:DefaultAttributeRegistryMixin from mod fabric-object-builder-api-v1->@Inject::injectAttributes(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Entrypoint) Iterating over entrypoint 'main' -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing LootTableBuilderMixin from fabric-loot-api-v2.mixins.json into net.minecraft.world.level.storage.loot.LootTable$Builder -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-loot-api-v2.mixins.json:LootTableBuilderMixin from mod fabric-loot-api-v2: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing LootTableBuilderMixin from fabric-loot-api-v3.mixins.json into net.minecraft.world.level.storage.loot.LootTable$Builder -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-loot-api-v3.mixins.json:LootTableBuilderMixin from mod fabric-loot-api-v3: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing events.CommandEventsMixin from solstice.mixins.json into com.mojang.brigadier.CommandDispatcher -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.CommandEventsMixin from mod solstice->@Inject::execute(Lcom/mojang/brigadier/ParseResults;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing MinecraftServerMixin from fabric-message-api-v1.mixins.json into net.minecraft.server.MinecraftServer -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-message-api-v1.mixins.json:MinecraftServerMixin from mod fabric-message-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$onGetChatDecorator$0(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/network/chat/Component;)Lnet/minecraft/network/chat/Component; to md50bf59$fabric-message-api-v1$lambda$onGetChatDecorator$0$0 in fabric-message-api-v1.mixins.json:MinecraftServerMixin from mod fabric-message-api-v1 -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing MinecraftServerMixin from fabric-gametest-api-v1.mixins.json into net.minecraft.server.MinecraftServer -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:MinecraftServerMixin from mod fabric-gametest-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing MinecraftServerMixin from fabric-resource-loader-v0.mixins.json into net.minecraft.server.MinecraftServer -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$init$0(Lnet/minecraft/server/packs/PackResources;)Ljava/util/stream/Stream; to md50bf59$fabric-resource-loader-v0$lambda$init$0$1 in fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0 -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing MinecraftServerMixin from fabric-lifecycle-events-v1.mixins.json into net.minecraft.server.MinecraftServer -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$endResourceReload$0(Ljava/lang/Void;Ljava/lang/Throwable;)Ljava/lang/Void; to md50bf59$fabric-lifecycle-events-v1$lambda$endResourceReload$0$2 in fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1 -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing modification.MinecraftServerMixin from fabric-biome-api-v1.mixins.json into net.minecraft.server.MinecraftServer -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:modification.MinecraftServerMixin from mod fabric-biome-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing events.WorldSaveEventMixin from solstice.mixins.json into net.minecraft.server.MinecraftServer -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-message-api-v1.mixins.json:MinecraftServerMixin from mod fabric-message-api-v1->@Inject::onGetChatDecorator(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:MinecraftServerMixin from mod fabric-gametest-api-v1->@Inject::tickWorlds(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:MinecraftServerMixin from mod fabric-gametest-api-v1->@Inject::tickWorlds(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-gametest-api-v1.mixins.json:MinecraftServerMixin from mod fabric-gametest-api-v1->@Inject::tickWorlds(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0->@Inject::init(Ljava/lang/Thread;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/packs/repository/PackRepository;Lnet/minecraft/server/WorldStem;Ljava/net/Proxy;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/server/Services;Lnet/minecraft/server/level/progress/ChunkProgressListenerFactory;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0->@Inject::init(Ljava/lang/Thread;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/packs/repository/PackRepository;Lnet/minecraft/server/WorldStem;Ljava/net/Proxy;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/server/Services;Lnet/minecraft/server/level/progress/ChunkProgressListenerFactory;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:MinecraftServerMixin from mod fabric-resource-loader-v0->@Inject::init(Ljava/lang/Thread;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/packs/repository/PackRepository;Lnet/minecraft/server/WorldStem;Ljava/net/Proxy;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/server/Services;Lnet/minecraft/server/level/progress/ChunkProgressListenerFactory;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterSetupServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::beforeShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::afterShutdownServer(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onStartTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onStartTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onStartTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onEndTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onEndTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onEndTick(Ljava/util/function/BooleanSupplier;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onUnloadWorldAtShutdown(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Ljava/util/Iterator;Lnet/minecraft/server/level/ServerLevel;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onUnloadWorldAtShutdown(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Ljava/util/Iterator;Lnet/minecraft/server/level/ServerLevel;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::onUnloadWorldAtShutdown(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;Ljava/util/Iterator;Lnet/minecraft/server/level/ServerLevel;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startResourceReload(Ljava/util/Collection;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startResourceReload(Ljava/util/Collection;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startResourceReload(Ljava/util/Collection;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::endResourceReload(Ljava/util/Collection;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::startSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::endSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::endSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-lifecycle-events-v1.mixins.json:MinecraftServerMixin from mod fabric-lifecycle-events-v1->@Inject::endSave(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:modification.MinecraftServerMixin from mod fabric-biome-api-v1->@Inject::finalizeWorldGen(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:modification.MinecraftServerMixin from mod fabric-biome-api-v1->@Inject::finalizeWorldGen(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-biome-api-v1.mixins.json:modification.MinecraftServerMixin from mod fabric-biome-api-v1->@Inject::finalizeWorldGen(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.WorldSaveEventMixin from mod solstice->@Inject::save(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V doesn't use it's CallbackInfoReturnable -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.WorldSaveEventMixin from mod solstice->@Inject::save(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:events.WorldSaveEventMixin from mod solstice->@Inject::save(ZZZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V won't be passed a CallbackInfoReturnable as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerConfigurationNetworkHandlerMixin from fabric-networking-api-v1.mixins.json into net.minecraft.server.network.ServerConfigurationPacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerConfigurationNetworkHandlerMixin from fabric-resource-loader-v0.mixins.json into net.minecraft.server.network.ServerConfigurationPacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-resource-loader-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerConfigurationNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::onClientReady(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerCommonNetworkHandlerMixin from fabric-networking-api-v1.mixins.json into net.minecraft.server.network.ServerCommonPacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing accessor.ServerCommonNetworkHandlerAccessor from fabric-networking-api-v1.mixins.json into net.minecraft.server.network.ServerCommonPacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:accessor.ServerCommonNetworkHandlerAccessor from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.core.RealPingMixin from solstice.mixins.json into net.minecraft.server.network.ServerCommonPacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::handleCustomPayloadReceivedAsync(Lnet/minecraft/network/protocol/common/ServerboundCustomPayloadPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::onPlayPong(Lnet/minecraft/network/protocol/common/ServerboundPongPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::onPlayPong(Lnet/minecraft/network/protocol/common/ServerboundPongPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerCommonNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::onPlayPong(Lnet/minecraft/network/protocol/common/ServerboundPongPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing CustomPayloadS2CPacketAccessor from fabric-data-attachment-api-v1.mixins.json into net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-data-attachment-api-v1.mixins.json:CustomPayloadS2CPacketAccessor from mod fabric-data-attachment-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing CustomPayloadC2SPacketMixin from fabric-networking-api-v1.mixins.json into net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:CustomPayloadC2SPacketMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$wrapCodec$0(Lnet/minecraft/network/FriendlyByteBuf;Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/network/protocol/common/custom/CustomPacketPayload$TypeAndCodec; to md50bf59$fabric-networking-api-v1$lambda$wrapCodec$0$0 in fabric-networking-api-v1.mixins.json:CustomPayloadC2SPacketMixin from mod fabric-networking-api-v1 -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing CustomPayloadPacketCodecMixin from fabric-networking-api-v1.mixins.json into net.minecraft.network.protocol.common.custom.CustomPacketPayload$1 -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:CustomPayloadPacketCodecMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayNetworkHandlerMixin from fabric-networking-api-v1.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayNetworkHandlerMixin from trinkets.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) trinkets.mixins.json:ServerPlayNetworkHandlerMixin from mod trinkets: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPlayNetworkHandlerMixin from sgui.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.styling.PlayerDisconnectMixin from solstice.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing modules.tablist.UpdatePlayerListMixin from solstice.mixins.json into net.minecraft.server.network.ServerGamePacketListenerImpl -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::initAddon(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-networking-api-v1.mixins.json:ServerPlayNetworkHandlerMixin from mod fabric-networking-api-v1->@Inject::handleCustomPayloadReceivedAsync(Lnet/minecraft/network/protocol/common/ServerboundCustomPayloadPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$handleGuiClicks(Lnet/minecraft/network/protocol/game/ServerboundContainerClickPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$resyncGui(Lnet/minecraft/network/protocol/game/ServerboundContainerClickPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$resyncGui(Lnet/minecraft/network/protocol/game/ServerboundContainerClickPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$resyncGui(Lnet/minecraft/network/protocol/game/ServerboundContainerClickPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$storeScreenHandler(Lnet/minecraft/network/protocol/game/ServerboundContainerClosePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$executeClosing(Lnet/minecraft/network/protocol/game/ServerboundContainerClosePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$executeClosing(Lnet/minecraft/network/protocol/game/ServerboundContainerClosePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$executeClosing(Lnet/minecraft/network/protocol/game/ServerboundContainerClosePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRenamingWithCustomGui(Lnet/minecraft/network/protocol/game/ServerboundRenameItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRenamingWithCustomGui(Lnet/minecraft/network/protocol/game/ServerboundRenameItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRenamingWithCustomGui(Lnet/minecraft/network/protocol/game/ServerboundRenameItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRecipeRequests(Lnet/minecraft/network/protocol/game/ServerboundPlaceRecipePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRecipeRequests(Lnet/minecraft/network/protocol/game/ServerboundPlaceRecipePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchRecipeRequests(Lnet/minecraft/network/protocol/game/ServerboundPlaceRecipePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchSignUpdate(Lnet/minecraft/network/protocol/game/ServerboundSignUpdatePacket;Ljava/util/List;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchMerchantTradeSelect(Lnet/minecraft/network/protocol/game/ServerboundSelectTradePacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$catchUpdateSelectedSlot(Lnet/minecraft/network/protocol/game/ServerboundSetCarriedItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$cancelCreativeAction(Lnet/minecraft/network/protocol/game/ServerboundSetCreativeModeSlotPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$clickHandSwing(Lnet/minecraft/network/protocol/game/ServerboundSwingPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$clickWithItem(Lnet/minecraft/network/protocol/game/ServerboundUseItemPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$clickOnBlock(Lnet/minecraft/network/protocol/game/ServerboundUseItemOnPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$onPlayerAction(Lnet/minecraft/network/protocol/game/ServerboundPlayerActionPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$clickOnEntity(Lnet/minecraft/network/protocol/game/ServerboundInteractPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$onMessage(Lnet/minecraft/network/protocol/game/ServerboundChatPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) sgui.mixins.json:ServerPlayNetworkHandlerMixin from mod sgui->@Inject::sgui$onCommand(Lnet/minecraft/network/protocol/game/ServerboundChatCommandPacket;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V does use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.tablist.UpdatePlayerListMixin from mod solstice->@Inject::solstice$updatePlayerList(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.tablist.UpdatePlayerListMixin from mod solstice->@Inject::solstice$updatePlayerList(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) solstice.mixins.json:modules.tablist.UpdatePlayerListMixin from mod solstice->@Inject::solstice$updatePlayerList(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing SinglePreparationResourceReloaderMixin from fabric-resource-conditions-api-v1.mixins.json into net.minecraft.server.packs.resources.SimplePreparableReloadListener -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:SinglePreparationResourceReloaderMixin from mod fabric-resource-conditions-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:SinglePreparationResourceReloaderMixin from mod fabric-resource-conditions-api-v1->@Inject::applyResourceConditions(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V doesn't use it's CallbackInfo -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:SinglePreparationResourceReloaderMixin from mod fabric-resource-conditions-api-v1->@Inject::applyResourceConditions(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V has 0 override(s) in child classes -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:SinglePreparationResourceReloaderMixin from mod fabric-resource-conditions-api-v1->@Inject::applyResourceConditions(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;)V won't be passed a CallbackInfo as a result -[19:08:23] [main/INFO] (me.alexdevs.solstice.Solstice) Initializing Solstice v1.9.0... -[19:08:23] [main/WARN] (me.alexdevs.solstice.Solstice) LuckPerms not available! It is recommended to install LuckPerms to configure permissions and groups. -[19:08:23] [main/INFO] (me.alexdevs.solstice.Solstice) Registering module provider 'me.alexdevs.solstice.modules.ModuleProvider' -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ComponentMixin from mixins.cardinal_components_base.json into org.ladysnake.cca.api.v3.component.Component -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) mixins.cardinal_components_base.json:ComponentMixin from mod cardinal-components-base: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_8 supports class version 52) -[19:08:23] [main/DEBUG] (FabricLoader/Entrypoint) No subscribers for entrypoint 'server' -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) Mixing ServerPropertiesHandlerMixin from fabric-resource-loader-v0.mixins.json into net.minecraft.server.dedicated.DedicatedServerProperties -[19:08:23] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:ServerPropertiesHandlerMixin from mod fabric-resource-loader-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:23] [main/ERROR] (net.minecraft.server.dedicated.Settings) Failed to load properties from file: server.properties -java.nio.file.NoSuchFileException: server.properties - at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85) ~[?:?] - at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103) ~[?:?] - at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108) ~[?:?] - at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:234) ~[?:?] - at java.base/java.nio.file.Files.newByteChannel(Files.java:380) ~[?:?] - at java.base/java.nio.file.Files.newByteChannel(Files.java:432) ~[?:?] - at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420) ~[?:?] - at java.base/java.nio.file.Files.newInputStream(Files.java:160) ~[?:?] - at knot/net.minecraft.server.dedicated.Settings.loadFromFile(Settings.java:62) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] - at knot/net.minecraft.server.dedicated.DedicatedServerProperties.fromFile(DedicatedServerProperties.java:141) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] - at knot/net.minecraft.server.dedicated.DedicatedServerSettings.(DedicatedServerSettings.java:12) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] - at knot/net.minecraft.server.Main.main(Main.java:114) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] - at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) [fabric-loader-0.16.14.jar:?] - at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.16.14.jar:?] - at net.fabricmc.loader.impl.launch.knot.KnotServer.main(KnotServer.java:23) [fabric-loader-0.16.14.jar:?] - at net.fabricmc.devlaunchinjector.Main.main(Main.java:86) [dev-launch-injector-0.2.1+build.8.jar:?] -[19:08:24] [main/DEBUG] (FabricLoader/Mixin) Mixing ResourcePackProfileMixin from fabric-resource-conditions-api-v1.mixins.json into net.minecraft.server.packs.repository.Pack -[19:08:24] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-conditions-api-v1.mixins.json:ResourcePackProfileMixin from mod fabric-resource-conditions-api-v1: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:24] [main/DEBUG] (FabricLoader/Mixin) Mixing ResourcePackProfileMixin from fabric-resource-loader-v0.mixins.json into net.minecraft.server.packs.repository.Pack -[19:08:24] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:ResourcePackProfileMixin from mod fabric-resource-loader-v0: Class version 65 required is higher than the class version supported by the current version of Mixin (JAVA_17 supports class version 61) -[19:08:24] [main/DEBUG] (FabricLoader/Mixin) Renaming synthetic method lambda$static$0(Ljava/util/Set;)Z to md50bf59$fabric-resource-loader-v0$lambda$static$0$0 in fabric-resource-loader-v0.mixins.json:ResourcePackProfileMixin from mod fabric-resource-loader-v0 -[19:08:24] [main/DEBUG] (FabricLoader/Mixin) fabric-resource-loader-v0.mixins.json:ResourcePackProfileMixin from mod fabric-resource-loader-v0->@Inject::onCreateResourcePack(Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V does use it's CallbackInfoReturnable -[19:08:24] [main/WARN] (net.minecraft.server.Eula) Failed to load eula.txt -[19:08:24] [main/INFO] (net.minecraft.server.Main) You need to agree to the EULA in order to run the server. Go to eula.txt for more info. diff --git a/fabric/runs/server/logs/latest.log b/fabric/runs/server/logs/latest.log deleted file mode 100644 index b5abcfcc..00000000 --- a/fabric/runs/server/logs/latest.log +++ /dev/null @@ -1,81 +0,0 @@ -[19:08:13] [main/INFO] (FabricLoader/GameProvider) Loading Minecraft 1.21.1 with Fabric Loader 0.16.14 -[19:08:13] [main/WARN] (FabricLoader/Resolution) Warnings were found! - - Mod 'Solstice Essentials' (solstice) 1.9.0 recommends any version of luckperms, which is missing! - - You should install any version of luckperms for the optimal experience. -[19:08:13] [main/INFO] (FabricLoader) Loading 48 mods: - - cardinal-components-base 6.1.0 - - cardinal-components-entity 6.1.0 - - fabric-api 0.116.1+1.21.1 - - fabric-api-base 0.4.42+6573ed8c48 - - fabric-api-lookup-api-v1 1.6.71+b559734419 - - fabric-biome-api-v1 13.0.31+d527f9fd19 - - fabric-block-api-v1 1.1.0+0bc3503219 - - fabric-block-view-api-v2 1.0.11+ebb2264e19 - - fabric-command-api-v1 1.2.49+f71b366f19 - - fabric-command-api-v2 2.2.28+6ced4dd919 - - fabric-commands-v0 0.2.66+df3654b319 - - fabric-content-registries-v0 8.0.19+b559734419 - - fabric-convention-tags-v1 2.1.5+7f945d5b19 - - fabric-convention-tags-v2 2.11.1+a406e79519 - - fabric-crash-report-info-v1 0.2.29+0af3f5a719 - - fabric-data-attachment-api-v1 1.4.5+6116a37819 - - fabric-data-generation-api-v1 20.2.29+16c4ae2519 - - fabric-dimensions-v1 4.0.0+6fc22b9919 - - fabric-entity-events-v1 1.8.0+2b27e0a419 - - fabric-events-interaction-v0 0.7.13+ba9dae0619 - - fabric-game-rule-api-v1 1.0.53+6ced4dd919 - - fabric-gametest-api-v1 2.0.5+6fc22b9919 - - fabric-item-api-v1 11.1.1+d5debaed19 - - fabric-item-group-api-v1 4.1.7+def88e3a19 - - fabric-lifecycle-events-v1 2.6.0+0865547519 - - fabric-loot-api-v2 3.0.15+3f89f5a519 - - fabric-loot-api-v3 1.0.3+3f89f5a519 - - fabric-message-api-v1 6.0.14+8aaf3aca19 - - fabric-networking-api-v1 4.3.0+c7469b2119 - - fabric-object-builder-api-v1 15.2.1+40875a9319 - - fabric-particles-v1 4.0.2+6573ed8c19 - - fabric-recipe-api-v1 5.0.14+248df81c19 - - fabric-registry-sync-v0 5.2.0+34f5d91419 - - fabric-rendering-data-attachment-v1 0.3.49+73761d2e19 - - fabric-rendering-fluids-v1 3.1.6+1daea21519 - - fabric-resource-conditions-api-v1 4.3.0+8dc279b119 - - fabric-resource-loader-v0 1.3.1+5b5275af19 - - fabric-screen-handler-api-v1 1.3.88+b559734419 - - fabric-transfer-api-v1 5.4.3+c24bd99419 - - fabric-transitive-access-wideners-v1 6.2.0+45b9699719 - - fabricloader 0.16.14 - - java 21 - - minecraft 1.21.1 - - mixinextras 0.4.0 - - placeholder-api 2.4.2+1.21 - - sgui 1.9.1+1.21.1 - - solstice 1.9.0 - - trinkets 3.10.0 -[19:08:14] [main/INFO] (FabricLoader/Mixin) SpongePowered MIXIN Subsystem Version=0.8.7 Source=file:/F:/.gradle/caches/modules-2/files-2.1/net.fabricmc/sponge-mixin/0.15.0+mixin.0.8.7/2ce1c5d57a061f3e259ec30b8b0cb2dc889c5156/sponge-mixin-0.15.0+mixin.0.8.7.jar Service=Knot/Fabric Env=SERVER -[19:08:14] [main/INFO] (FabricLoader/Mixin) Loaded Fabric development mappings for mixin remapper! -[19:08:14] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_17 -[19:08:14] [main/INFO] (FabricLoader/Mixin) Compatibility level set to JAVA_21 -[19:08:15] [main/INFO] (FabricLoader/MixinExtras|Service) Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.0). -[19:08:23] [main/INFO] (Solstice) Initializing Solstice v1.9.0... -[19:08:23] [main/WARN] (Solstice) LuckPerms not available! It is recommended to install LuckPerms to configure permissions and groups. -[19:08:23] [main/INFO] (Solstice) Registering module provider 'me.alexdevs.solstice.modules.ModuleProvider' -[19:08:23] [main/ERROR] (Minecraft) Failed to load properties from file: server.properties -java.nio.file.NoSuchFileException: server.properties - at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85) ~[?:?] - at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103) ~[?:?] - at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108) ~[?:?] - at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:234) ~[?:?] - at java.base/java.nio.file.Files.newByteChannel(Files.java:380) ~[?:?] - at java.base/java.nio.file.Files.newByteChannel(Files.java:432) ~[?:?] - at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420) ~[?:?] - at java.base/java.nio.file.Files.newInputStream(Files.java:160) ~[?:?] - at knot/net.minecraft.server.dedicated.Settings.loadFromFile(Settings.java:62) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] - at knot/net.minecraft.server.dedicated.DedicatedServerProperties.fromFile(DedicatedServerProperties.java:141) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] - at knot/net.minecraft.server.dedicated.DedicatedServerSettings.(DedicatedServerSettings.java:12) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] - at knot/net.minecraft.server.Main.main(Main.java:114) [minecraft-merged-9beed7dc48-1.21.1-loom.mappings.1_21_1.layered+hash.730628366-v2.jar:?] - at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:480) [fabric-loader-0.16.14.jar:?] - at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.16.14.jar:?] - at net.fabricmc.loader.impl.launch.knot.KnotServer.main(KnotServer.java:23) [fabric-loader-0.16.14.jar:?] - at net.fabricmc.devlaunchinjector.Main.main(Main.java:86) [dev-launch-injector-0.2.1+build.8.jar:?] -[19:08:24] [main/WARN] (Minecraft) Failed to load eula.txt -[19:08:24] [main/INFO] (Minecraft) You need to agree to the EULA in order to run the server. Go to eula.txt for more info. diff --git a/fabric/runs/server/server.properties b/fabric/runs/server/server.properties deleted file mode 100644 index 4e61c2f7..00000000 --- a/fabric/runs/server/server.properties +++ /dev/null @@ -1,63 +0,0 @@ -#Minecraft server properties -#Tue Jun 10 19:08:24 PDT 2025 -accepts-transfers=false -allow-flight=false -allow-nether=true -broadcast-console-to-ops=true -broadcast-rcon-to-ops=true -bug-report-link= -difficulty=easy -enable-command-block=false -enable-jmx-monitoring=false -enable-query=false -enable-rcon=false -enable-status=true -enforce-secure-profile=true -enforce-whitelist=false -entity-broadcast-range-percentage=100 -force-gamemode=false -function-permission-level=2 -gamemode=survival -generate-structures=true -generator-settings={} -hardcore=false -hide-online-players=false -initial-disabled-packs= -initial-enabled-packs=vanilla,fabric,fabric-convention-tags-v2,fabric-gametest-api-v1,trinkets -level-name=world -level-seed= -level-type=minecraft\:normal -log-ips=true -max-chained-neighbor-updates=1000000 -max-players=20 -max-tick-time=60000 -max-world-size=29999984 -motd=A Minecraft Server -network-compression-threshold=256 -online-mode=true -op-permission-level=4 -player-idle-timeout=0 -prevent-proxy-connections=false -pvp=true -query.port=25565 -rate-limit=0 -rcon.password= -rcon.port=25575 -region-file-compression=deflate -require-resource-pack=false -resource-pack= -resource-pack-id= -resource-pack-prompt= -resource-pack-sha1= -server-ip= -server-port=25565 -simulation-distance=10 -spawn-animals=true -spawn-monsters=true -spawn-npcs=true -spawn-protection=16 -sync-chunk-writes=true -text-filtering-config= -use-native-transport=true -view-distance=10 -white-list=false diff --git a/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricPlatform.java b/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricPlatform.java index c1843fdc..a44971d9 100644 --- a/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricPlatform.java +++ b/fabric/src/main/java/me/alexdevs/solstice/fabric/FabricPlatform.java @@ -37,6 +37,7 @@ public void init() { .onDisconnect(handler.getPlayer(), server)); EntitySleepEvents.ALLOW_SLEEP_TIME.register(ProxyEntitySleepEvents.ALLOW_SLEEP_TIME.invoker()::allowSleepTime); + EntitySleepEvents.ALLOW_RESETTING_TIME.register(ProxyEntitySleepEvents.ALLOW_RESETTING_TIME.invoker()::allowResettingTime); } @Override diff --git a/fabric/src/main/java/me/alexdevs/solstice/fabric/SolsticeFabric.java b/fabric/src/main/java/me/alexdevs/solstice/fabric/SolsticeFabric.java index cf5d8206..a71b4165 100644 --- a/fabric/src/main/java/me/alexdevs/solstice/fabric/SolsticeFabric.java +++ b/fabric/src/main/java/me/alexdevs/solstice/fabric/SolsticeFabric.java @@ -1,16 +1,11 @@ package me.alexdevs.solstice.fabric; import me.alexdevs.solstice.Solstice; -import me.alexdevs.solstice.api.platform.PlatformHelper; -import me.alexdevs.solstice.integrations.TrinketsApiProxy; import net.fabricmc.api.ModInitializer; public class SolsticeFabric implements ModInitializer { @Override public void onInitialize() { - PlatformHelper.set(new FabricPlatform()); - TrinketsApiProxy.set(new FabricTrinketsApi()); - new Solstice().init(); } } diff --git a/fabric/src/main/resources/META-INF/services/me.alexdevs.solstice.api.platform.PlatformHelper b/fabric/src/main/resources/META-INF/services/me.alexdevs.solstice.api.platform.PlatformHelper new file mode 100644 index 00000000..7f1ed3d0 --- /dev/null +++ b/fabric/src/main/resources/META-INF/services/me.alexdevs.solstice.api.platform.PlatformHelper @@ -0,0 +1 @@ +me.alexdevs.solstice.fabric.FabricPlatform \ No newline at end of file diff --git a/fabric/src/main/resources/META-INF/services/me.alexdevs.solstice.integrations.TrinketsApiProxy b/fabric/src/main/resources/META-INF/services/me.alexdevs.solstice.integrations.TrinketsApiProxy new file mode 100644 index 00000000..13e7ce22 --- /dev/null +++ b/fabric/src/main/resources/META-INF/services/me.alexdevs.solstice.integrations.TrinketsApiProxy @@ -0,0 +1 @@ +me.alexdevs.solstice.fabric.FabricTrinketsApi \ No newline at end of file diff --git a/neoforge/build.gradle.kts b/neoforge/build.gradle.kts index 3945d662..e28c3429 100644 --- a/neoforge/build.gradle.kts +++ b/neoforge/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("multiloader-loader") id("net.neoforged.moddev") + id("com.gradleup.shadow") } val localRuntime: Configuration by configurations.creating { @@ -8,6 +9,11 @@ val localRuntime: Configuration by configurations.creating { isCanBeConsumed = false } +val shadowDep: Configuration by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = true +} + neoForge { version = "neo_version"() @@ -69,8 +75,23 @@ dependencies { compileOnly("net.luckperms:api:5.4") localRuntime("net.luckperms:api:5.4") + + jarJar("net.kyori:option:1.1.0") + shadowDep(project(":common")) +} + +tasks.jar { + archiveClassifier = "dev" +} + +tasks.shadowJar { + archiveClassifier = "" + from(tasks.jarJar) + configurations.set(listOf(shadowDep)) + destinationDirectory.set(rootProject.layout.buildDirectory.dir("artifacts")) } +tasks.build.get().finalizedBy(tasks.shadowJar) sourceSets.main.get().resources { srcDir("src/generated/resources") } configurations.runtimeClasspath.get().extendsFrom(localRuntime) diff --git a/neoforge/src/main/java/me/alexdevs/solstice/neoforge/SolsticeNeoForge.java b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/SolsticeNeoForge.java index 37bef4db..ac556343 100644 --- a/neoforge/src/main/java/me/alexdevs/solstice/neoforge/SolsticeNeoForge.java +++ b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/SolsticeNeoForge.java @@ -1,8 +1,6 @@ package me.alexdevs.solstice.neoforge; import me.alexdevs.solstice.Solstice; -import me.alexdevs.solstice.api.platform.PlatformHelper; -import me.alexdevs.solstice.integrations.TrinketsApiProxy; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; @@ -10,9 +8,6 @@ @Mod(Solstice.MOD_ID) public class SolsticeNeoForge { public SolsticeNeoForge(ModContainer mod, IEventBus bus) { - PlatformHelper.set(new NeoForgePlatform()); - TrinketsApiProxy.set(new EmptyTrinketsApi()); - new Solstice().init(); } } diff --git a/common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerMixin.java b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/mixin/PlayerMixin.java similarity index 94% rename from common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerMixin.java rename to neoforge/src/main/java/me/alexdevs/solstice/neoforge/mixin/PlayerMixin.java index af2030f1..c16c049b 100644 --- a/common/src/main/java/me/alexdevs/solstice/mixin/events/PlayerMixin.java +++ b/neoforge/src/main/java/me/alexdevs/solstice/neoforge/mixin/PlayerMixin.java @@ -1,4 +1,4 @@ -package me.alexdevs.solstice.mixin.events; +package me.alexdevs.solstice.neoforge.mixin; import me.alexdevs.solstice.api.events.proxy.ProxyEntitySleepEvents; import net.minecraft.world.entity.player.Player; diff --git a/neoforge/src/main/resources/META-INF/services/me.alexdevs.solstice.api.platform.PlatformHelper b/neoforge/src/main/resources/META-INF/services/me.alexdevs.solstice.api.platform.PlatformHelper new file mode 100644 index 00000000..28ac0ae3 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/services/me.alexdevs.solstice.api.platform.PlatformHelper @@ -0,0 +1 @@ +me.alexdevs.solstice.neoforge.NeoForgePlatform \ No newline at end of file diff --git a/neoforge/src/main/resources/META-INF/services/me.alexdevs.solstice.integrations.TrinketsApiProxy b/neoforge/src/main/resources/META-INF/services/me.alexdevs.solstice.integrations.TrinketsApiProxy new file mode 100644 index 00000000..b03769d1 --- /dev/null +++ b/neoforge/src/main/resources/META-INF/services/me.alexdevs.solstice.integrations.TrinketsApiProxy @@ -0,0 +1 @@ +me.alexdevs.solstice.neoforge.EmptyTrinketsApi \ No newline at end of file diff --git a/neoforge/src/main/resources/solstice-neoforge.mixins.json b/neoforge/src/main/resources/solstice-neoforge.mixins.json index 437ec59b..236e6d64 100644 --- a/neoforge/src/main/resources/solstice-neoforge.mixins.json +++ b/neoforge/src/main/resources/solstice-neoforge.mixins.json @@ -9,6 +9,7 @@ "defaultRequire": 1 }, "mixins": [ - "ServerPlayerMixin" + "ServerPlayerMixin", + "PlayerMixin" ] } \ No newline at end of file From d7087695297d32a286fdb0105c671595a49d7ba0 Mon Sep 17 00:00:00 2001 From: RedstoneWizard08 <94275204+RedstoneWizard08@users.noreply.github.com> Date: Wed, 11 Jun 2025 17:38:58 -0700 Subject: [PATCH 4/4] Add ping config --- .../solstice/core/coreModule/CoreModule.java | 7 ++----- .../coreModule/commands/ServerStatCommand.java | 3 ++- .../solstice/core/coreModule/data/CoreConfig.java | 3 +++ .../solstice/mixin/modules/core/RealPingMixin.java | 14 +++++++++++--- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java index 63cdc318..f70c478c 100644 --- a/common/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java +++ b/common/src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java @@ -68,15 +68,12 @@ public void init() { playerData.lastSeenDate = new Date(); playerData.logoffPosition = new ServerLocation(player); - Solstice.scheduler.schedule( - () -> { - Solstice.playerData.dispose(player.getUUID()); - }, 1, TimeUnit.SECONDS - ); + Solstice.scheduler.schedule(() -> Solstice.playerData.dispose(player.getUUID()), 1, TimeUnit.SECONDS); }); WorldSaveCallback.EVENT.register((server, suppressLogs, flush, force) -> { var uuids = server.getPlayerList().getPlayers().stream().map(Entity::getUUID).toList(); + Solstice.playerData.disposeMissing(uuids); }); } diff --git a/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java index 0305d72a..e4c255c0 100644 --- a/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java +++ b/common/src/main/java/me/alexdevs/solstice/core/coreModule/commands/ServerStatCommand.java @@ -31,13 +31,13 @@ public LiteralArgumentBuilder command(String name) { .executes(context -> { var locale = module.locale(); var placeholderContext = PlaceholderContext.of(context.getSource()); - var messages = new ArrayList(); messages.add(locale.get("stat.tps", placeholderContext)); var uptime = Duration.ofMillis(ManagementFactory.getRuntimeMXBean().getUptime()); var uptimeFormatted = TimeSpan.toShortString((int)uptime.getSeconds()); + messages.add(locale.get("stat.uptime", placeholderContext, Map.of( "uptime", Component.nullToEmpty(uptimeFormatted) ))); @@ -63,6 +63,7 @@ public LiteralArgumentBuilder command(String name) { ))); var text = Component.empty(); + text.append(locale.get("stat.title")); for(var message : messages) { diff --git a/common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java b/common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java index 1f866dd1..955dd10d 100644 --- a/common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java +++ b/common/src/main/java/me/alexdevs/solstice/core/coreModule/data/CoreConfig.java @@ -19,4 +19,7 @@ public class CoreConfig { @Comment("Format to use when hovering over the link in chat.") public String linkHover = "${url}"; + + @Comment("Force Minecraft to display the real ping numbers.") + public boolean useRealPing = true; } diff --git a/common/src/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java b/common/src/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java index d42ca265..3def5a19 100644 --- a/common/src/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java +++ b/common/src/main/java/me/alexdevs/solstice/mixin/modules/core/RealPingMixin.java @@ -1,6 +1,7 @@ package me.alexdevs.solstice.mixin.modules.core; import com.llamalad7.mixinextras.sugar.Local; +import me.alexdevs.solstice.core.coreModule.CoreModule; import net.minecraft.server.network.ServerCommonPacketListenerImpl; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; @@ -10,11 +11,18 @@ @Mixin(ServerCommonPacketListenerImpl.class) public abstract class RealPingMixin { - @Shadow - private int latency; + @Shadow private int latency; - @Redirect(method = "handleKeepAlive", at = @At(value = "FIELD", target = "Lnet/minecraft/server/network/ServerCommonPacketListenerImpl;latency:I", opcode = Opcodes.PUTFIELD)) + @Redirect( + method = "handleKeepAlive", at = @At( + value = "FIELD", + target = "Lnet/minecraft/server/network/ServerCommonPacketListenerImpl;latency:I", + opcode = Opcodes.PUTFIELD + ) + ) public void solstice$realPing(ServerCommonPacketListenerImpl instance, int value, @Local int i) { + if (!CoreModule.getConfig().useRealPing) return; + latency = i; } }