From bcbf91b39f84b6fccc07b95503613830e4af6e51 Mon Sep 17 00:00:00 2001 From: hypherionmc Date: Wed, 1 May 2024 13:26:18 +0200 Subject: [PATCH] [MAJOR] Implement new NOJANG modding system --- .idea/misc.xml | 2 +- .../craterlib/api/commands/CraterCommand.java | 53 ++++++++++++ .../event/client/CraterClientTickEvent.java | 26 ------ .../event/client/CraterSinglePlayerEvent.java | 30 ------- .../api/event/client/LateInitEvent.java | 29 ------- .../event/client/PlayerJoinRealmEvent.java | 22 ----- .../api/event/client/ScreenEvent.java | 49 ----------- .../event/common/CraterLivingDeathEvent.java | 29 ------- .../event/server/CraterAdvancementEvent.java | 53 ------------ .../api/event/server/CraterCommandEvent.java | 46 ---------- .../api/event/server/CraterPlayerEvent.java | 38 -------- .../server/CraterRegisterCommandEvent.java | 23 ----- .../event/server/CraterServerChatEvent.java | 44 ---------- .../server/CraterServerLifecycleEvent.java | 49 ----------- .../event/server/MessageBroadcastEvent.java | 43 ---------- .../api/event/server/PlayerPreLoginEvent.java | 40 --------- .../events/client/CraterClientTickEvent.java | 14 +++ .../client/CraterSinglePlayerEvent.java | 21 +++++ .../api/events/client/LateInitEvent.java | 16 ++++ .../events/client/PlayerJoinRealmEvent.java | 14 +++ .../api/events/client/ScreenEvent.java | 28 ++++++ .../events/common/CraterPlayerDeathEvent.java | 21 +++++ .../events/server/CraterAdvancementEvent.java | 34 ++++++++ .../api/events/server/CraterCommandEvent.java | 58 +++++++++++++ .../api/events/server/CraterPlayerEvent.java | 30 +++++++ .../server/CraterRegisterCommandEvent.java | 15 ++++ .../events/server/CraterServerChatEvent.java | 26 ++++++ .../server/CraterServerLifecycleEvent.java | 34 ++++++++ .../events/server/MessageBroadcastEvent.java | 20 +++++ .../events/server/PlayerPreLoginEvent.java | 20 +++++ .../api/networking/CraterNetworkHandler.java | 14 +-- .../core/config/ConfigController.java | 5 +- .../craterlib/core/event/CraterEvent.java | 9 +- .../craterlib/core/event/CraterEventBus.java | 2 +- .../core/event/CraterEventPriority.java | 2 +- .../core/event/annot/Cancellable.java | 8 ++ .../core/event/annot/CraterEventListener.java | 2 +- .../CraterEventCancellationException.java | 2 +- .../core/network/CraterNetworkHandler.java | 2 +- .../core/networking/CraterPacketNetwork.java | 8 +- .../networking/DeferredPacketRegistrar.java | 8 +- .../core/networking/PacketRegistrar.java | 8 +- .../core/networking/PacketRegistry.java | 8 +- .../core/networking/data/PacketContext.java | 6 +- .../core/networking/data/PacketHolder.java | 12 +-- .../core/networking/data/PacketSide.java | 2 +- .../core/platform/ClientPlatform.java | 18 ++-- .../core/platform/CommonPlatform.java | 17 ++-- .../craterlib/core/platform/Environment.java | 2 +- .../core/platform/ModloaderEnvironment.java | 6 +- .../craterlib/mixin/events/CommandMixin.java | 4 +- .../mixin/events/LivingEntityMixin.java | 23 ----- .../mixin/events/PlayerAdvancementsMixin.java | 8 +- .../mixin/events/PlayerListMixin.java | 21 ++--- .../craterlib/mixin/events/PlayerMixin.java | 10 +-- .../mixin/events/ServerPlayerMixin.java | 10 +-- .../mixin/events/client/ClientLevelMixin.java | 5 +- .../mixin/events/client/MinecraftMixin.java | 3 +- .../events/client/RealmsMainScreenMixin.java | 9 +- .../advancements/BridgedAdvancement.java | 21 +++++ .../advancements/BridgedDisplayInfo.java | 29 +++++++ .../nojang/authlib/BridgedGameProfile.java | 29 +++++++ .../nojang/client/BridgedMinecraft.java | 9 ++ .../nojang/client/BridgedOptions.java | 15 ++++ .../multiplayer/BridgedClientLevel.java | 11 +++ .../commands/BridgedCommandSourceStack.java | 22 +++++ .../nojang/commands/CommandsRegistry.java | 81 +++++++++++++++++ .../nojang/nbt/BridgedCompoundTag.java | 49 +++++++++++ .../network/BridgedFriendlyByteBuf.java | 25 ++++++ .../craterlib/nojang/package-info.java | 9 ++ .../realmsclient/dto/BridgedRealmsServer.java | 11 +++ .../nojang/resources/ResourceIdentifier.java | 32 +++++++ .../nojang/server/BridgedMinecraftServer.java | 86 +++++++++++++++++++ .../world/entity/player/BridgedPlayer.java | 59 +++++++++++++ .../hypherionmc/craterlib/util/LangUtils.java | 28 ------ .../hypherionmc/craterlib/util/MathUtils.java | 41 --------- .../craterlib/util/RenderUtils.java | 70 --------------- .../craterlib/utils/ChatUtils.java | 80 +++++++++++++++++ .../InternalServiceUtil.java} | 7 +- .../{util => utils}/OptifineUtils.java | 4 +- .../src/main/resources/craterlib.mixins.json | 2 - .../craterlib/CraterLibInitializer.java | 20 +++-- .../client/CraterLibClientInitializer.java | 5 +- .../client/FabricClientPlatform.java | 15 ++-- .../common/FabricCommonPlatform.java | 12 +-- .../ServerGamePacketListenerImplMixin.java | 8 +- .../craterlib/mixin/TutorialMixin.java | 6 +- .../network/CraterFabricNetworkHandler.java | 29 ++++--- .../resources/craterlib.fabric.mixins.json | 1 + .../com/hypherionmc/craterlib/CraterLib.java | 6 +- .../craterlib/client/ForgeClientEvents.java | 5 +- .../craterlib/client/ForgeClientHelper.java | 15 ++-- .../craterlib/common/ForgeCommonHelper.java | 13 +-- .../craterlib/common/ForgeServerEvents.java | 17 ++-- .../mixin/ConfigScreenHandlerMixin.java | 2 - .../ServerGamePacketListenerImplMixin.java | 36 ++++++++ .../network/CraterForgeNetworkHandler.java | 31 +++++-- .../network/ForgeNetworkHandler.java | 2 +- .../resources/craterlib.forge.mixins.json | 1 + .../com/hypherionmc/craterlib/CraterLib.java | 9 +- .../client/NeoForgeClientEvents.java | 5 +- .../client/NeoForgeClientHelper.java | 16 ++-- .../common/NeoForgeCommonHelper.java | 14 +-- .../common/NeoForgeServerEvents.java | 17 ++-- .../mixin/ConfigScreenHandlerMixin.java | 2 - .../ServerGamePacketListenerImplMixin.java | 36 ++++++++ .../network/CraterNeoForgeNetworkHandler.java | 28 ++++-- .../craterlib/network/NeoForgePacket.java | 5 +- .../resources/craterlib.neoforge.mixins.json | 1 + build.gradle | 5 ++ gradle.properties | 11 ++- gradle/wrapper/gradle-wrapper.properties | 2 +- 112 files changed, 1336 insertions(+), 920 deletions(-) create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/commands/CraterCommand.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/client/CraterClientTickEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/client/CraterSinglePlayerEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/client/LateInitEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/client/PlayerJoinRealmEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/client/ScreenEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/common/CraterLivingDeathEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterAdvancementEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterCommandEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterPlayerEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterRegisterCommandEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterServerChatEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterServerLifecycleEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/server/MessageBroadcastEvent.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/event/server/PlayerPreLoginEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/client/CraterClientTickEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/client/CraterSinglePlayerEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/client/LateInitEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/client/PlayerJoinRealmEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/client/ScreenEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterAdvancementEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterCommandEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterPlayerEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterRegisterCommandEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterServerChatEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterServerLifecycleEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/server/MessageBroadcastEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/api/events/server/PlayerPreLoginEvent.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/core/event/annot/Cancellable.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/mixin/events/LivingEntityMixin.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/advancements/BridgedAdvancement.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/advancements/BridgedDisplayInfo.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/authlib/BridgedGameProfile.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedOptions.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedClientLevel.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/CommandsRegistry.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/nbt/BridgedCompoundTag.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/network/BridgedFriendlyByteBuf.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/package-info.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/realmsclient/dto/BridgedRealmsServer.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/resources/ResourceIdentifier.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/server/BridgedMinecraftServer.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/nojang/world/entity/player/BridgedPlayer.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/util/LangUtils.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/util/MathUtils.java delete mode 100644 Common/src/main/java/com/hypherionmc/craterlib/util/RenderUtils.java create mode 100644 Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java rename Common/src/main/java/com/hypherionmc/craterlib/{util/ServiceUtil.java => utils/InternalServiceUtil.java} (89%) rename Common/src/main/java/com/hypherionmc/craterlib/{util => utils}/OptifineUtils.java (96%) rename {Common/src/main/java/com/hypherionmc/craterlib/mixin/events => Fabric/src/main/java/com/hypherionmc/craterlib/mixin}/ServerGamePacketListenerImplMixin.java (76%) create mode 100644 Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java create mode 100644 NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java diff --git a/.idea/misc.xml b/.idea/misc.xml index a37520a..121ee87 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -12,7 +12,7 @@ - + \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/commands/CraterCommand.java b/Common/src/main/java/com/hypherionmc/craterlib/api/commands/CraterCommand.java new file mode 100644 index 0000000..bef5990 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/commands/CraterCommand.java @@ -0,0 +1,53 @@ +package com.hypherionmc.craterlib.api.commands; + +import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile; +import com.hypherionmc.craterlib.nojang.commands.BridgedCommandSourceStack; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.mojang.brigadier.arguments.ArgumentType; +import lombok.Getter; +import net.minecraft.commands.arguments.GameProfileArgument; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.logging.log4j.util.TriConsumer; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.function.Consumer; + +@Getter +public class CraterCommand { + + private final HashMap, TriConsumer>> arguments = new LinkedHashMap<>(); + private Consumer executor; + + private final String commandName; + private int permissionLevel = 4; + + CraterCommand(String commandName) { + this.commandName = commandName; + } + + public static CraterCommand literal(String commandName) { + return new CraterCommand(commandName); + } + + public CraterCommand requiresPermission(int perm) { + this.permissionLevel = perm; + return this; + } + + public CraterCommand withGameProfileArgument(String key, TriConsumer, BridgedCommandSourceStack> executor) { + arguments.put(key, Pair.of(GameProfileArgument.gameProfile(), executor)); + return this; + } + + public CraterCommand executes(Consumer ctx) { + executor = ctx; + return this; + } + + public boolean hasArguments() { + return !arguments.isEmpty(); + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/CraterClientTickEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/CraterClientTickEvent.java deleted file mode 100644 index 1360d9d..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/CraterClientTickEvent.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.hypherionmc.craterlib.api.event.client; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.client.multiplayer.ClientLevel; - -/** - * @author HypherionSA - * Cross Modloader Client Tick Event. - */ -public class CraterClientTickEvent extends CraterEvent { - - private final ClientLevel level; - - public CraterClientTickEvent(ClientLevel level) { - this.level = level; - } - - public ClientLevel getLevel() { - return level; - } - - @Override - public boolean canCancel() { - return false; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/CraterSinglePlayerEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/CraterSinglePlayerEvent.java deleted file mode 100644 index 3f7b87d..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/CraterSinglePlayerEvent.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.hypherionmc.craterlib.api.event.client; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.world.entity.player.Player; - -public class CraterSinglePlayerEvent extends CraterEvent { - - private final Player player; - - public CraterSinglePlayerEvent(Player player) { - this.player = player; - } - - public Player getPlayer() { - return player; - } - - @Override - public boolean canCancel() { - return false; - } - - public static class PlayerLogin extends CraterSinglePlayerEvent { - - public PlayerLogin(Player player) { - super(player); - } - - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/LateInitEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/LateInitEvent.java deleted file mode 100644 index 726e0fb..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/LateInitEvent.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.hypherionmc.craterlib.api.event.client; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.client.Minecraft; -import net.minecraft.client.Options; - -public class LateInitEvent extends CraterEvent { - - private final Minecraft minecraft; - private final Options options; - - public LateInitEvent(Minecraft minecraft, Options options) { - this.minecraft = minecraft; - this.options = options; - } - - public Minecraft getMinecraft() { - return minecraft; - } - - public Options getOptions() { - return options; - } - - @Override - public boolean canCancel() { - return false; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/PlayerJoinRealmEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/PlayerJoinRealmEvent.java deleted file mode 100644 index 97a4cd2..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/PlayerJoinRealmEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.hypherionmc.craterlib.api.event.client; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import com.mojang.realmsclient.dto.RealmsServer; - -public class PlayerJoinRealmEvent extends CraterEvent { - - private final RealmsServer server; - - public PlayerJoinRealmEvent(RealmsServer server) { - this.server = server; - } - - public RealmsServer getServer() { - return server; - } - - @Override - public boolean canCancel() { - return false; - } -} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/ScreenEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/ScreenEvent.java deleted file mode 100644 index f11e83e..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/client/ScreenEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.hypherionmc.craterlib.api.event.client; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.client.gui.screens.Screen; - -import java.util.Objects; - -public class ScreenEvent extends CraterEvent { - - private final Screen screen; - - protected ScreenEvent(Screen screen) { - this.screen = Objects.requireNonNull(screen); - } - - public Screen getScreen() { - return screen; - } - - @Override - public boolean canCancel() { - return false; - } - - public static class Opening extends ScreenEvent { - - private final Screen currentScreen; - private Screen newScreen; - - public Opening(Screen currentScreen, Screen newScreen) { - super(newScreen); - this.currentScreen = currentScreen; - this.newScreen = newScreen; - } - - public Screen getCurrentScreen() { - return currentScreen; - } - - public Screen getNewScreen() { - return newScreen; - } - - public void setNewScreen(Screen newScreen) { - this.newScreen = newScreen; - } - - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/common/CraterLivingDeathEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/common/CraterLivingDeathEvent.java deleted file mode 100644 index db5e053..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/common/CraterLivingDeathEvent.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.hypherionmc.craterlib.api.event.common; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.LivingEntity; - -public class CraterLivingDeathEvent extends CraterEvent { - - private final DamageSource damageSource; - private final LivingEntity entity; - - public CraterLivingDeathEvent(LivingEntity entity, DamageSource source) { - this.entity = entity; - this.damageSource = source; - } - - public LivingEntity getEntity() { - return entity; - } - - public DamageSource getDamageSource() { - return damageSource; - } - - @Override - public boolean canCancel() { - return true; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterAdvancementEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterAdvancementEvent.java deleted file mode 100644 index 3a3c774..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterAdvancementEvent.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.hypherionmc.craterlib.api.event.server; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.advancements.Advancement; -import net.minecraft.advancements.DisplayInfo; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; - -import java.util.Optional; - -public class CraterAdvancementEvent extends CraterEvent { - - private final Advancement advancement; - private final Player player; - private final Component title; - private final Component description; - - public CraterAdvancementEvent(Player player, Advancement advancement) { - this.player = player; - this.advancement = advancement; - - Optional displayInfo = advancement.display(); - - if (displayInfo.isPresent()) { - this.title = displayInfo.get().getTitle(); - this.description = displayInfo.get().getDescription(); - } else { - this.title = Component.literal("Unknown"); - this.description = Component.literal("Unknown"); - } - } - - public Advancement getAdvancement() { - return advancement; - } - - public Component getDescription() { - return description; - } - - public Component getTitle() { - return title; - } - - public Player getPlayer() { - return player; - } - - @Override - public boolean canCancel() { - return false; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterCommandEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterCommandEvent.java deleted file mode 100644 index 53604cc..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterCommandEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.hypherionmc.craterlib.api.event.server; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import com.mojang.brigadier.ParseResults; -import net.minecraft.commands.CommandSourceStack; - -public class CraterCommandEvent extends CraterEvent { - - private ParseResults parseResults; - private Throwable exception; - private String command; - - public CraterCommandEvent(ParseResults parseResults, String command) { - this.parseResults = parseResults; - this.command = command; - } - - public ParseResults getParseResults() { - return parseResults; - } - - public void setParseResults(ParseResults parseResults) { - this.parseResults = parseResults; - } - - public Throwable getException() { - return exception; - } - - public void setException(Throwable exception) { - this.exception = exception; - } - - public String getCommand() { - return command; - } - - public void setCommand(String command) { - this.command = command; - } - - @Override - public boolean canCancel() { - return true; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterPlayerEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterPlayerEvent.java deleted file mode 100644 index 3c99592..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterPlayerEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.hypherionmc.craterlib.api.event.server; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.server.level.ServerPlayer; - -public class CraterPlayerEvent extends CraterEvent { - - private final ServerPlayer player; - - public CraterPlayerEvent(ServerPlayer player) { - this.player = player; - } - - public ServerPlayer getPlayer() { - return player; - } - - @Override - public boolean canCancel() { - return false; - } - - public static class PlayerLoggedIn extends CraterPlayerEvent { - - public PlayerLoggedIn(ServerPlayer player) { - super(player); - } - - } - - public static class PlayerLoggedOut extends CraterPlayerEvent { - - public PlayerLoggedOut(ServerPlayer player) { - super(player); - } - - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterRegisterCommandEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterRegisterCommandEvent.java deleted file mode 100644 index 5fe36e1..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterRegisterCommandEvent.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.hypherionmc.craterlib.api.event.server; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import com.mojang.brigadier.CommandDispatcher; -import net.minecraft.commands.CommandSourceStack; - -public class CraterRegisterCommandEvent extends CraterEvent { - - private final CommandDispatcher dispatcher; - - public CraterRegisterCommandEvent(CommandDispatcher dispatcher) { - this.dispatcher = dispatcher; - } - - public CommandDispatcher getDispatcher() { - return dispatcher; - } - - @Override - public boolean canCancel() { - return false; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterServerChatEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterServerChatEvent.java deleted file mode 100644 index e069042..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterServerChatEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.hypherionmc.craterlib.api.event.server; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; - -public class CraterServerChatEvent extends CraterEvent { - - private final String message, username; - private final ServerPlayer player; - private Component component; - - public CraterServerChatEvent(ServerPlayer player, String message, Component component) { - this.message = message; - this.player = player; - this.username = player.getGameProfile().getName(); - this.component = component; - } - - public Component getComponent() { - return component; - } - - public void setComponent(Component component) { - this.component = component; - } - - public String getUsername() { - return username; - } - - public ServerPlayer getPlayer() { - return player; - } - - public String getMessage() { - return message; - } - - @Override - public boolean canCancel() { - return true; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterServerLifecycleEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterServerLifecycleEvent.java deleted file mode 100644 index 584b3f6..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/CraterServerLifecycleEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.hypherionmc.craterlib.api.event.server; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.server.MinecraftServer; - -public class CraterServerLifecycleEvent extends CraterEvent { - - public CraterServerLifecycleEvent() { - } - - @Override - public boolean canCancel() { - return false; - } - - public static class Starting extends CraterServerLifecycleEvent { - - private final MinecraftServer server; - - public Starting(MinecraftServer server) { - this.server = server; - } - - public MinecraftServer getServer() { - return server; - } - } - - public static class Started extends CraterServerLifecycleEvent { - - public Started() { - } - - } - - public static class Stopping extends CraterServerLifecycleEvent { - - public Stopping() { - } - - } - - public static class Stopped extends CraterServerLifecycleEvent { - - public Stopped() { - } - - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/MessageBroadcastEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/MessageBroadcastEvent.java deleted file mode 100644 index 69207e6..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/MessageBroadcastEvent.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.hypherionmc.craterlib.api.event.server; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerPlayer; - -import java.util.function.Function; - -public class MessageBroadcastEvent extends CraterEvent { - - private final Component component; - private final Function function; - private final boolean bl; - private final String threadName; - - public MessageBroadcastEvent(Component component, Function function, boolean bl, String threadName) { - this.component = component; - this.function = function; - this.bl = bl; - this.threadName = threadName; - } - - public Component getComponent() { - return component; - } - - public boolean isBl() { - return bl; - } - - public Function getFunction() { - return function; - } - - public String getThreadName() { - return threadName; - } - - @Override - public boolean canCancel() { - return false; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/PlayerPreLoginEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/PlayerPreLoginEvent.java deleted file mode 100644 index 4a4efe9..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/event/server/PlayerPreLoginEvent.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.hypherionmc.craterlib.api.event.server; - -import com.hypherionmc.craterlib.core.event.CraterEvent; -import com.mojang.authlib.GameProfile; -import net.minecraft.network.chat.Component; - -import java.net.SocketAddress; - -public class PlayerPreLoginEvent extends CraterEvent { - - private final SocketAddress address; - private final GameProfile gameProfile; - private Component message; - - public PlayerPreLoginEvent(SocketAddress address, GameProfile profile) { - this.address = address; - this.gameProfile = profile; - } - - public Component getMessage() { - return message; - } - - public void setMessage(Component message) { - this.message = message; - } - - public GameProfile getGameProfile() { - return gameProfile; - } - - public SocketAddress getAddress() { - return address; - } - - @Override - public boolean canCancel() { - return false; - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/CraterClientTickEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/CraterClientTickEvent.java new file mode 100644 index 0000000..c68c596 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/CraterClientTickEvent.java @@ -0,0 +1,14 @@ +package com.hypherionmc.craterlib.api.events.client; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public class CraterClientTickEvent extends CraterEvent { + + private final BridgedClientLevel level; + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/CraterSinglePlayerEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/CraterSinglePlayerEvent.java new file mode 100644 index 0000000..ab671f0 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/CraterSinglePlayerEvent.java @@ -0,0 +1,21 @@ +package com.hypherionmc.craterlib.api.events.client; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public class CraterSinglePlayerEvent extends CraterEvent { + + private final BridgedPlayer player; + + public static class PlayerLogin extends CraterSinglePlayerEvent { + + public PlayerLogin(BridgedPlayer player) { + super(player); + } + + } +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/LateInitEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/LateInitEvent.java new file mode 100644 index 0000000..33c06fb --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/LateInitEvent.java @@ -0,0 +1,16 @@ +package com.hypherionmc.craterlib.api.events.client; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.BridgedOptions; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public class LateInitEvent extends CraterEvent { + + private final BridgedMinecraft minecraft; + private final BridgedOptions options; + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/PlayerJoinRealmEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/PlayerJoinRealmEvent.java new file mode 100644 index 0000000..1ef95de --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/PlayerJoinRealmEvent.java @@ -0,0 +1,14 @@ +package com.hypherionmc.craterlib.api.events.client; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.realmsclient.dto.BridgedRealmsServer; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public class PlayerJoinRealmEvent extends CraterEvent { + + private final BridgedRealmsServer server; + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/ScreenEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/ScreenEvent.java new file mode 100644 index 0000000..6d3ba24 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/client/ScreenEvent.java @@ -0,0 +1,28 @@ +package com.hypherionmc.craterlib.api.events.client; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.minecraft.client.gui.screens.Screen; + +// TODO NOJANG +@Getter +@RequiredArgsConstructor +public class ScreenEvent extends CraterEvent { + + private final Screen screen; + + @Getter + public static class Opening extends ScreenEvent { + + private final Screen currentScreen; + @Setter private Screen newScreen; + + public Opening(Screen currentScreen, Screen newScreen) { + super(newScreen); + this.currentScreen = currentScreen; + this.newScreen = newScreen; + } + } +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java new file mode 100644 index 0000000..02cd63c --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/common/CraterPlayerDeathEvent.java @@ -0,0 +1,21 @@ +package com.hypherionmc.craterlib.api.events.common; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; +import net.minecraft.world.damagesource.DamageSource; + +@RequiredArgsConstructor +@Getter +public class CraterPlayerDeathEvent extends CraterEvent { + + private final BridgedPlayer player; + private final DamageSource damageSource; + + public Component getDeathMessage() { + return ChatUtils.mojangToAdventure(damageSource.getLocalizedDeathMessage(player.toMojang())); + } +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterAdvancementEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterAdvancementEvent.java new file mode 100644 index 0000000..5cd659d --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterAdvancementEvent.java @@ -0,0 +1,34 @@ +package com.hypherionmc.craterlib.api.events.server; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.advancements.BridgedAdvancement; +import com.hypherionmc.craterlib.nojang.advancements.BridgedDisplayInfo; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import lombok.Getter; +import net.kyori.adventure.text.Component; + +import java.util.Optional; + +@Getter +public class CraterAdvancementEvent extends CraterEvent { + + private final BridgedAdvancement advancement; + private final BridgedPlayer player; + private final Component title; + private final Component description; + + public CraterAdvancementEvent(BridgedPlayer player, BridgedAdvancement advancement) { + this.advancement = advancement; + this.player = player; + + Optional displayInfo = advancement.displayInfo(); + + if (displayInfo.isPresent()) { + this.title = displayInfo.get().displayName(); + this.description = displayInfo.get().description(); + } else { + this.title = Component.text("Unknown"); + this.description = Component.text("Unknown"); + } + } +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterCommandEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterCommandEvent.java new file mode 100644 index 0000000..364cc22 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterCommandEvent.java @@ -0,0 +1,58 @@ +package com.hypherionmc.craterlib.api.events.server; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; +import com.mojang.brigadier.ParseResults; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.context.StringRange; +import lombok.Getter; +import lombok.Setter; +import net.kyori.adventure.text.Component; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.arguments.ComponentArgument; +import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.Nullable; + +@Getter +public class CraterCommandEvent extends CraterEvent { + + private final ParseResults parseResults; + @Setter private Throwable exception; + private final String command; + + private CraterCommandEvent(ParseResults parseResults, String command) { + this.parseResults = parseResults; + this.command = command; + } + + public static CraterCommandEvent of(ParseResults stack, String command) { + return new CraterCommandEvent(stack, command); + } + + public String getCommandString() { + return parseResults.getReader().getString(); + } + + @Nullable + public BridgedPlayer getPlayer() { + try { + Player p = parseResults.getContext().getLastChild().getSource().getPlayer(); + + if (p != null) + return BridgedPlayer.of(p); + } catch (Exception ignored) {} + + return null; + } + + public String getTarget() { + CommandContext context = parseResults.getContext().build(parseResults.getReader().getString()); + StringRange selector_range = parseResults.getContext().getArguments().get("targets").getRange(); + return context.getInput().substring(selector_range.getStart(), selector_range.getEnd()); + } + + public Component getMessage() { + return ChatUtils.mojangToAdventure(ComponentArgument.getComponent(parseResults.getContext().build(parseResults.getReader().getString()), "message")); + } +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterPlayerEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterPlayerEvent.java new file mode 100644 index 0000000..7eb3701 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterPlayerEvent.java @@ -0,0 +1,30 @@ +package com.hypherionmc.craterlib.api.events.server; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public class CraterPlayerEvent extends CraterEvent { + + private final BridgedPlayer player; + + public static class PlayerLoggedIn extends CraterPlayerEvent { + + public PlayerLoggedIn(BridgedPlayer player) { + super(player); + } + + } + + public static class PlayerLoggedOut extends CraterPlayerEvent { + + public PlayerLoggedOut(BridgedPlayer player) { + super(player); + } + + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterRegisterCommandEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterRegisterCommandEvent.java new file mode 100644 index 0000000..269065a --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterRegisterCommandEvent.java @@ -0,0 +1,15 @@ +package com.hypherionmc.craterlib.api.events.server; + +import com.hypherionmc.craterlib.api.commands.CraterCommand; +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.commands.CommandsRegistry; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class CraterRegisterCommandEvent extends CraterEvent { + + public void registerCommand(CraterCommand cmd) { + CommandsRegistry.INSTANCE.registerCommand(cmd); + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterServerChatEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterServerChatEvent.java new file mode 100644 index 0000000..6fd20eb --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterServerChatEvent.java @@ -0,0 +1,26 @@ +package com.hypherionmc.craterlib.api.events.server; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.core.event.annot.Cancellable; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.kyori.adventure.text.Component; + +@Cancellable +@Getter +public class CraterServerChatEvent extends CraterEvent { + + public final String message, username; + public final BridgedPlayer player; + @Setter private Component component; + + public CraterServerChatEvent(BridgedPlayer player, String message, Component component) { + this.message = message; + this.player = player; + this.username = player.getGameProfile().getName(); + this.component = component; + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterServerLifecycleEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterServerLifecycleEvent.java new file mode 100644 index 0000000..3f87d04 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/CraterServerLifecycleEvent.java @@ -0,0 +1,34 @@ +package com.hypherionmc.craterlib.api.events.server; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +public class CraterServerLifecycleEvent extends CraterEvent { + + @RequiredArgsConstructor + @Getter + public static class Starting extends CraterServerLifecycleEvent { + private final BridgedMinecraftServer server; + } + + @RequiredArgsConstructor + @Getter + public static class Started extends CraterServerLifecycleEvent { + private final BridgedMinecraftServer server; + } + + @RequiredArgsConstructor + @Getter + public static class Stopping extends CraterServerLifecycleEvent { + private final BridgedMinecraftServer server; + } + + @RequiredArgsConstructor + @Getter + public static class Stopped extends CraterServerLifecycleEvent { + private final BridgedMinecraftServer server; + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/MessageBroadcastEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/MessageBroadcastEvent.java new file mode 100644 index 0000000..6b11404 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/MessageBroadcastEvent.java @@ -0,0 +1,20 @@ +package com.hypherionmc.craterlib.api.events.server; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; + +import java.util.function.Function; + +@RequiredArgsConstructor +@Getter +public class MessageBroadcastEvent extends CraterEvent { + + private final Component component; + private final Function function; + private final boolean bl; + private final String threadName; + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/PlayerPreLoginEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/PlayerPreLoginEvent.java new file mode 100644 index 0000000..eaabffd --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/events/server/PlayerPreLoginEvent.java @@ -0,0 +1,20 @@ +package com.hypherionmc.craterlib.api.events.server; + +import com.hypherionmc.craterlib.core.event.CraterEvent; +import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import net.kyori.adventure.text.Component; + +import java.net.SocketAddress; + +@RequiredArgsConstructor +@Getter +public class PlayerPreLoginEvent extends CraterEvent { + + private final SocketAddress address; + private final BridgedGameProfile gameProfile; + @Setter private Component message; + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CraterNetworkHandler.java b/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CraterNetworkHandler.java index 6141a14..6b57e96 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CraterNetworkHandler.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CraterNetworkHandler.java @@ -1,7 +1,7 @@ package com.hypherionmc.craterlib.api.networking; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ServerPlayer; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import java.util.List; @@ -14,15 +14,15 @@ public interface CraterNetworkHandler { void sendToServer(T packet, boolean ignoreCheck); - void sendToClient(T packet, ServerPlayer player); + void sendToClient(T packet, BridgedPlayer player); - default void sendToClients(T packet, List players) { - for (ServerPlayer player : players) { + default void sendToClients(T packet, List players) { + for (BridgedPlayer player : players) { sendToClient(packet, player); } } - default void sendToAllClients(T packet, MinecraftServer server) { - sendToClients(packet, server.getPlayerList().getPlayers()); + default void sendToAllClients(T packet, BridgedMinecraftServer server) { + sendToClients(packet, server.getPlayers()); } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/config/ConfigController.java b/Common/src/main/java/com/hypherionmc/craterlib/core/config/ConfigController.java index af3d6c0..41c9471 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/config/ConfigController.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/config/ConfigController.java @@ -1,6 +1,7 @@ package com.hypherionmc.craterlib.core.config; import com.hypherionmc.craterlib.CraterConstants; +import lombok.Getter; import me.hypherionmc.moonconfig.core.file.FileWatcher; import org.jetbrains.annotations.ApiStatus; @@ -16,6 +17,7 @@ public final class ConfigController implements Serializable { /** * Cache of registered configs */ + @Getter private static final HashMap monitoredConfigs = new HashMap<>(); /** @@ -44,7 +46,4 @@ public final class ConfigController implements Serializable { } } - public static HashMap getMonitoredConfigs() { - return monitoredConfigs; - } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEvent.java b/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEvent.java index 4889ae3..89ff00a 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEvent.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEvent.java @@ -1,12 +1,15 @@ package com.hypherionmc.craterlib.core.event; +import com.hypherionmc.craterlib.core.event.annot.Cancellable; import com.hypherionmc.craterlib.core.event.exception.CraterEventCancellationException; -public abstract class CraterEvent { +public class CraterEvent { private boolean canceled = false; - public abstract boolean canCancel(); + private boolean canCancel() { + return this.getClass().isAnnotationPresent(Cancellable.class); + } public void cancelEvent() { try { @@ -24,4 +27,4 @@ public abstract class CraterEvent { return this.canceled; } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEventBus.java b/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEventBus.java index 751c102..74eeecc 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEventBus.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEventBus.java @@ -238,4 +238,4 @@ public final class CraterEventBus { } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEventPriority.java b/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEventPriority.java index 723b1cd..0c97134 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEventPriority.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/event/CraterEventPriority.java @@ -10,4 +10,4 @@ public class CraterEventPriority { public static final int HIGHER = 2; public static final int HIGHEST = 3; -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/event/annot/Cancellable.java b/Common/src/main/java/com/hypherionmc/craterlib/core/event/annot/Cancellable.java new file mode 100644 index 0000000..ee3c2fc --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/event/annot/Cancellable.java @@ -0,0 +1,8 @@ +package com.hypherionmc.craterlib.core.event.annot; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface Cancellable { +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/event/annot/CraterEventListener.java b/Common/src/main/java/com/hypherionmc/craterlib/core/event/annot/CraterEventListener.java index fb5291d..7b42490 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/event/annot/CraterEventListener.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/event/annot/CraterEventListener.java @@ -8,4 +8,4 @@ import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface CraterEventListener { int priority() default CraterEventPriority.NORMAL; -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/event/exception/CraterEventCancellationException.java b/Common/src/main/java/com/hypherionmc/craterlib/core/event/exception/CraterEventCancellationException.java index cf63609..fe2a8a3 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/event/exception/CraterEventCancellationException.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/event/exception/CraterEventCancellationException.java @@ -6,4 +6,4 @@ public class CraterEventCancellationException extends Exception { super(msg); } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/network/CraterNetworkHandler.java b/Common/src/main/java/com/hypherionmc/craterlib/core/network/CraterNetworkHandler.java index 8e6726e..564cfc0 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/network/CraterNetworkHandler.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/network/CraterNetworkHandler.java @@ -28,7 +28,7 @@ public interface CraterNetworkHandler { } default void sendToAll(CraterPacket packet) { - CommonPlatform.INSTANCE.getMCServer().getPlayerList().broadcastAll(this.toClientBound(packet)); + CommonPlatform.INSTANCE.getMCServer().toMojang().getPlayerList().broadcastAll(this.toClientBound(packet)); } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java index 483e701..da7ba92 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java @@ -1,8 +1,8 @@ package com.hypherionmc.craterlib.core.networking; import com.hypherionmc.craterlib.core.networking.data.PacketContext; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -30,7 +30,7 @@ public class CraterPacketNetwork { return delayedHandler; } - public static PacketRegistrar registerPacket(ResourceLocation id, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { + public static PacketRegistrar registerPacket(ResourceIdentifier id, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { if (INSTANCE != null) { return INSTANCE.packetRegistry.registerPacket(id, messageType, encoder, decoder, handler); } else { @@ -41,4 +41,4 @@ public class CraterPacketNetwork { public PacketRegistry getPacketRegistry() { return packetRegistry; } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/DeferredPacketRegistrar.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/DeferredPacketRegistrar.java index 8e66b62..25556f4 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/DeferredPacketRegistrar.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/DeferredPacketRegistrar.java @@ -3,8 +3,8 @@ package com.hypherionmc.craterlib.core.networking; import com.hypherionmc.craterlib.core.networking.data.PacketContext; import com.hypherionmc.craterlib.core.networking.data.PacketHolder; import com.hypherionmc.craterlib.core.networking.data.PacketSide; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import java.util.HashMap; import java.util.Map; @@ -25,7 +25,7 @@ public class DeferredPacketRegistrar implements PacketRegistrar { } @Override - public PacketRegistrar registerPacket(ResourceLocation packetIdentifier, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { + public PacketRegistrar registerPacket(ResourceIdentifier packetIdentifier, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { PacketHolder container = new PacketHolder<>(packetIdentifier, messageType, encoder, decoder, handler); QUEUED_PACKET_MAP.put(messageType, container); return this; @@ -38,4 +38,4 @@ public class DeferredPacketRegistrar implements PacketRegistrar { QUEUED_PACKET_MAP.forEach((aClass, container) -> packetRegistration.registerPacket(container)); } } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistrar.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistrar.java index 106d08c..3ea55fa 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistrar.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistrar.java @@ -2,8 +2,8 @@ package com.hypherionmc.craterlib.core.networking; import com.hypherionmc.craterlib.core.networking.data.PacketContext; import com.hypherionmc.craterlib.core.networking.data.PacketSide; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -16,6 +16,6 @@ public interface PacketRegistrar { PacketSide side(); - PacketRegistrar registerPacket(ResourceLocation id, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler); + PacketRegistrar registerPacket(ResourceIdentifier id, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler); -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java index 27a52e0..c14b370 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java @@ -4,8 +4,8 @@ import com.hypherionmc.craterlib.api.networking.CraterNetworkHandler; import com.hypherionmc.craterlib.core.networking.data.PacketContext; import com.hypherionmc.craterlib.core.networking.data.PacketHolder; import com.hypherionmc.craterlib.core.networking.data.PacketSide; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import java.util.HashMap; import java.util.Map; @@ -26,7 +26,7 @@ public abstract class PacketRegistry implements CraterNetworkHandler, PacketRegi this.side = side; } - public PacketRegistrar registerPacket(ResourceLocation id, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { + public PacketRegistrar registerPacket(ResourceIdentifier id, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) { PacketHolder holder = new PacketHolder<>(id, messageType, encoder, decoder, handler); PACKET_MAP.put(messageType, holder); registerPacket(holder); @@ -38,4 +38,4 @@ public abstract class PacketRegistry implements CraterNetworkHandler, PacketRegi } protected abstract void registerPacket(PacketHolder packetHolder); -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketContext.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketContext.java index bd3eba7..fc432dc 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketContext.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketContext.java @@ -1,15 +1,15 @@ package com.hypherionmc.craterlib.core.networking.data; -import net.minecraft.world.entity.player.Player; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import org.jetbrains.annotations.Nullable; /** * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 */ -public record PacketContext(@Nullable Player sender, T message, PacketSide side) { +public record PacketContext(@Nullable BridgedPlayer sender, T message, PacketSide side) { public PacketContext(T message, PacketSide side) { this(null, message, side); } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java index 4e12fc7..b5697a9 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java @@ -1,7 +1,7 @@ package com.hypherionmc.craterlib.core.networking.data; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -10,9 +10,9 @@ import java.util.function.Function; /** * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 */ -public record PacketHolder(ResourceLocation packetId, +public record PacketHolder(ResourceIdentifier packetId, Class messageType, - BiConsumer encoder, - Function decoder, + BiConsumer encoder, + Function decoder, Consumer> handler) { -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketSide.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketSide.java index c843090..ad6f8ec 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketSide.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketSide.java @@ -10,4 +10,4 @@ public enum PacketSide { return CLIENT; } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/platform/ClientPlatform.java b/Common/src/main/java/com/hypherionmc/craterlib/core/platform/ClientPlatform.java index 7cece86..089fb36 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/platform/ClientPlatform.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/platform/ClientPlatform.java @@ -1,23 +1,23 @@ package com.hypherionmc.craterlib.core.platform; -import com.hypherionmc.craterlib.util.ServiceUtil; -import net.minecraft.client.Minecraft; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.InternalServiceUtil; import net.minecraft.network.Connection; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; /** * @author HypherionSA */ public interface ClientPlatform { - public final ClientPlatform INSTANCE = ServiceUtil.load(ClientPlatform.class); + public final ClientPlatform INSTANCE = InternalServiceUtil.load(ClientPlatform.class); - Minecraft getClientInstance(); + BridgedMinecraft getClientInstance(); - Player getClientPlayer(); + BridgedPlayer getClientPlayer(); - Level getClientLevel(); + BridgedClientLevel getClientLevel(); Connection getClientConnection(); -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/platform/CommonPlatform.java b/Common/src/main/java/com/hypherionmc/craterlib/core/platform/CommonPlatform.java index 0463924..ee7f944 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/platform/CommonPlatform.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/platform/CommonPlatform.java @@ -1,22 +1,15 @@ package com.hypherionmc.craterlib.core.platform; -import com.hypherionmc.craterlib.core.network.CraterNetworkHandler; -import com.hypherionmc.craterlib.util.ServiceUtil; -import net.minecraft.server.MinecraftServer; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; +import com.hypherionmc.craterlib.utils.InternalServiceUtil; /** * @author HypherionSA */ public interface CommonPlatform { - public CommonPlatform INSTANCE = ServiceUtil.load(CommonPlatform.class); + public CommonPlatform INSTANCE = InternalServiceUtil.load(CommonPlatform.class); - default CraterNetworkHandler createPacketHandler(String modid) { - return this.createPacketHandler(modid, true, true); - } + BridgedMinecraftServer getMCServer(); - CraterNetworkHandler createPacketHandler(String modid, boolean requiredClient, boolean requiredServer); - - MinecraftServer getMCServer(); - -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/platform/Environment.java b/Common/src/main/java/com/hypherionmc/craterlib/core/platform/Environment.java index bed6cc4..2ef219e 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/platform/Environment.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/platform/Environment.java @@ -15,4 +15,4 @@ public enum Environment { public boolean isServer() { return this == SERVER; } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/platform/ModloaderEnvironment.java b/Common/src/main/java/com/hypherionmc/craterlib/core/platform/ModloaderEnvironment.java index 2a91663..c1bc176 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/core/platform/ModloaderEnvironment.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/core/platform/ModloaderEnvironment.java @@ -1,6 +1,6 @@ package com.hypherionmc.craterlib.core.platform; -import com.hypherionmc.craterlib.util.ServiceUtil; +import com.hypherionmc.craterlib.utils.InternalServiceUtil; import java.io.File; @@ -10,7 +10,7 @@ import java.io.File; */ public interface ModloaderEnvironment { - public final ModloaderEnvironment INSTANCE = ServiceUtil.load(ModloaderEnvironment.class); + public final ModloaderEnvironment INSTANCE = InternalServiceUtil.load(ModloaderEnvironment.class); boolean isFabric(); @@ -29,4 +29,4 @@ public interface ModloaderEnvironment { boolean isDevEnv(); int getModCount(); -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/CommandMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/CommandMixin.java index 2a30df9..bb9dec4 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/CommandMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/CommandMixin.java @@ -1,7 +1,7 @@ package com.hypherionmc.craterlib.mixin.events; import com.google.common.base.Throwables; -import com.hypherionmc.craterlib.api.event.server.CraterCommandEvent; +import com.hypherionmc.craterlib.api.events.server.CraterCommandEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.mojang.brigadier.ParseResults; import net.minecraft.commands.CommandSourceStack; @@ -21,7 +21,7 @@ public class CommandMixin { ), cancellable = true ) private void injectCommandEvent(ParseResults stackParseResults, String command, CallbackInfo ci) { - CraterCommandEvent commandEvent = new CraterCommandEvent(stackParseResults, command); + CraterCommandEvent commandEvent = CraterCommandEvent.of(stackParseResults, command); CraterEventBus.INSTANCE.postEvent(commandEvent); if (commandEvent.wasCancelled()) { ci.cancel(); diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/LivingEntityMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/LivingEntityMixin.java deleted file mode 100644 index 71ea397..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/LivingEntityMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.hypherionmc.craterlib.mixin.events; - -import com.hypherionmc.craterlib.api.event.common.CraterLivingDeathEvent; -import com.hypherionmc.craterlib.core.event.CraterEventBus; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.LivingEntity; -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; - -@Mixin(LivingEntity.class) -public class LivingEntityMixin { - - @Inject(method = "die", at = @At("HEAD"), cancellable = true) - private void injectPlayerDeathEvent(DamageSource damageSource, CallbackInfo ci) { - CraterLivingDeathEvent event = new CraterLivingDeathEvent(((LivingEntity) (Object) this), damageSource); - CraterEventBus.INSTANCE.postEvent(event); - if (event.wasCancelled()) - ci.cancel(); - } - -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerAdvancementsMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerAdvancementsMixin.java index e81bd95..30fa64f 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerAdvancementsMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerAdvancementsMixin.java @@ -1,7 +1,9 @@ package com.hypherionmc.craterlib.mixin.events; -import com.hypherionmc.craterlib.api.event.server.CraterAdvancementEvent; +import com.hypherionmc.craterlib.api.events.server.CraterAdvancementEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.advancements.BridgedAdvancement; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementHolder; import net.minecraft.server.PlayerAdvancements; @@ -20,12 +22,10 @@ public class PlayerAdvancementsMixin { @Inject(method = "award", at = @At(value = "INVOKE", target = "Lnet/minecraft/advancements/AdvancementRewards;grant(Lnet/minecraft/server/level/ServerPlayer;)V", shift = At.Shift.AFTER)) private void injectAdvancementEvent(AdvancementHolder advancementHolder, String string, CallbackInfoReturnable cir) { - CraterAdvancementEvent event = new CraterAdvancementEvent(this.player, advancementHolder.value()); - Advancement advancement = advancementHolder.value(); if (advancement.display().isPresent() && advancement.display().get().shouldAnnounceChat()) { - CraterEventBus.INSTANCE.postEvent(event); + CraterEventBus.INSTANCE.postEvent(new CraterAdvancementEvent(BridgedPlayer.of(this.player), BridgedAdvancement.of(advancementHolder.value()))); } } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerListMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerListMixin.java index 93607af..3bc6f6b 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerListMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerListMixin.java @@ -1,9 +1,12 @@ package com.hypherionmc.craterlib.mixin.events; -import com.hypherionmc.craterlib.api.event.server.CraterPlayerEvent; -import com.hypherionmc.craterlib.api.event.server.MessageBroadcastEvent; -import com.hypherionmc.craterlib.api.event.server.PlayerPreLoginEvent; +import com.hypherionmc.craterlib.api.events.server.CraterPlayerEvent; +import com.hypherionmc.craterlib.api.events.server.MessageBroadcastEvent; +import com.hypherionmc.craterlib.api.events.server.PlayerPreLoginEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; import com.mojang.authlib.GameProfile; import net.minecraft.network.Connection; import net.minecraft.network.chat.Component; @@ -25,28 +28,26 @@ public class PlayerListMixin { @Inject(method = "broadcastSystemMessage(Lnet/minecraft/network/chat/Component;Ljava/util/function/Function;Z)V", at = @At("HEAD")) private void injectBroadcastEvent(Component component, Function function, boolean bl, CallbackInfo ci) { String thread = Thread.currentThread().getStackTrace()[3].getClassName(); - MessageBroadcastEvent event = new MessageBroadcastEvent(component, function, bl, thread); + MessageBroadcastEvent event = new MessageBroadcastEvent(ChatUtils.mojangToAdventure(component), (f) -> ChatUtils.mojangToAdventure(component), bl, thread); CraterEventBus.INSTANCE.postEvent(event); } @Inject(method = "placeNewPlayer", at = @At("TAIL")) private void injectPlayerLoginEvent(Connection connection, ServerPlayer serverPlayer, CommonListenerCookie commonListenerCookie, CallbackInfo ci) { - CraterPlayerEvent.PlayerLoggedIn loggedIn = new CraterPlayerEvent.PlayerLoggedIn(serverPlayer); - CraterEventBus.INSTANCE.postEvent(loggedIn); + CraterEventBus.INSTANCE.postEvent(new CraterPlayerEvent.PlayerLoggedIn(BridgedPlayer.of(serverPlayer))); } @Inject(method = "remove", at = @At("HEAD")) private void injectPlayerLogoutEvent(ServerPlayer player, CallbackInfo ci) { - CraterPlayerEvent.PlayerLoggedOut loggedOut = new CraterPlayerEvent.PlayerLoggedOut(player); - CraterEventBus.INSTANCE.postEvent(loggedOut); + CraterEventBus.INSTANCE.postEvent(new CraterPlayerEvent.PlayerLoggedOut(BridgedPlayer.of(player))); } @Inject(method = "canPlayerLogin", at = @At("HEAD"), cancellable = true) private void injectPreLoginEvent(SocketAddress address, GameProfile gameProfile, CallbackInfoReturnable cir) { - PlayerPreLoginEvent event = new PlayerPreLoginEvent(address, gameProfile); + PlayerPreLoginEvent event = new PlayerPreLoginEvent(address, BridgedGameProfile.of(gameProfile)); CraterEventBus.INSTANCE.postEvent(event); if (event.getMessage() != null) { - cir.setReturnValue(event.getMessage()); + cir.setReturnValue(ChatUtils.adventureToMojang(event.getMessage())); } } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerMixin.java index 2e1fd0b..5fd03bd 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/PlayerMixin.java @@ -1,7 +1,8 @@ package com.hypherionmc.craterlib.mixin.events; -import com.hypherionmc.craterlib.api.event.common.CraterLivingDeathEvent; +import com.hypherionmc.craterlib.api.events.common.CraterPlayerDeathEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; @@ -12,12 +13,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Player.class) public class PlayerMixin { - @Inject(method = "die", at = @At("HEAD"), cancellable = true) + @Inject(method = "die", at = @At("HEAD")) private void injectPlayerDeathEvent(DamageSource damageSource, CallbackInfo ci) { - CraterLivingDeathEvent event = new CraterLivingDeathEvent(((Player) (Object) this), damageSource); - CraterEventBus.INSTANCE.postEvent(event); - if (event.wasCancelled()) - ci.cancel(); + CraterEventBus.INSTANCE.postEvent(new CraterPlayerDeathEvent(BridgedPlayer.of(((Player) (Object) this)), damageSource)); } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/ServerPlayerMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/ServerPlayerMixin.java index 3e7b540..ae028e7 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/ServerPlayerMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/ServerPlayerMixin.java @@ -1,7 +1,8 @@ package com.hypherionmc.craterlib.mixin.events; -import com.hypherionmc.craterlib.api.event.common.CraterLivingDeathEvent; +import com.hypherionmc.craterlib.api.events.common.CraterPlayerDeathEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.damagesource.DamageSource; import org.spongepowered.asm.mixin.Mixin; @@ -12,12 +13,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ServerPlayer.class) public class ServerPlayerMixin { - @Inject(method = "die", at = @At("HEAD"), cancellable = true) + @Inject(method = "die", at = @At("HEAD")) private void injectPlayerDeathEvent(DamageSource damageSource, CallbackInfo ci) { - CraterLivingDeathEvent event = new CraterLivingDeathEvent(((ServerPlayer) (Object) this), damageSource); - CraterEventBus.INSTANCE.postEvent(event); - if (event.wasCancelled()) - ci.cancel(); + CraterEventBus.INSTANCE.postEvent(new CraterPlayerDeathEvent(BridgedPlayer.of(((ServerPlayer) (Object) this)), damageSource)); } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/ClientLevelMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/ClientLevelMixin.java index 44805fc..2368d6d 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/ClientLevelMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/ClientLevelMixin.java @@ -1,7 +1,8 @@ package com.hypherionmc.craterlib.mixin.events.client; -import com.hypherionmc.craterlib.api.event.client.CraterSinglePlayerEvent; +import com.hypherionmc.craterlib.api.events.client.CraterSinglePlayerEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; @@ -16,7 +17,7 @@ public class ClientLevelMixin { @Inject(method = "addEntity", at = @At("HEAD")) private void injectSinglePlayerJoinEvent(Entity entity, CallbackInfo ci) { if (entity instanceof Player player) { - CraterSinglePlayerEvent.PlayerLogin playerLogin = new CraterSinglePlayerEvent.PlayerLogin(player); + CraterSinglePlayerEvent.PlayerLogin playerLogin = new CraterSinglePlayerEvent.PlayerLogin(BridgedPlayer.of(player)); CraterEventBus.INSTANCE.postEvent(playerLogin); } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/MinecraftMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/MinecraftMixin.java index 2d2420b..50a0f3b 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/MinecraftMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/MinecraftMixin.java @@ -1,6 +1,6 @@ package com.hypherionmc.craterlib.mixin.events.client; -import com.hypherionmc.craterlib.api.event.client.ScreenEvent; +import com.hypherionmc.craterlib.api.events.client.ScreenEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; @@ -11,6 +11,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +// TODO NOJANG @Mixin(Minecraft.class) public class MinecraftMixin { diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/RealmsMainScreenMixin.java b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/RealmsMainScreenMixin.java index 9c3b3e0..c1ce895 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/RealmsMainScreenMixin.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/client/RealmsMainScreenMixin.java @@ -1,7 +1,8 @@ package com.hypherionmc.craterlib.mixin.events.client; -import com.hypherionmc.craterlib.api.event.client.PlayerJoinRealmEvent; +import com.hypherionmc.craterlib.api.events.client.PlayerJoinRealmEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.realmsclient.dto.BridgedRealmsServer; import com.mojang.realmsclient.RealmsMainScreen; import com.mojang.realmsclient.dto.RealmsServer; import net.minecraft.client.gui.screens.Screen; @@ -13,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(RealmsMainScreen.class) public class RealmsMainScreenMixin { - @Inject(at = @At("HEAD"), method = "play") - private static void play(RealmsServer serverData, Screen parent, CallbackInfo ci) { - PlayerJoinRealmEvent playerJoinRealm = new PlayerJoinRealmEvent(serverData); + @Inject(at = @At("HEAD"), method = "play(Lcom/mojang/realmsclient/dto/RealmsServer;Lnet/minecraft/client/gui/screens/Screen;Z)V") + private static void play(RealmsServer serverData, Screen arg2, boolean bl, CallbackInfo ci) { + PlayerJoinRealmEvent playerJoinRealm = new PlayerJoinRealmEvent(BridgedRealmsServer.of(serverData)); CraterEventBus.INSTANCE.postEvent(playerJoinRealm); } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/advancements/BridgedAdvancement.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/advancements/BridgedAdvancement.java new file mode 100644 index 0000000..19a7e7a --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/advancements/BridgedAdvancement.java @@ -0,0 +1,21 @@ +package com.hypherionmc.craterlib.nojang.advancements; + +import lombok.RequiredArgsConstructor; +import net.minecraft.advancements.Advancement; + +import java.util.Optional; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedAdvancement { + + private final Advancement internal; + + public Optional displayInfo() { + if (internal.display().isPresent()) { + return Optional.of(BridgedDisplayInfo.of(internal.display().get())); + } + + return Optional.empty(); + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/advancements/BridgedDisplayInfo.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/advancements/BridgedDisplayInfo.java new file mode 100644 index 0000000..5a0c155 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/advancements/BridgedDisplayInfo.java @@ -0,0 +1,29 @@ +package com.hypherionmc.craterlib.nojang.advancements; + +import com.hypherionmc.craterlib.utils.ChatUtils; +import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; +import net.minecraft.advancements.DisplayInfo; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedDisplayInfo { + + private final DisplayInfo internal; + + public boolean shouldDisplay() { + return internal.shouldAnnounceChat(); + } + + public boolean isHidden() { + return internal.isHidden(); + } + + public Component displayName() { + return ChatUtils.mojangToAdventure(internal.getTitle()); + } + + public Component description() { + return ChatUtils.mojangToAdventure(internal.getDescription()); + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/authlib/BridgedGameProfile.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/authlib/BridgedGameProfile.java new file mode 100644 index 0000000..c83f3c4 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/authlib/BridgedGameProfile.java @@ -0,0 +1,29 @@ +package com.hypherionmc.craterlib.nojang.authlib; + +import com.mojang.authlib.GameProfile; +import lombok.RequiredArgsConstructor; + +import java.util.UUID; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedGameProfile { + + private final GameProfile internal; + + public static BridgedGameProfile mojang(UUID id, String name) { + return new BridgedGameProfile(new GameProfile(id, name)); + } + + public String getName() { + return internal.getName(); + } + + public UUID getId() { + return internal.getId(); + } + + public GameProfile toMojang() { + return internal; + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java new file mode 100644 index 0000000..6078cad --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java @@ -0,0 +1,9 @@ +package com.hypherionmc.craterlib.nojang.client; + +import net.minecraft.client.Minecraft; + +public class BridgedMinecraft { + + private final Minecraft internal = Minecraft.getInstance(); + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedOptions.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedOptions.java new file mode 100644 index 0000000..7063feb --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedOptions.java @@ -0,0 +1,15 @@ +package com.hypherionmc.craterlib.nojang.client; + +import lombok.RequiredArgsConstructor; +import net.minecraft.client.Options; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedOptions { + + private final Options internal; + + public String getLanguage() { + return internal.languageCode; + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedClientLevel.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedClientLevel.java new file mode 100644 index 0000000..23d5431 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedClientLevel.java @@ -0,0 +1,11 @@ +package com.hypherionmc.craterlib.nojang.client.multiplayer; + +import lombok.RequiredArgsConstructor; +import net.minecraft.client.multiplayer.ClientLevel; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedClientLevel { + + private final ClientLevel internal; + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java new file mode 100644 index 0000000..5a15402 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java @@ -0,0 +1,22 @@ +package com.hypherionmc.craterlib.nojang.commands; + +import com.hypherionmc.craterlib.utils.ChatUtils; +import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; +import net.minecraft.commands.CommandSourceStack; + +import java.util.function.Supplier; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedCommandSourceStack { + + private final CommandSourceStack internal; + + public void sendSuccess(Supplier supplier, boolean bl) { + internal.sendSuccess(() -> ChatUtils.adventureToMojang(supplier.get()), bl); + } + + public CommandSourceStack toMojang() { + return internal; + } +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/CommandsRegistry.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/CommandsRegistry.java new file mode 100644 index 0000000..3912ba3 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/CommandsRegistry.java @@ -0,0 +1,81 @@ +package com.hypherionmc.craterlib.nojang.commands; + +import com.hypherionmc.craterlib.api.commands.CraterCommand; +import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.mojang.authlib.GameProfile; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.Commands; +import net.minecraft.commands.arguments.GameProfileArgument; +import org.apache.commons.lang3.function.TriConsumer; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class CommandsRegistry { + + public static final CommandsRegistry INSTANCE = new CommandsRegistry(); + + private final List commands = new ArrayList<>(); + + public void registerCommand(CraterCommand cmd) { + commands.add(cmd); + } + + public void registerCommands(CommandDispatcher stack) { + commands.forEach(cmd -> { + if (cmd.hasArguments()) { + CommandWithArguments.register(cmd, stack); + } else { + CommandWithoutArguments.register(cmd, stack); + } + }); + } + + static class CommandWithoutArguments { + + public static void register(CraterCommand cmd, CommandDispatcher dispatcher) { + LiteralArgumentBuilder command = Commands.literal(cmd.getCommandName()) + .requires(source -> source.hasPermission(cmd.getPermissionLevel())) + .executes(context -> { + cmd.getExecutor().accept(BridgedCommandSourceStack.of(context.getSource())); + return 1; + }); + } + + } + + @SuppressWarnings("unchecked") + static class CommandWithArguments { + + public static void register(CraterCommand cmd, CommandDispatcher dispatcher) { + LiteralArgumentBuilder command = Commands.literal(cmd.getCommandName()) + .requires(source -> source.hasPermission(cmd.getPermissionLevel())); + + cmd.getArguments().forEach((key, pair) -> command.then(Commands.argument(key, pair.getLeft()).executes(context -> { + + // This is FUCKING UGLY.... Need to improve this in the future + if (pair.getLeft() instanceof GameProfileArgument) { + Collection profiles = GameProfileArgument.getGameProfiles(context, key); + List bridgedGameProfiles = new ArrayList<>(); + + profiles.forEach(p -> bridgedGameProfiles.add(BridgedGameProfile.of(p))); + + ((TriConsumer, BridgedCommandSourceStack>) pair.getRight()) + .accept(BridgedPlayer.of(context.getSource().getPlayer()), bridgedGameProfiles, BridgedCommandSourceStack.of(context.getSource())); + return 1; + } + + return 1; + }))); + } + + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/nbt/BridgedCompoundTag.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/nbt/BridgedCompoundTag.java new file mode 100644 index 0000000..17a2d04 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/nbt/BridgedCompoundTag.java @@ -0,0 +1,49 @@ +package com.hypherionmc.craterlib.nojang.nbt; + +import lombok.RequiredArgsConstructor; +import net.minecraft.nbt.CompoundTag; + +import java.util.Set; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedCompoundTag { + + private final CompoundTag internal; + + public static BridgedCompoundTag empty() { + return new BridgedCompoundTag(new CompoundTag()); + } + + public BridgedCompoundTag getCompound(String key) { + return BridgedCompoundTag.of(internal.getCompound(key)); + } + + public Set getAllKeys() { + return internal.getAllKeys(); + } + + public String getString(String key) { + return internal.getString(key); + } + + public boolean getBoolean(String key) { + return internal.getBoolean(key); + } + + public void putString(String key, String value) { + internal.putString(key, value); + } + + public void put(String key, BridgedCompoundTag value) { + internal.put(key, value.toMojang()); + } + + public void putBoolean(String key, boolean value) { + internal.putBoolean(key, value); + } + + public CompoundTag toMojang() { + return internal; + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/network/BridgedFriendlyByteBuf.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/network/BridgedFriendlyByteBuf.java new file mode 100644 index 0000000..3dd55ed --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/network/BridgedFriendlyByteBuf.java @@ -0,0 +1,25 @@ +package com.hypherionmc.craterlib.nojang.network; + +import com.hypherionmc.craterlib.nojang.nbt.BridgedCompoundTag; +import lombok.RequiredArgsConstructor; +import net.minecraft.network.FriendlyByteBuf; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedFriendlyByteBuf { + + private final FriendlyByteBuf internal; + + public BridgedCompoundTag readNbt() { + return BridgedCompoundTag.of(internal.readNbt()); + } + + public BridgedFriendlyByteBuf writeNbt(BridgedCompoundTag tag) { + internal.writeNbt(tag.toMojang()); + return BridgedFriendlyByteBuf.of(internal); + } + + public FriendlyByteBuf toMojang() { + return internal; + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/package-info.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/package-info.java new file mode 100644 index 0000000..4c177a5 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/package-info.java @@ -0,0 +1,9 @@ +/** + * @author HypherionSA + * This package, called NoJang, exposes various wrapped API's. + * Using this api, a mod can essentially run on ANY minecraft version this library + * supports, from one code base. + * IMPORTANT NOTE: THESE API'S MUST NEVER EXPOSE ANY MINECRAFT CLASSES OR CODE!!!! + * THEY MUST ALWAYS BE HANDLED INTERNALLY AND ONLY RETURN WRAPPED VARIANTS + */ +package com.hypherionmc.craterlib.nojang; \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/realmsclient/dto/BridgedRealmsServer.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/realmsclient/dto/BridgedRealmsServer.java new file mode 100644 index 0000000..f377af8 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/realmsclient/dto/BridgedRealmsServer.java @@ -0,0 +1,11 @@ +package com.hypherionmc.craterlib.nojang.realmsclient.dto; + +import com.mojang.realmsclient.dto.RealmsServer; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedRealmsServer { + + private final RealmsServer internal; + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/resources/ResourceIdentifier.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/resources/ResourceIdentifier.java new file mode 100644 index 0000000..2ca1dd5 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/resources/ResourceIdentifier.java @@ -0,0 +1,32 @@ +package com.hypherionmc.craterlib.nojang.resources; + +import net.minecraft.resources.ResourceLocation; + +public class ResourceIdentifier { + + private final ResourceLocation internal; + + public ResourceIdentifier(String namespace, String path) { + this.internal = new ResourceLocation(namespace, path); + } + + public ResourceIdentifier(String path) { + this.internal = new ResourceLocation(path); + } + + public String getNamespace() { + return internal.getNamespace(); + } + + public String getPath() { + return internal.getPath(); + } + + public String getString() { + return internal.toString(); + } + + public ResourceLocation toMojang() { + return internal; + } +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/server/BridgedMinecraftServer.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/server/BridgedMinecraftServer.java new file mode 100644 index 0000000..97227f8 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/server/BridgedMinecraftServer.java @@ -0,0 +1,86 @@ +package com.hypherionmc.craterlib.nojang.server; + +import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; +import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; +import net.minecraft.SharedConstants; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.players.UserBanListEntry; +import net.minecraft.server.players.UserWhiteListEntry; + +import java.util.ArrayList; +import java.util.List; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedMinecraftServer { + + private final MinecraftServer internal; + + public boolean isUsingWhitelist() { + return internal.getPlayerList().isUsingWhitelist(); + } + + public int getPlayerCount() { + return internal.getPlayerList().getPlayerCount(); + } + + public int getMaxPlayers() { + return internal.getPlayerList().getMaxPlayers(); + } + + public String getServerModName() { + return internal.getServerModName(); + } + + public String getName() { + return SharedConstants.getCurrentVersion().getName(); + } + + public boolean usesAuthentication() { + return internal.usesAuthentication(); + } + + public void broadcastSystemMessage(Component text, boolean bl) { + internal.getPlayerList().broadcastSystemMessage(ChatUtils.adventureToMojang(text), bl); + } + + public boolean isPlayerBanned(BridgedGameProfile profile) { + return internal.getPlayerList().getBans().isBanned(profile.toMojang()); + } + + public void whitelistPlayer(BridgedGameProfile gameProfile) { + if (!internal.getPlayerList().isUsingWhitelist()) + return; + + internal.getPlayerList().getWhiteList().add(new UserWhiteListEntry(gameProfile.toMojang())); + } + + public void unWhitelistPlayer(BridgedGameProfile gameProfile) { + if (!internal.getPlayerList().isUsingWhitelist()) + return; + + internal.getPlayerList().getWhiteList().remove(new UserWhiteListEntry(gameProfile.toMojang())); + } + + public List getPlayers() { + List profiles = new ArrayList<>(); + + if (internal.getPlayerList() == null) + return profiles; + + internal.getPlayerList().getPlayers().forEach(p -> profiles.add(BridgedPlayer.of(p))); + + return profiles; + } + + public void banPlayer(BridgedGameProfile profile) { + internal.getPlayerList().getBans().add(new UserBanListEntry(profile.toMojang())); + } + + public MinecraftServer toMojang() { + return internal; + } + +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/world/entity/player/BridgedPlayer.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/world/entity/player/BridgedPlayer.java new file mode 100644 index 0000000..d46f013 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/world/entity/player/BridgedPlayer.java @@ -0,0 +1,59 @@ +package com.hypherionmc.craterlib.nojang.world.entity.player; + +import com.hypherionmc.craterlib.nojang.authlib.BridgedGameProfile; +import com.hypherionmc.craterlib.utils.ChatUtils; +import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; +import net.minecraft.network.Connection; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.Nullable; + +import java.util.UUID; + +@RequiredArgsConstructor(staticName = "of") +public class BridgedPlayer { + + private final Player internal; + + public Component getDisplayName() { + return ChatUtils.mojangToAdventure(internal.getDisplayName()); + } + + public Component getName() { + return ChatUtils.mojangToAdventure(internal.getName()); + } + + public UUID getUUID() { + return internal.getUUID(); + } + + public String getStringUUID() { + return internal.getStringUUID(); + } + + public BridgedGameProfile getGameProfile() { + return BridgedGameProfile.of(internal.getGameProfile()); + } + + public boolean isServerPlayer() { + return internal instanceof ServerPlayer; + } + + public Player toMojang() { + return internal; + } + + @Nullable + public ServerGamePacketListenerImpl getConnection() { + if (isServerPlayer()) { + return ((ServerPlayer) internal).connection; + } + return null; + } + + public ServerPlayer toMojangServerPlayer() { + return (ServerPlayer) internal; + } +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/util/LangUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/util/LangUtils.java deleted file mode 100644 index fbba2ec..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/util/LangUtils.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.hypherionmc.craterlib.util; - -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; - -/** - * @author HypherionSA - * Utility class to handle Translation Keys and Formatting - */ -public class LangUtils { - - public static Component getTooltipTitle(String key) { - return Component.literal(ChatFormatting.YELLOW + Component.translatable(key).getString()); - } - - public static String resolveTranslation(String key) { - return Component.translatable(key).getString(); - } - - public static Component getTranslation(String key) { - return Component.translatable(key); - } - - public static Component makeComponent(String text) { - return Component.translatable(text); - } - -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/util/MathUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/util/MathUtils.java deleted file mode 100644 index 318e92b..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/util/MathUtils.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.hypherionmc.craterlib.util; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -/** - * @author HypherionSA - * Utility class to handle various mathematical functions - */ -public class MathUtils { - - public static VoxelShape rotateShape(Direction from, Direction to, VoxelShape shape) { - VoxelShape[] buffer = new VoxelShape[]{shape, Shapes.empty()}; - - int times = (to.ordinal() - from.ordinal() + 4) % 4; - for (int i = 0; i < times; i++) { - buffer[0].forAllBoxes((minX, minY, minZ, maxX, maxY, maxZ) -> buffer[1] = Shapes.or(buffer[1], Shapes.box(1 - maxZ, minY, minX, 1 - minZ, maxY, maxX))); - buffer[0] = buffer[1]; - buffer[1] = Shapes.empty(); - } - return buffer[0]; - } - - public static void writeBlockPosToNBT(BlockPos pos, CompoundTag tag) { - tag.putInt("block_x", pos.getX()); - tag.putInt("block_y", pos.getY()); - tag.putInt("block_z", pos.getZ()); - } - - public static BlockPos readBlockPosFromNBT(CompoundTag tag) { - int x, y, z; - x = tag.getInt("block_x"); - y = tag.getInt("block_y"); - z = tag.getInt("block_z"); - return new BlockPos(x, y, z); - } - -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/util/RenderUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/util/RenderUtils.java deleted file mode 100644 index c489db0..0000000 --- a/Common/src/main/java/com/hypherionmc/craterlib/util/RenderUtils.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.hypherionmc.craterlib.util; - -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.DyeColor; -import org.joml.Vector4f; - -import java.awt.*; - -/** - * @author HypherionSA - * Utility class for various rendering functions - */ -public class RenderUtils { - - public static Vector4f colorIntToRGBA(int color) { - float a = 1.0F; - float r = (color >> 16 & 0xFF) / 255.0F; - float g = (color >> 8 & 0xFF) / 255.0F; - float b = (color & 0xFF) / 255.0F; - - return new Vector4f(r, g, b, a); - } - - public static Component getFluidAmount(long amount, long capacity) { - amount = amount / 81; - capacity = capacity / 81; - String text = String.valueOf((int) (((float) amount / capacity) * 100)); - return amount > 0 ? Component.literal(ChatFormatting.AQUA + text + "%") : Component.literal(text + "%"); - } - - public static Component getTimeDisplayString(double value) { - long seconds = Math.round((value / 20)); - long minutes = Math.round(seconds / 60); - if (seconds >= 60) { - String appendString = (minutes == 1) ? "Minute" : "Minutes"; - String doSeconds = ((seconds - (minutes * 60)) > 0) ? ", " + (seconds - (minutes * 60)) + " Seconds" : ""; - return Component.literal(minutes + " " + appendString + doSeconds); - } else { - return Component.literal(seconds + " Seconds"); - } - } - - public static int renderColorFromDye(DyeColor color) { - return color.getMapColor().col | 0xFF000000; - } - - public static int alphaColorFromDye(DyeColor color, float alpha) { - float[] colors = color.getTextureDiffuseColors(); - return new Color(colors[0], colors[1], colors[2], alpha).getRGB(); - } - - public static class ARGB32 { - public static int alpha(int pPackedColor) { - return pPackedColor >>> 24; - } - - public static int red(int pPackedColor) { - return pPackedColor >> 16 & 255; - } - - public static int green(int pPackedColor) { - return pPackedColor >> 8 & 255; - } - - public static int blue(int pPackedColor) { - return pPackedColor & 255; - } - } -} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java new file mode 100644 index 0000000..96943b6 --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -0,0 +1,80 @@ +package com.hypherionmc.craterlib.utils; + +import me.hypherionmc.mcdiscordformatter.discord.DiscordSerializer; +import me.hypherionmc.mcdiscordformatter.minecraft.MinecraftSerializer; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; + +public class ChatUtils { + + public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) { + final String serialised = GsonComponentSerializer.gson().serialize(inComponent); + return Component.Serializer.fromJson(serialised); + } + + public static net.kyori.adventure.text.Component mojangToAdventure(Component inComponent) { + final String serialised = Component.Serializer.toJson(inComponent); + return GsonComponentSerializer.gson().deserialize(serialised); + } + + // Some text components contain duplicate text, resulting in duplicate messages + // sent back to discord. This should help fix those issues + public static Component safeCopy(Component inComponent) { + String value = inComponent.getString(); + Style style = inComponent.getStyle(); + return Component.literal(value).withStyle(style); + } + + public static String strip(String inString, String... toStrip) { + String finalString = inString; + + for (String strip : toStrip) { + if (finalString.startsWith(strip)) + finalString = finalString.replaceFirst(strip, ""); + + if (finalString.startsWith(" ")) + finalString = finalString.replaceFirst(" ", ""); + } + + return finalString; + } + + public static String resolve(net.kyori.adventure.text.Component component, boolean formatted) { + Component c = adventureToMojang(component); + String returnVal = ChatFormatting.stripFormatting(c.getString()); + + if (formatted) { + returnVal = DiscordSerializer.INSTANCE.serialize(safeCopy(c).copy()); + } + + return returnVal; + } + + public static net.kyori.adventure.text.Component resolve(String component, boolean formatted) { + Component returnVal = Component.literal(component); + if (formatted) { + returnVal = MinecraftSerializer.INSTANCE.serialize(component); + } + + return mojangToAdventure(returnVal); + } + + public static net.kyori.adventure.text.Component getTooltipTitle(String key) { + return net.kyori.adventure.text.Component.text(NamedTextColor.YELLOW + net.kyori.adventure.text.Component.translatable(key).key()); + } + + public static String resolveTranslation(String key) { + return net.kyori.adventure.text.Component.translatable(key).key(); + } + + public static net.kyori.adventure.text.Component getTranslation(String key) { + return net.kyori.adventure.text.Component.translatable(key); + } + + public static net.kyori.adventure.text.Component makeComponent(String text) { + return net.kyori.adventure.text.Component.translatable(text); + } +} diff --git a/Common/src/main/java/com/hypherionmc/craterlib/util/ServiceUtil.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java similarity index 89% rename from Common/src/main/java/com/hypherionmc/craterlib/util/ServiceUtil.java rename to Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java index b9906f2..2305d14 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/util/ServiceUtil.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/InternalServiceUtil.java @@ -1,4 +1,4 @@ -package com.hypherionmc.craterlib.util; +package com.hypherionmc.craterlib.utils; import com.hypherionmc.craterlib.CraterConstants; @@ -8,7 +8,7 @@ import java.util.ServiceLoader; * @author HypherionSA * Utility class to handle SPI loading */ -public class ServiceUtil { +public class InternalServiceUtil { /** * Try to load a service @@ -17,7 +17,6 @@ public class ServiceUtil { * @return The loaded class */ public static T load(Class clazz) { - final T loadedService = ServiceLoader.load(clazz) .findFirst() .orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName())); @@ -25,4 +24,4 @@ public class ServiceUtil { return loadedService; } -} +} \ No newline at end of file diff --git a/Common/src/main/java/com/hypherionmc/craterlib/util/OptifineUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/OptifineUtils.java similarity index 96% rename from Common/src/main/java/com/hypherionmc/craterlib/util/OptifineUtils.java rename to Common/src/main/java/com/hypherionmc/craterlib/utils/OptifineUtils.java index 9b9e31f..8a06da2 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/util/OptifineUtils.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/OptifineUtils.java @@ -1,4 +1,4 @@ -package com.hypherionmc.craterlib.util; +package com.hypherionmc.craterlib.utils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -43,4 +43,4 @@ public class OptifineUtils { return hasOptifine; } -} +} \ No newline at end of file diff --git a/Common/src/main/resources/craterlib.mixins.json b/Common/src/main/resources/craterlib.mixins.json index 7fdffc5..108b07b 100644 --- a/Common/src/main/resources/craterlib.mixins.json +++ b/Common/src/main/resources/craterlib.mixins.json @@ -13,10 +13,8 @@ ], "server": [ "events.CommandMixin", - "events.LivingEntityMixin", "events.PlayerAdvancementsMixin", "events.PlayerListMixin", - "events.ServerGamePacketListenerImplMixin", "events.ServerPlayerMixin" ], "injectors": { diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/CraterLibInitializer.java b/Fabric/src/main/java/com/hypherionmc/craterlib/CraterLibInitializer.java index 888a275..a807e81 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/CraterLibInitializer.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/CraterLibInitializer.java @@ -1,12 +1,14 @@ package com.hypherionmc.craterlib; -import com.hypherionmc.craterlib.api.event.server.CraterRegisterCommandEvent; -import com.hypherionmc.craterlib.api.event.server.CraterServerLifecycleEvent; +import com.hypherionmc.craterlib.api.events.server.CraterRegisterCommandEvent; +import com.hypherionmc.craterlib.api.events.server.CraterServerLifecycleEvent; import com.hypherionmc.craterlib.common.FabricCommonPlatform; import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; import com.hypherionmc.craterlib.core.networking.data.PacketSide; import com.hypherionmc.craterlib.network.CraterFabricNetworkHandler; +import com.hypherionmc.craterlib.nojang.commands.CommandsRegistry; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; @@ -16,17 +18,19 @@ public class CraterLibInitializer implements ModInitializer { @Override public void onInitialize() { new CraterPacketNetwork(new CraterFabricNetworkHandler(PacketSide.SERVER)); - CommandRegistrationCallback.EVENT.register( - (dispatcher, registryAccess, environment) -> CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(dispatcher))); + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { + CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent()); + CommandsRegistry.INSTANCE.registerCommands(dispatcher); + }); ServerLifecycleEvents.SERVER_STARTING.register(server -> { FabricCommonPlatform.server = server; - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(server)); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(server))); }); - ServerLifecycleEvents.SERVER_STARTED.register(li -> CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started())); - ServerLifecycleEvents.SERVER_STOPPING.register(server -> CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping())); - ServerLifecycleEvents.SERVER_STOPPED.register(server -> CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped())); + ServerLifecycleEvents.SERVER_STARTED.register(li -> CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(li)))); + ServerLifecycleEvents.SERVER_STOPPING.register(server -> CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping(BridgedMinecraftServer.of(server)))); + ServerLifecycleEvents.SERVER_STOPPED.register(server -> CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped(BridgedMinecraftServer.of(server)))); } } diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/client/CraterLibClientInitializer.java b/Fabric/src/main/java/com/hypherionmc/craterlib/client/CraterLibClientInitializer.java index 0c91c1a..4367a54 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/client/CraterLibClientInitializer.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/client/CraterLibClientInitializer.java @@ -1,10 +1,11 @@ package com.hypherionmc.craterlib.client; -import com.hypherionmc.craterlib.api.event.client.CraterClientTickEvent; +import com.hypherionmc.craterlib.api.events.client.CraterClientTickEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; import com.hypherionmc.craterlib.core.networking.data.PacketSide; import com.hypherionmc.craterlib.network.CraterFabricNetworkHandler; +import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; @@ -14,7 +15,7 @@ public class CraterLibClientInitializer implements ClientModInitializer { public void onInitializeClient() { new CraterPacketNetwork(new CraterFabricNetworkHandler(PacketSide.CLIENT)); ClientTickEvents.START_CLIENT_TICK.register((listener) -> { - CraterClientTickEvent event = new CraterClientTickEvent(listener.level); + CraterClientTickEvent event = new CraterClientTickEvent(BridgedClientLevel.of(listener.level)); CraterEventBus.INSTANCE.postEvent(event); }); diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/client/FabricClientPlatform.java b/Fabric/src/main/java/com/hypherionmc/craterlib/client/FabricClientPlatform.java index 123abb4..b6f9182 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/client/FabricClientPlatform.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/client/FabricClientPlatform.java @@ -1,6 +1,9 @@ package com.hypherionmc.craterlib.client; import com.hypherionmc.craterlib.core.platform.ClientPlatform; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.client.Minecraft; import net.minecraft.network.Connection; import net.minecraft.world.entity.player.Player; @@ -12,18 +15,18 @@ import net.minecraft.world.level.Level; public class FabricClientPlatform implements ClientPlatform { @Override - public Minecraft getClientInstance() { - return Minecraft.getInstance(); + public BridgedMinecraft getClientInstance() { + return new BridgedMinecraft(); } @Override - public Player getClientPlayer() { - return Minecraft.getInstance().player; + public BridgedPlayer getClientPlayer() { + return BridgedPlayer.of(Minecraft.getInstance().player); } @Override - public Level getClientLevel() { - return Minecraft.getInstance().level; + public BridgedClientLevel getClientLevel() { + return BridgedClientLevel.of(Minecraft.getInstance().level); } @Override diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCommonPlatform.java b/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCommonPlatform.java index e7f5e5e..c1a30c7 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCommonPlatform.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/common/FabricCommonPlatform.java @@ -1,8 +1,7 @@ package com.hypherionmc.craterlib.common; -import com.hypherionmc.craterlib.core.network.CraterNetworkHandler; import com.hypherionmc.craterlib.core.platform.CommonPlatform; -import com.hypherionmc.craterlib.network.FabricNetworkHandler; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; import net.minecraft.server.MinecraftServer; /** @@ -13,12 +12,7 @@ public class FabricCommonPlatform implements CommonPlatform { public static MinecraftServer server; @Override - public CraterNetworkHandler createPacketHandler(String modid, boolean requireClient, boolean requireServer) { - return FabricNetworkHandler.of(modid); - } - - @Override - public MinecraftServer getMCServer() { - return server; + public BridgedMinecraftServer getMCServer() { + return BridgedMinecraftServer.of(server); } } diff --git a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/ServerGamePacketListenerImplMixin.java b/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java similarity index 76% rename from Common/src/main/java/com/hypherionmc/craterlib/mixin/events/ServerGamePacketListenerImplMixin.java rename to Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java index 3f9353d..4a7d904 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/mixin/events/ServerGamePacketListenerImplMixin.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java @@ -1,7 +1,9 @@ -package com.hypherionmc.craterlib.mixin.events; +package com.hypherionmc.craterlib.mixin; -import com.hypherionmc.craterlib.api.event.server.CraterServerChatEvent; +import com.hypherionmc.craterlib.api.events.server.CraterServerChatEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.PlayerChatMessage; import net.minecraft.server.level.ServerPlayer; @@ -25,7 +27,7 @@ public class ServerGamePacketListenerImplMixin { cancellable = true ) private void injectChatEvent(PlayerChatMessage arg, Component arg2, FilteredText arg3, CallbackInfo ci) { - CraterServerChatEvent event = new CraterServerChatEvent(this.player, arg.decoratedContent().getString(), arg.decoratedContent()); + CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), arg.decoratedContent().getString(), ChatUtils.mojangToAdventure(arg.decoratedContent())); CraterEventBus.INSTANCE.postEvent(event); if (event.wasCancelled()) ci.cancel(); diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/TutorialMixin.java b/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/TutorialMixin.java index 715af1b..f9eaa50 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/TutorialMixin.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/TutorialMixin.java @@ -1,7 +1,9 @@ package com.hypherionmc.craterlib.mixin; -import com.hypherionmc.craterlib.api.event.client.LateInitEvent; +import com.hypherionmc.craterlib.api.events.client.LateInitEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.BridgedOptions; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; import net.minecraft.client.tutorial.Tutorial; @@ -15,7 +17,7 @@ public class TutorialMixin { @Inject(method = "", at = @At("RETURN")) private void injectEarlyInitEvent(Minecraft minecraft, Options options, CallbackInfo ci) { - LateInitEvent event = new LateInitEvent(minecraft, options); + LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(options)); CraterEventBus.INSTANCE.postEvent(event); } diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java b/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java index 923f30b..89c20c7 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java @@ -5,6 +5,9 @@ import com.hypherionmc.craterlib.core.networking.PacketRegistry; import com.hypherionmc.craterlib.core.networking.data.PacketContext; import com.hypherionmc.craterlib.core.networking.data.PacketHolder; import com.hypherionmc.craterlib.core.networking.data.PacketSide; +import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; @@ -32,17 +35,17 @@ public class CraterFabricNetworkHandler extends PacketRegistry { CHANNELS.put(holder.messageType(), new Message<>(holder.packetId(), holder.encoder())); if (PacketSide.CLIENT.equals(this.side)) { - ClientPlayNetworking.registerGlobalReceiver(holder.packetId(), ((client, listener, buf, responseSender) -> { + ClientPlayNetworking.registerGlobalReceiver(holder.packetId().toMojang(), ((client, listener, buf, responseSender) -> { buf.readByte(); - T message = holder.decoder().apply(buf); + T message = holder.decoder().apply(BridgedFriendlyByteBuf.of(buf)); client.execute(() -> holder.handler().accept(new PacketContext<>(message, PacketSide.CLIENT))); })); } else { - ServerPlayNetworking.registerGlobalReceiver(holder.packetId(), ((server, player, listener, buf, responseSender) -> { + ServerPlayNetworking.registerGlobalReceiver(holder.packetId().toMojang(), ((server, player, listener, buf, responseSender) -> { buf.readByte(); - T message = holder.decoder().apply(buf); - server.execute(() -> holder.handler().accept(new PacketContext<>(player, message, PacketSide.SERVER))); + T message = holder.decoder().apply(BridgedFriendlyByteBuf.of(buf)); + server.execute(() -> holder.handler().accept(new PacketContext<>(BridgedPlayer.of(player), message, PacketSide.SERVER))); })); } @@ -58,24 +61,24 @@ public class CraterFabricNetworkHandler extends PacketRegistry { public void sendToServer(T packet, boolean ignoreCheck) { Message message = (Message) CHANNELS.get(packet.getClass()); - if (ClientPlayNetworking.canSend(message.id()) || ignoreCheck) { + if (ClientPlayNetworking.canSend(message.id().toMojang()) || ignoreCheck) { FriendlyByteBuf buf = PacketByteBufs.create(); buf.writeByte(0); - message.encoder().accept(packet, buf); - ClientPlayNetworking.send(message.id(), buf); + message.encoder().accept(packet, BridgedFriendlyByteBuf.of(buf)); + ClientPlayNetworking.send(message.id().toMojang(), buf); } } - public void sendToClient(T packet, ServerPlayer player) { + public void sendToClient(T packet, BridgedPlayer player) { Message message = (Message) CHANNELS.get(packet.getClass()); - if (ServerPlayNetworking.canSend(player, message.id())) + if (ServerPlayNetworking.canSend(player.toMojangServerPlayer(), message.id().toMojang())) { FriendlyByteBuf buf = PacketByteBufs.create(); buf.writeByte(0); - message.encoder().accept(packet, buf); - ServerPlayNetworking.send(player, message.id(), buf); + message.encoder().accept(packet, BridgedFriendlyByteBuf.of(buf)); + ServerPlayNetworking.send(player.toMojangServerPlayer(), message.id().toMojang(), buf); } } - public record Message(ResourceLocation id, BiConsumer encoder) { } + public record Message(ResourceIdentifier id, BiConsumer encoder) { } } diff --git a/Fabric/src/main/resources/craterlib.fabric.mixins.json b/Fabric/src/main/resources/craterlib.fabric.mixins.json index 214b5cc..7c59043 100644 --- a/Fabric/src/main/resources/craterlib.fabric.mixins.json +++ b/Fabric/src/main/resources/craterlib.fabric.mixins.json @@ -9,6 +9,7 @@ "TutorialMixin" ], "server": [ + "ServerGamePacketListenerImplMixin" ], "injectors": { "defaultRequire": 1 diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java b/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java index 270a2d5..c4708a8 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java @@ -1,11 +1,13 @@ package com.hypherionmc.craterlib; -import com.hypherionmc.craterlib.api.event.client.LateInitEvent; +import com.hypherionmc.craterlib.api.events.client.LateInitEvent; import com.hypherionmc.craterlib.common.ForgeServerEvents; import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; import com.hypherionmc.craterlib.core.networking.data.PacketSide; import com.hypherionmc.craterlib.network.CraterForgeNetworkHandler; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.BridgedOptions; import net.minecraft.client.Minecraft; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.MinecraftForge; @@ -26,7 +28,7 @@ public class CraterLib { public void commonSetup(FMLCommonSetupEvent evt) { new CraterPacketNetwork(new CraterForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER)); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - LateInitEvent event = new LateInitEvent(Minecraft.getInstance(), Minecraft.getInstance().options); + LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); CraterEventBus.INSTANCE.postEvent(event); }); } diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java b/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java index e5a6369..1532c31 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java @@ -1,8 +1,9 @@ package com.hypherionmc.craterlib.client; import com.hypherionmc.craterlib.CraterConstants; -import com.hypherionmc.craterlib.api.event.client.CraterClientTickEvent; +import com.hypherionmc.craterlib.api.events.client.CraterClientTickEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; import net.minecraft.client.Minecraft; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.event.TickEvent; @@ -14,7 +15,7 @@ public class ForgeClientEvents { @SubscribeEvent public static void clientTick(TickEvent.LevelTickEvent event) { - CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(Minecraft.getInstance().level); + CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level)); CraterEventBus.INSTANCE.postEvent(craterClientTickEvent); } diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java b/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java index 853d533..3b5bbe3 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java @@ -1,6 +1,9 @@ package com.hypherionmc.craterlib.client; import com.hypherionmc.craterlib.core.platform.ClientPlatform; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.client.Minecraft; import net.minecraft.network.Connection; import net.minecraft.world.entity.player.Player; @@ -18,18 +21,18 @@ public class ForgeClientHelper implements ClientPlatform { } @Override - public Minecraft getClientInstance() { - return Minecraft.getInstance(); + public BridgedMinecraft getClientInstance() { + return new BridgedMinecraft(); } @Override - public Player getClientPlayer() { - return Minecraft.getInstance().player; + public BridgedPlayer getClientPlayer() { + return BridgedPlayer.of(Minecraft.getInstance().player); } @Override - public Level getClientLevel() { - return Minecraft.getInstance().level; + public BridgedClientLevel getClientLevel() { + return BridgedClientLevel.of(Minecraft.getInstance().level); } @Override diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java b/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java index 610491d..281ddd7 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java @@ -1,10 +1,8 @@ package com.hypherionmc.craterlib.common; -import com.hypherionmc.craterlib.core.network.CraterNetworkHandler; import com.hypherionmc.craterlib.core.platform.CommonPlatform; -import com.hypherionmc.craterlib.network.ForgeNetworkHandler; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.MinecraftServer; import net.minecraft.world.item.CreativeModeTab; import net.minecraftforge.server.ServerLifecycleHooks; @@ -22,12 +20,7 @@ public class ForgeCommonHelper implements CommonPlatform { } @Override - public CraterNetworkHandler createPacketHandler(String modid, boolean requiredClient, boolean requiredServer) { - return ForgeNetworkHandler.of(modid, requiredClient, requiredServer); - } - - @Override - public MinecraftServer getMCServer() { - return ServerLifecycleHooks.getCurrentServer(); + public BridgedMinecraftServer getMCServer() { + return BridgedMinecraftServer.of(ServerLifecycleHooks.getCurrentServer()); } } diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java b/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java index 136ea01..f354ddc 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java @@ -1,8 +1,10 @@ package com.hypherionmc.craterlib.common; -import com.hypherionmc.craterlib.api.event.server.CraterRegisterCommandEvent; -import com.hypherionmc.craterlib.api.event.server.CraterServerLifecycleEvent; +import com.hypherionmc.craterlib.api.events.server.CraterRegisterCommandEvent; +import com.hypherionmc.craterlib.api.events.server.CraterServerLifecycleEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.commands.CommandsRegistry; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.event.server.ServerStartedEvent; import net.minecraftforge.event.server.ServerStartingEvent; @@ -14,27 +16,28 @@ public class ForgeServerEvents { @SubscribeEvent public void serverStarting(ServerStartingEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(event.getServer())); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(event.getServer()))); } @SubscribeEvent public void serverStarted(ServerStartedEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started()); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(event.getServer()))); } @SubscribeEvent public void serverStopping(ServerStoppingEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping()); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping(BridgedMinecraftServer.of(event.getServer()))); } @SubscribeEvent public void serverStopped(ServerStoppedEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped()); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped(BridgedMinecraftServer.of(event.getServer()))); } @SubscribeEvent public void onCommandRegister(RegisterCommandsEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(event.getDispatcher())); + CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent()); + CommandsRegistry.INSTANCE.registerCommands(event.getDispatcher()); } } diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java b/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java index 24b342e..927bd23 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java @@ -25,8 +25,6 @@ public class ConfigScreenHandlerMixin { /** * Inject Auto Generated config Screens into forge * - * @param selectedMod - * @param cir */ @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false) private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable>> cir) { diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java new file mode 100644 index 0000000..6e2f601 --- /dev/null +++ b/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java @@ -0,0 +1,36 @@ +package com.hypherionmc.craterlib.mixin; + +import com.hypherionmc.craterlib.api.events.server.CraterServerChatEvent; +import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.PlayerChatMessage; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.FilteredText; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +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; + +@Mixin(value = ServerGamePacketListenerImpl.class, priority = Integer.MIN_VALUE) +public class ServerGamePacketListenerImplMixin { + + @Shadow + public ServerPlayer player; + + @Inject( + method = "lambda$handleChat$6", + at = @At("HEAD"), + cancellable = true + ) + private void injectChatEvent(Component component, PlayerChatMessage arg, FilteredText p_296589_, CallbackInfo ci) { + CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), arg.decoratedContent().getString(), ChatUtils.mojangToAdventure(arg.decoratedContent())); + CraterEventBus.INSTANCE.postEvent(event); + if (event.wasCancelled()) + ci.cancel(); + } + +} diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java b/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java index 310abcb..cc84b04 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java @@ -5,9 +5,13 @@ import com.hypherionmc.craterlib.core.networking.PacketRegistry; import com.hypherionmc.craterlib.core.networking.data.PacketContext; import com.hypherionmc.craterlib.core.networking.data.PacketHolder; import com.hypherionmc.craterlib.core.networking.data.PacketSide; +import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.client.Minecraft; import net.minecraft.network.Connection; +import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraftforge.event.network.CustomPayloadEvent; import net.minecraftforge.network.ChannelBuilder; import net.minecraftforge.network.PacketDistributor; @@ -17,6 +21,7 @@ import java.util.HashMap; import java.util.Map; import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.function.Function; /** * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 @@ -31,15 +36,15 @@ public class CraterForgeNetworkHandler extends PacketRegistry { protected void registerPacket(PacketHolder holder) { if (CHANNELS.get(holder.messageType()) == null) { SimpleChannel channel = ChannelBuilder - .named(holder.packetId()) + .named(holder.packetId().toMojang()) .clientAcceptedVersions((a, b) -> true) .serverAcceptedVersions((a, b) -> true) .networkProtocolVersion(1) .simpleChannel(); channel.messageBuilder(holder.messageType()) - .decoder(holder.decoder()) - .encoder(holder.encoder()) + .decoder(mojangDecoder(holder.decoder())) + .encoder(mojangEncoder(holder.encoder())) .consumerNetworkThread(buildHandler(holder.handler())) .add(); @@ -61,21 +66,31 @@ public class CraterForgeNetworkHandler extends PacketRegistry { } } - public void sendToClient(T packet, ServerPlayer player) { + public void sendToClient(T packet, BridgedPlayer player) { SimpleChannel channel = CHANNELS.get(packet.getClass()); - Connection connection = player.connection.getConnection(); - if (channel.isRemotePresent(connection)) { - channel.send(packet, PacketDistributor.PLAYER.with(player)); + ServerGamePacketListenerImpl connection = player.getConnection(); + if (connection == null) + return; + + if (channel.isRemotePresent(connection.getConnection())) { + channel.send(packet, PacketDistributor.PLAYER.with(player.toMojangServerPlayer())); } } + private Function mojangDecoder(Function handler) { + return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf)); + } + + private BiConsumer mojangEncoder(BiConsumer handler) { + return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf))); + } private BiConsumer buildHandler(Consumer> handler) { return (message, ctx) -> { ctx.enqueueWork(() -> { PacketSide side = ctx.getDirection().getReceptionSide().isServer() ? PacketSide.SERVER : PacketSide.CLIENT; ServerPlayer player = ctx.getSender(); - handler.accept(new PacketContext<>(player, message, side)); + handler.accept(new PacketContext<>(BridgedPlayer.of(player), message, side)); }); ctx.setPacketHandled(true); }; diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/network/ForgeNetworkHandler.java b/Forge/src/main/java/com/hypherionmc/craterlib/network/ForgeNetworkHandler.java index aac8f6b..93ebe89 100644 --- a/Forge/src/main/java/com/hypherionmc/craterlib/network/ForgeNetworkHandler.java +++ b/Forge/src/main/java/com/hypherionmc/craterlib/network/ForgeNetworkHandler.java @@ -93,7 +93,7 @@ public class ForgeNetworkHandler implements CraterNetworkHandler { sup.enqueueWork(() -> { Player player; if (packetDirection == PacketDirection.TO_CLIENT) { - player = ClientPlatform.INSTANCE.getClientPlayer(); + player = ClientPlatform.INSTANCE.getClientPlayer().toMojangServerPlayer(); } else { player = sup.getSender(); } diff --git a/Forge/src/main/resources/craterlib.forge.mixins.json b/Forge/src/main/resources/craterlib.forge.mixins.json index ae1aaa9..aa072d1 100644 --- a/Forge/src/main/resources/craterlib.forge.mixins.json +++ b/Forge/src/main/resources/craterlib.forge.mixins.json @@ -9,6 +9,7 @@ "ConfigScreenHandlerMixin" ], "server": [ + "ServerGamePacketListenerImplMixin" ], "injectors": { "defaultRequire": 1 diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java index bd5f9f9..1625ac7 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java @@ -1,17 +1,18 @@ package com.hypherionmc.craterlib; -import com.hypherionmc.craterlib.api.event.client.LateInitEvent; +import com.hypherionmc.craterlib.api.events.client.LateInitEvent; import com.hypherionmc.craterlib.common.NeoForgeServerEvents; import com.hypherionmc.craterlib.core.event.CraterEventBus; import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork; import com.hypherionmc.craterlib.core.networking.PacketRegistry; import com.hypherionmc.craterlib.core.networking.data.PacketSide; import com.hypherionmc.craterlib.network.CraterNeoForgeNetworkHandler; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.BridgedOptions; import net.minecraft.client.Minecraft; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; -import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext; import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.fml.loading.FMLLoader; import net.neoforged.neoforge.common.NeoForge; @@ -23,14 +24,14 @@ public class CraterLib { public CraterLib(IEventBus eventBus) { NeoForge.EVENT_BUS.register(new NeoForgeServerEvents()); - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup); + eventBus.addListener(this::commonSetup); handler = new CraterNeoForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER); } public void commonSetup(FMLCommonSetupEvent evt) { new CraterPacketNetwork(handler); if (FMLEnvironment.dist.isClient()) { - LateInitEvent event = new LateInitEvent(Minecraft.getInstance(), Minecraft.getInstance().options); + LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options)); CraterEventBus.INSTANCE.postEvent(event); } } diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java index fe47f52..a11b60e 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java @@ -1,8 +1,9 @@ package com.hypherionmc.craterlib.client; import com.hypherionmc.craterlib.CraterConstants; -import com.hypherionmc.craterlib.api.event.client.CraterClientTickEvent; +import com.hypherionmc.craterlib.api.events.client.CraterClientTickEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; import net.minecraft.client.Minecraft; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; @@ -14,7 +15,7 @@ public class NeoForgeClientEvents { @SubscribeEvent public static void clientTick(TickEvent.LevelTickEvent event) { - CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(Minecraft.getInstance().level); + CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level)); CraterEventBus.INSTANCE.postEvent(craterClientTickEvent); } diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientHelper.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientHelper.java index c3c5177..dfc965b 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientHelper.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientHelper.java @@ -1,6 +1,9 @@ package com.hypherionmc.craterlib.client; import com.hypherionmc.craterlib.core.platform.ClientPlatform; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.client.Minecraft; import net.minecraft.network.Connection; import net.minecraft.world.entity.player.Player; @@ -10,7 +13,6 @@ import java.util.Objects; /** * @author HypherionSA - * @date 16/06/2022 */ public class NeoForgeClientHelper implements ClientPlatform { @@ -18,18 +20,18 @@ public class NeoForgeClientHelper implements ClientPlatform { } @Override - public Minecraft getClientInstance() { - return Minecraft.getInstance(); + public BridgedMinecraft getClientInstance() { + return new BridgedMinecraft(); } @Override - public Player getClientPlayer() { - return Minecraft.getInstance().player; + public BridgedPlayer getClientPlayer() { + return BridgedPlayer.of(Minecraft.getInstance().player); } @Override - public Level getClientLevel() { - return Minecraft.getInstance().level; + public BridgedClientLevel getClientLevel() { + return BridgedClientLevel.of(Minecraft.getInstance().level); } @Override diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCommonHelper.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCommonHelper.java index b1d12ba..e2084dc 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCommonHelper.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeCommonHelper.java @@ -3,6 +3,8 @@ package com.hypherionmc.craterlib.common; import com.hypherionmc.craterlib.core.network.CraterNetworkHandler; import com.hypherionmc.craterlib.core.platform.CommonPlatform; import com.hypherionmc.craterlib.network.NeoForgeNetworkHandler; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.world.item.CreativeModeTab; @@ -16,19 +18,11 @@ import java.util.Map; */ public class NeoForgeCommonHelper implements CommonPlatform { - public static Map TABS = new HashMap<>(); - public NeoForgeCommonHelper() { } @Override - public CraterNetworkHandler createPacketHandler(String modid, boolean requiredClient, boolean requiredServer) { - return new NeoForgeNetworkHandler(modid, requiredClient, requiredServer); - //return NeoForgeNetworkHandler.of(modid, requiredClient, requiredServer); - } - - @Override - public MinecraftServer getMCServer() { - return ServerLifecycleHooks.getCurrentServer(); + public BridgedMinecraftServer getMCServer() { + return BridgedMinecraftServer.of(ServerLifecycleHooks.getCurrentServer()); } } diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeServerEvents.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeServerEvents.java index 8439a05..91ca5b7 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeServerEvents.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/common/NeoForgeServerEvents.java @@ -1,8 +1,10 @@ package com.hypherionmc.craterlib.common; -import com.hypherionmc.craterlib.api.event.server.CraterRegisterCommandEvent; -import com.hypherionmc.craterlib.api.event.server.CraterServerLifecycleEvent; +import com.hypherionmc.craterlib.api.events.server.CraterRegisterCommandEvent; +import com.hypherionmc.craterlib.api.events.server.CraterServerLifecycleEvent; import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.commands.CommandsRegistry; +import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.neoforge.event.RegisterCommandsEvent; import net.neoforged.neoforge.event.server.ServerStartedEvent; @@ -14,27 +16,28 @@ public class NeoForgeServerEvents { @SubscribeEvent public void serverStarting(ServerStartingEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(event.getServer())); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(event.getServer()))); } @SubscribeEvent public void serverStarted(ServerStartedEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started()); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(event.getServer()))); } @SubscribeEvent public void serverStopping(ServerStoppingEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping()); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping(BridgedMinecraftServer.of(event.getServer()))); } @SubscribeEvent public void serverStopped(ServerStoppedEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped()); + CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped(BridgedMinecraftServer.of(event.getServer()))); } @SubscribeEvent public void onCommandRegister(RegisterCommandsEvent event) { - CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent(event.getDispatcher())); + CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent()); + CommandsRegistry.INSTANCE.registerCommands(event.getDispatcher()); } } diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java index c114b64..9a98092 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java @@ -25,8 +25,6 @@ public class ConfigScreenHandlerMixin { /** * Inject Auto Generated config Screens into forge * - * @param selectedMod - * @param cir */ @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false) private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable>> cir) { diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java new file mode 100644 index 0000000..6e2f601 --- /dev/null +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java @@ -0,0 +1,36 @@ +package com.hypherionmc.craterlib.mixin; + +import com.hypherionmc.craterlib.api.events.server.CraterServerChatEvent; +import com.hypherionmc.craterlib.core.event.CraterEventBus; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.PlayerChatMessage; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.FilteredText; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +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; + +@Mixin(value = ServerGamePacketListenerImpl.class, priority = Integer.MIN_VALUE) +public class ServerGamePacketListenerImplMixin { + + @Shadow + public ServerPlayer player; + + @Inject( + method = "lambda$handleChat$6", + at = @At("HEAD"), + cancellable = true + ) + private void injectChatEvent(Component component, PlayerChatMessage arg, FilteredText p_296589_, CallbackInfo ci) { + CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), arg.decoratedContent().getString(), ChatUtils.mojangToAdventure(arg.decoratedContent())); + CraterEventBus.INSTANCE.postEvent(event); + if (event.wasCancelled()) + ci.cancel(); + } + +} diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java index 0b1fc88..3893462 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java @@ -5,6 +5,8 @@ import com.hypherionmc.craterlib.core.networking.PacketRegistry; import com.hypherionmc.craterlib.core.networking.data.PacketContext; import com.hypherionmc.craterlib.core.networking.data.PacketHolder; import com.hypherionmc.craterlib.core.networking.data.PacketSide; +import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; @@ -17,6 +19,7 @@ import net.neoforged.neoforge.network.registration.IPayloadRegistrar; import java.util.HashMap; import java.util.Map; +import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; @@ -48,9 +51,9 @@ public class CraterNeoForgeNetworkHandler extends PacketRegistry { if (PACKETS.get(container.messageType()) == null) { var packetContainer = new NeoForgePacketContainer<>( container.messageType(), - container.packetId(), - container.encoder(), - decoder(container.decoder()), + container.packetId().toMojang(), + mojangEncoder(container.encoder()), + decoder(mojangDecoder(container.decoder())), buildHandler(container.handler()) ); @@ -78,11 +81,14 @@ public class CraterNeoForgeNetworkHandler extends PacketRegistry { } } - public void sendToClient(T packet, ServerPlayer player) { + public void sendToClient(T packet, BridgedPlayer player) { NeoForgePacketContainer container = PACKETS.get(packet.getClass()); try { - if (player.connection.isConnected(container.packetId())) { - PacketDistributor.PLAYER.with(player).send(new NeoForgePacket<>(container, packet)); + if (player.getConnection() == null) + return; + + if (player.getConnection().isConnected(container.packetId())) { + PacketDistributor.PLAYER.with(player.toMojangServerPlayer()).send(new NeoForgePacket<>(container, packet)); } } catch (Throwable t) { CraterConstants.LOG.error("{} packet not registered on the server, this is needed.", packet.getClass(), t); @@ -94,10 +100,18 @@ public class CraterNeoForgeNetworkHandler extends PacketRegistry { try { PacketSide side = ctx.flow().getReceptionSide().equals(LogicalSide.SERVER) ? PacketSide.SERVER : PacketSide.CLIENT; Player player = ctx.player().orElse(null); - handler.accept(new PacketContext<>(player, payload.packet(), side)); + handler.accept(new PacketContext<>(BridgedPlayer.of(player), payload.packet(), side)); } catch (Throwable t) { CraterConstants.LOG.error("Error handling packet: {} -> ", payload.packet().getClass(), t); } }; } + + private Function mojangDecoder(Function handler) { + return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf)); + } + + private BiConsumer mojangEncoder(BiConsumer handler) { + return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf))); + } } \ No newline at end of file diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java index bd16989..f4fe45d 100644 --- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java +++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java @@ -3,6 +3,7 @@ package com.hypherionmc.craterlib.network; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; /** * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4 @@ -10,13 +11,13 @@ import net.minecraft.resources.ResourceLocation; public record NeoForgePacket(NeoForgePacketContainer container, T packet) implements CustomPacketPayload { @Override - public void write(FriendlyByteBuf buff) + public void write(@NotNull FriendlyByteBuf buff) { container().encoder().accept(packet(), buff); } @Override - public ResourceLocation id() + public @NotNull ResourceLocation id() { return container().packetId(); } diff --git a/NeoForge/src/main/resources/craterlib.neoforge.mixins.json b/NeoForge/src/main/resources/craterlib.neoforge.mixins.json index ae1aaa9..aa072d1 100644 --- a/NeoForge/src/main/resources/craterlib.neoforge.mixins.json +++ b/NeoForge/src/main/resources/craterlib.neoforge.mixins.json @@ -9,6 +9,7 @@ "ConfigScreenHandlerMixin" ], "server": [ + "ServerGamePacketListenerImplMixin" ], "injectors": { "defaultRequire": 1 diff --git a/build.gradle b/build.gradle index 1a056a2..6024770 100644 --- a/build.gradle +++ b/build.gradle @@ -56,6 +56,11 @@ subprojects { dependencies { implementation "me.hypherionmc.moon-config:core:${moon_config}" implementation "me.hypherionmc.moon-config:toml:${moon_config}" + shade "net.kyori:adventure-api:4.16.0" + shade "net.kyori:adventure-text-serializer-gson:4.16.0" + + compileOnly("org.projectlombok:lombok:${lombok}") + annotationProcessor("org.projectlombok:lombok:${lombok}") } jar { diff --git a/gradle.properties b/gradle.properties index f602a93..33acbb7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,26 +2,35 @@ version_major=1 version_minor=1 version_patch=2 -project_group=com.hypherionmc.craterlib + #Mod mod_author=HypherionSA mod_id=craterlib mod_name=CraterLib + # Shared minecraft_version=1.20.4 +project_group=com.hypherionmc.craterlib + # Fabric fabric_loader=0.15.0 fabric_api=0.92.0+1.20.4 + # Forge forge_version=49.0.13 + # NeoForged neoforge_version=73-beta + # Dependencies mod_menu_version=8.0.0-beta.2 moon_config=1.0.9 +lombok=1.18.32 + # Publishing curse_id=867099 modrinth_id=Nn8Wasaq + # Gradle org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fae0804..a595206 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists