[FEAT/BUG] Adventure parser backport and added Compat API for Advanced Chat
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/CraterLib.java
|
||||
+++ /dev/null
|
||||
@@ -1,36 +1,0 @@
|
||||
-package com.hypherionmc.craterlib;
|
||||
-
|
||||
-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.core.platform.ModloaderEnvironment;
|
||||
-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;
|
||||
-import net.minecraftforge.fml.DistExecutor;
|
||||
-import net.minecraftforge.fml.common.Mod;
|
||||
-import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
-import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
-import net.minecraftforge.fml.loading.FMLLoader;
|
||||
-
|
||||
-@Mod(CraterConstants.MOD_ID)
|
||||
-public class CraterLib {
|
||||
-
|
||||
- public CraterLib() {
|
||||
- MinecraftForge.EVENT_BUS.register(new ForgeServerEvents());
|
||||
- FMLJavaModLoadingContext.get().getModEventBus().addListener(this::commonSetup);
|
||||
- }
|
||||
-
|
||||
- public void commonSetup(FMLCommonSetupEvent evt) {
|
||||
- new CraterPacketNetwork(new CraterForgeNetworkHandler(FMLLoader.getDist().isClient() ? PacketSide.CLIENT : PacketSide.SERVER));
|
||||
- DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
|
||||
- LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options));
|
||||
- CraterEventBus.INSTANCE.postEvent(event);
|
||||
- });
|
||||
- }
|
||||
-}
|
@@ -0,0 +1,28 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientEvents.java
|
||||
+++ /dev/null
|
||||
@@ -1,25 +1,0 @@
|
||||
-package com.hypherionmc.craterlib.client;
|
||||
-
|
||||
-import com.hypherionmc.craterlib.CraterConstants;
|
||||
-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;
|
||||
-import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
-import net.minecraftforge.fml.common.Mod;
|
||||
-
|
||||
-@Mod.EventBusSubscriber(modid = CraterConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
|
||||
-public class ForgeClientEvents {
|
||||
-
|
||||
- @SubscribeEvent
|
||||
- public static void clientTick(TickEvent.LevelTickEvent event) {
|
||||
- if (Minecraft.getInstance().level == null)
|
||||
- return;
|
||||
-
|
||||
- CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level));
|
||||
- CraterEventBus.INSTANCE.postEvent(craterClientTickEvent);
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -0,0 +1,44 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/client/ForgeClientHelper.java
|
||||
+++ /dev/null
|
||||
@@ -1,41 +1,0 @@
|
||||
-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 java.util.Objects;
|
||||
-
|
||||
-/**
|
||||
- * @author HypherionSA
|
||||
- * @date 16/06/2022
|
||||
- */
|
||||
-public class ForgeClientHelper implements ClientPlatform {
|
||||
-
|
||||
- public ForgeClientHelper() {
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public BridgedMinecraft getClientInstance() {
|
||||
- return new BridgedMinecraft();
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public BridgedPlayer getClientPlayer() {
|
||||
- return BridgedPlayer.of(Minecraft.getInstance().player);
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public BridgedClientLevel getClientLevel() {
|
||||
- return BridgedClientLevel.of(Minecraft.getInstance().level);
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public Connection getClientConnection() {
|
||||
- Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!");
|
||||
- return Minecraft.getInstance().getConnection().getConnection();
|
||||
- }
|
||||
-}
|
@@ -0,0 +1,29 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCommonHelper.java
|
||||
+++ /dev/null
|
||||
@@ -1,26 +1,0 @@
|
||||
-package com.hypherionmc.craterlib.common;
|
||||
-
|
||||
-import com.hypherionmc.craterlib.core.platform.CommonPlatform;
|
||||
-import com.hypherionmc.craterlib.nojang.server.BridgedMinecraftServer;
|
||||
-import net.minecraft.resources.ResourceLocation;
|
||||
-import net.minecraft.world.item.CreativeModeTab;
|
||||
-import net.minecraftforge.server.ServerLifecycleHooks;
|
||||
-
|
||||
-import java.util.HashMap;
|
||||
-import java.util.Map;
|
||||
-
|
||||
-/**
|
||||
- * @author HypherionSA
|
||||
- */
|
||||
-public class ForgeCommonHelper implements CommonPlatform {
|
||||
-
|
||||
- public static Map<ResourceLocation, CreativeModeTab> TABS = new HashMap<>();
|
||||
-
|
||||
- public ForgeCommonHelper() {
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public BridgedMinecraftServer getMCServer() {
|
||||
- return BridgedMinecraftServer.of(ServerLifecycleHooks.getCurrentServer());
|
||||
- }
|
||||
-}
|
@@ -0,0 +1,58 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeCompatHelper.java
|
||||
+++ /dev/null
|
||||
@@ -1,55 +1,0 @@
|
||||
-package com.hypherionmc.craterlib.common;
|
||||
-
|
||||
-import com.hypherionmc.craterlib.core.platform.CompatUtils;
|
||||
-import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
|
||||
-import team.creative.playerrevive.api.IBleeding;
|
||||
-import team.creative.playerrevive.server.PlayerReviveServer;
|
||||
-
|
||||
-public class ForgeCompatHelper implements CompatUtils {
|
||||
-
|
||||
- @Override
|
||||
- public boolean isPlayerActive(BridgedPlayer player) {
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public String getSkinUUID(BridgedPlayer player) {
|
||||
- return player.getStringUUID();
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean isPlayerBleeding(BridgedPlayer player) {
|
||||
- if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
- return false;
|
||||
-
|
||||
- return PlayerReviveServer.isBleeding(player.toMojangServerPlayer());
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean playerBledOut(BridgedPlayer player) {
|
||||
- if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
- return false;
|
||||
-
|
||||
- IBleeding bleeding = PlayerReviveServer.getBleeding(player.toMojangServerPlayer());
|
||||
- return bleeding != null && bleeding.bledOut();
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean playerRevived(BridgedPlayer player) {
|
||||
- if (!ModloaderEnvironment.INSTANCE.isModLoaded("playerrevive"))
|
||||
- return false;
|
||||
-
|
||||
- IBleeding bleeding = PlayerReviveServer.getBleeding(player.toMojangServerPlayer());
|
||||
- return bleeding != null && bleeding.revived();
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean isPrivateMessage(BridgedPlayer player) {
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public Component getChannelPrefix(BridgedPlayer player) {
|
||||
- return Component.empty();
|
||||
- }
|
||||
-}
|
@@ -0,0 +1,82 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeLoaderHelper.java
|
||||
+++ /dev/null
|
||||
@@ -1,79 +1,0 @@
|
||||
-package com.hypherionmc.craterlib.common;
|
||||
-
|
||||
-import com.hypherionmc.craterlib.core.platform.Environment;
|
||||
-import com.hypherionmc.craterlib.core.platform.LoaderType;
|
||||
-import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment;
|
||||
-import net.minecraft.SharedConstants;
|
||||
-import net.minecraft.client.Minecraft;
|
||||
-import net.minecraftforge.fml.ModList;
|
||||
-import net.minecraftforge.fml.loading.FMLLoader;
|
||||
-import net.minecraftforge.fml.loading.FMLPaths;
|
||||
-
|
||||
-import java.io.File;
|
||||
-
|
||||
-/**
|
||||
- * @author HypherionSA
|
||||
- */
|
||||
-public class ForgeLoaderHelper implements ModloaderEnvironment {
|
||||
-
|
||||
- public ForgeLoaderHelper() {
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean isFabric() {
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public LoaderType getLoaderType() {
|
||||
- return LoaderType.FORGE;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public String getGameVersion() {
|
||||
- return SharedConstants.VERSION_STRING;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public File getGameFolder() {
|
||||
- return Minecraft.getInstance().gameDirectory;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public File getConfigFolder() {
|
||||
- return FMLPaths.CONFIGDIR.get().toFile();
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public File getModsFolder() {
|
||||
- return FMLPaths.MODSDIR.get().toFile();
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public Environment getEnvironment() {
|
||||
- switch (FMLLoader.getDist()) {
|
||||
- case CLIENT -> {
|
||||
- return Environment.CLIENT;
|
||||
- }
|
||||
- case DEDICATED_SERVER -> {
|
||||
- return Environment.SERVER;
|
||||
- }
|
||||
- }
|
||||
- return Environment.UNKNOWN;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean isModLoaded(String modid) {
|
||||
- return ModList.get().isLoaded(modid);
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean isDevEnv() {
|
||||
- return !FMLLoader.isProduction();
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public int getModCount() {
|
||||
- return ModList.get().size();
|
||||
- }
|
||||
-}
|
@@ -0,0 +1,46 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/common/ForgeServerEvents.java
|
||||
+++ /dev/null
|
||||
@@ -1,43 +1,0 @@
|
||||
-package com.hypherionmc.craterlib.common;
|
||||
-
|
||||
-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;
|
||||
-import net.minecraftforge.event.server.ServerStoppedEvent;
|
||||
-import net.minecraftforge.event.server.ServerStoppingEvent;
|
||||
-import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
-
|
||||
-public class ForgeServerEvents {
|
||||
-
|
||||
- @SubscribeEvent
|
||||
- public void serverStarting(ServerStartingEvent event) {
|
||||
- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Starting(BridgedMinecraftServer.of(event.getServer())));
|
||||
- }
|
||||
-
|
||||
- @SubscribeEvent
|
||||
- public void serverStarted(ServerStartedEvent event) {
|
||||
- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Started(BridgedMinecraftServer.of(event.getServer())));
|
||||
- }
|
||||
-
|
||||
- @SubscribeEvent
|
||||
- public void serverStopping(ServerStoppingEvent event) {
|
||||
- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopping(BridgedMinecraftServer.of(event.getServer())));
|
||||
- }
|
||||
-
|
||||
- @SubscribeEvent
|
||||
- public void serverStopped(ServerStoppedEvent event) {
|
||||
- CraterEventBus.INSTANCE.postEvent(new CraterServerLifecycleEvent.Stopped(BridgedMinecraftServer.of(event.getServer())));
|
||||
- }
|
||||
-
|
||||
- @SubscribeEvent
|
||||
- public void onCommandRegister(RegisterCommandsEvent event) {
|
||||
- CraterEventBus.INSTANCE.postEvent(new CraterRegisterCommandEvent());
|
||||
- CommandsRegistry.INSTANCE.registerCommands(event.getDispatcher());
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -0,0 +1,46 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java
|
||||
+++ /dev/null
|
||||
@@ -1,43 +1,0 @@
|
||||
-package com.hypherionmc.craterlib.mixin;
|
||||
-
|
||||
-import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen;
|
||||
-import com.hypherionmc.craterlib.core.config.ConfigController;
|
||||
-import com.hypherionmc.craterlib.core.config.ModuleConfig;
|
||||
-import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen;
|
||||
-import net.minecraft.client.Minecraft;
|
||||
-import net.minecraft.client.gui.screens.Screen;
|
||||
-import net.minecraftforge.client.ConfigScreenHandler;
|
||||
-import net.minecraftforge.forgespi.language.IModInfo;
|
||||
-import org.spongepowered.asm.mixin.Mixin;
|
||||
-import org.spongepowered.asm.mixin.injection.At;
|
||||
-import org.spongepowered.asm.mixin.injection.Inject;
|
||||
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
-
|
||||
-import java.util.Optional;
|
||||
-import java.util.function.BiFunction;
|
||||
-
|
||||
-/**
|
||||
- * @author HypherionSA
|
||||
- */
|
||||
-@Mixin(ConfigScreenHandler.class)
|
||||
-public class ConfigScreenHandlerMixin {
|
||||
-
|
||||
- /**
|
||||
- * Inject Auto Generated config Screens into forge
|
||||
- *
|
||||
- */
|
||||
- @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false)
|
||||
- private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable<Optional<BiFunction<Minecraft, Screen, Screen>>> cir) {
|
||||
- ConfigController.getMonitoredConfigs().forEach((conf, config) -> {
|
||||
- if (config.getClass().isAnnotationPresent(NoConfigScreen.class))
|
||||
- return;
|
||||
-
|
||||
- if (config.getClass().isAnnotationPresent(ClothScreen.class) && (ModloaderEnvironment.INSTANCE.isModLoaded("cloth_config") || ModloaderEnvironment.INSTANCE.isModLoaded("cloth-config") || ModloaderEnvironment.INSTANCE.isModLoaded("clothconfig"))) {
|
||||
- ModList.get().getModContainerById(config.getModId()).ifPresent(c -> c.registerExtensionPoint(IConfigScreenFactory.class, ((minecraft, screen) -> ClothConfigScreenBuilder.buildConfigScreen(config, screen))));
|
||||
- } else {
|
||||
- //ModList.get().getModContainerById(config.getModId()).ifPresent(c -> c.registerExtensionPoint(IConfigScreenFactory.class, ((minecraft, screen) -> new CraterConfigScreen(config, screen))));
|
||||
- }
|
||||
- });
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -0,0 +1,40 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
|
||||
+++ /dev/null
|
||||
@@ -1,37 +1,0 @@
|
||||
-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$5",
|
||||
- at = @At("HEAD"),
|
||||
- cancellable = true
|
||||
- )
|
||||
- private void injectChatEvent(Component component, PlayerChatMessage arg, FilteredText p_296589_, CallbackInfo ci) {
|
||||
- Component finalcomp = component == null ? arg.decoratedContent() : component;
|
||||
- CraterServerChatEvent event = new CraterServerChatEvent(BridgedPlayer.of(this.player), finalcomp.getString(), ChatUtils.mojangToAdventure(finalcomp));
|
||||
- CraterEventBus.INSTANCE.postEvent(event);
|
||||
- if (event.wasCancelled())
|
||||
- ci.cancel();
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -0,0 +1,56 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerStatusPacketListenerMixin.java
|
||||
+++ /dev/null
|
||||
@@ -1,53 +1,0 @@
|
||||
-package com.hypherionmc.craterlib.mixin;
|
||||
-
|
||||
-import com.hypherionmc.craterlib.api.events.server.ServerStatusEvent;
|
||||
-import com.hypherionmc.craterlib.core.event.CraterEventBus;
|
||||
-import com.hypherionmc.craterlib.utils.ChatUtils;
|
||||
-import net.minecraft.network.Connection;
|
||||
-import net.minecraft.network.protocol.status.ClientboundStatusResponsePacket;
|
||||
-import net.minecraft.network.protocol.status.ServerStatus;
|
||||
-import net.minecraft.network.protocol.status.ServerboundStatusRequestPacket;
|
||||
-import net.minecraft.server.network.ServerStatusPacketListenerImpl;
|
||||
-import org.spongepowered.asm.mixin.Final;
|
||||
-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(ServerStatusPacketListenerImpl.class)
|
||||
-public class ServerStatusPacketListenerMixin {
|
||||
-
|
||||
- @Shadow
|
||||
- @Final
|
||||
- private ServerStatus status;
|
||||
-
|
||||
- @Shadow @Final private Connection connection;
|
||||
-
|
||||
- @Inject(method = "handleStatusRequest",
|
||||
- at = @At(
|
||||
- value = "INVOKE",
|
||||
- target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;)V",
|
||||
- shift = At.Shift.BEFORE),
|
||||
- cancellable = true
|
||||
- )
|
||||
- private void injectHandleStatusRequest(ServerboundStatusRequestPacket arg, CallbackInfo ci) {
|
||||
- ServerStatusEvent.StatusRequestEvent event = new ServerStatusEvent.StatusRequestEvent(ChatUtils.mojangToAdventure(status.description()));
|
||||
- CraterEventBus.INSTANCE.postEvent(event);
|
||||
-
|
||||
- if (event.getNewStatus() != null) {
|
||||
- ci.cancel();
|
||||
- this.connection.send(new ClientboundStatusResponsePacket(
|
||||
- new ServerStatus(ChatUtils.adventureToMojang(
|
||||
- event.getNewStatus()),
|
||||
- status.players(),
|
||||
- status.version(),
|
||||
- status.favicon(),
|
||||
- status.enforcesSecureChat(),
|
||||
- status.isModded()
|
||||
- )
|
||||
- ));
|
||||
- }
|
||||
- }
|
||||
-
|
||||
-}
|
@@ -0,0 +1,101 @@
|
||||
--- a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java
|
||||
+++ /dev/null
|
||||
@@ -1,98 +1,0 @@
|
||||
-package com.hypherionmc.craterlib.network;
|
||||
-
|
||||
-import com.hypherionmc.craterlib.CraterConstants;
|
||||
-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;
|
||||
-import net.minecraftforge.network.SimpleChannel;
|
||||
-
|
||||
-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
|
||||
- */
|
||||
-public class CraterForgeNetworkHandler extends PacketRegistry {
|
||||
- private final Map<Class<?>, SimpleChannel> CHANNELS = new HashMap<>();
|
||||
-
|
||||
- public CraterForgeNetworkHandler(PacketSide side) {
|
||||
- super(side);
|
||||
- }
|
||||
-
|
||||
- protected <T> void registerPacket(PacketHolder<T> holder) {
|
||||
- if (CHANNELS.get(holder.messageType()) == null) {
|
||||
- SimpleChannel channel = ChannelBuilder
|
||||
- .named(holder.type().id())
|
||||
- .clientAcceptedVersions((a, b) -> true)
|
||||
- .serverAcceptedVersions((a, b) -> true)
|
||||
- .networkProtocolVersion(1)
|
||||
- .simpleChannel();
|
||||
-
|
||||
- channel.messageBuilder(holder.messageType())
|
||||
- .decoder(mojangDecoder(holder.decoder()))
|
||||
- .encoder(mojangEncoder(holder.encoder()))
|
||||
- .consumerNetworkThread(buildHandler(holder.handler()))
|
||||
- .add();
|
||||
-
|
||||
- CHANNELS.put(holder.messageType(), channel);
|
||||
- } else {
|
||||
- CraterConstants.LOG.error("Trying to register duplicate packet for type {}", holder.messageType());
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- public <T> void sendToServer(T packet) {
|
||||
- this.sendToServer(packet, false);
|
||||
- }
|
||||
-
|
||||
- public <T> void sendToServer(T packet, boolean ignoreCheck) {
|
||||
- SimpleChannel channel = CHANNELS.get(packet.getClass());
|
||||
- Connection connection = Minecraft.getInstance().getConnection().getConnection();
|
||||
- if (channel.isRemotePresent(connection) || ignoreCheck) {
|
||||
- channel.send(packet, PacketDistributor.SERVER.noArg());
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- public <T> void sendToClient(T packet, BridgedPlayer player) {
|
||||
- SimpleChannel channel = CHANNELS.get(packet.getClass());
|
||||
- ServerGamePacketListenerImpl connection = player.getConnection();
|
||||
- if (connection == null)
|
||||
- return;
|
||||
-
|
||||
- if (channel.isRemotePresent(connection.getConnection())) {
|
||||
- channel.send(packet, PacketDistributor.PLAYER.with(player.toMojangServerPlayer()));
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- private <T> Function<FriendlyByteBuf, T> mojangDecoder(Function<BridgedFriendlyByteBuf, T> handler) {
|
||||
- return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf));
|
||||
- }
|
||||
-
|
||||
- private <T> BiConsumer<T, FriendlyByteBuf> mojangEncoder(BiConsumer<T, BridgedFriendlyByteBuf> handler) {
|
||||
- return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf)));
|
||||
- }
|
||||
-
|
||||
- private <T> BiConsumer<T, CustomPayloadEvent.Context> buildHandler(Consumer<PacketContext<T>> handler) {
|
||||
- return (message, ctx) -> {
|
||||
- ctx.enqueueWork(() -> {
|
||||
- PacketSide side = ctx.getDirection().getReceptionSide().isServer() ? PacketSide.SERVER : PacketSide.CLIENT;
|
||||
- ServerPlayer player = ctx.getSender();
|
||||
- handler.accept(new PacketContext<>(BridgedPlayer.of(player), message, side));
|
||||
- });
|
||||
- ctx.setPacketHandled(true);
|
||||
- };
|
||||
- }
|
||||
-}
|
@@ -0,0 +1,34 @@
|
||||
--- a/Forge/src/main/resources/META-INF/mods.toml
|
||||
+++ /dev/null
|
||||
@@ -1,31 +1,0 @@
|
||||
-modLoader = "javafml"
|
||||
-loaderVersion = "[50,)"
|
||||
-license = "MIT"
|
||||
-issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues"
|
||||
-
|
||||
-[[mods]]
|
||||
- modId = "${mod_id}"
|
||||
- version = "${version}"
|
||||
- displayName = "${mod_name}"
|
||||
- displayURL = "https://modrinth.com/mod/craterlib"
|
||||
- logoFile = "craterlib_logo.png"
|
||||
- #credits="Thanks for this example mod goes to Java"
|
||||
- authors = "${mod_author}, Zenith"
|
||||
- description = '''
|
||||
- A library mod used by First Dark Development and HypherionSA Mods
|
||||
- '''
|
||||
- displayTest = "NONE"
|
||||
-
|
||||
-[[dependencies.${ mod_id }]]
|
||||
- modId = "forge"
|
||||
- mandatory = true
|
||||
- versionRange = "[50,)"
|
||||
- ordering = "NONE"
|
||||
- side = "BOTH"
|
||||
-
|
||||
-[[dependencies.${ mod_id }]]
|
||||
- modId = "minecraft"
|
||||
- mandatory = true
|
||||
- versionRange = "[1.20.6,1.21)"
|
||||
- ordering = "NONE"
|
||||
- side = "BOTH"
|
@@ -0,0 +1,4 @@
|
||||
--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ClientPlatform
|
||||
+++ /dev/null
|
||||
@@ -1,1 +1,0 @@
|
||||
-com.hypherionmc.craterlib.client.ForgeClientHelper
|
@@ -0,0 +1,4 @@
|
||||
--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CommonPlatform
|
||||
+++ /dev/null
|
||||
@@ -1,1 +1,0 @@
|
||||
-com.hypherionmc.craterlib.common.ForgeCommonHelper
|
@@ -0,0 +1,4 @@
|
||||
--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.CompatUtils
|
||||
+++ /dev/null
|
||||
@@ -1,1 +1,0 @@
|
||||
-com.hypherionmc.craterlib.common.ForgeCompatHelper
|
@@ -0,0 +1,4 @@
|
||||
--- a/Forge/src/main/resources/META-INF/services/com.hypherionmc.craterlib.core.platform.ModloaderEnvironment
|
||||
+++ /dev/null
|
||||
@@ -1,1 +1,0 @@
|
||||
-com.hypherionmc.craterlib.common.ForgeLoaderHelper
|
@@ -0,0 +1,21 @@
|
||||
--- a/Forge/src/main/resources/craterlib.forge.mixins.json
|
||||
+++ /dev/null
|
||||
@@ -1,18 +1,0 @@
|
||||
-{
|
||||
- "required": true,
|
||||
- "minVersion": "0.8",
|
||||
- "package": "com.hypherionmc.craterlib.mixin",
|
||||
- "compatibilityLevel": "JAVA_17",
|
||||
- "mixins": [
|
||||
- ],
|
||||
- "client": [
|
||||
- "ConfigScreenHandlerMixin"
|
||||
- ],
|
||||
- "server": [
|
||||
- "ServerGamePacketListenerImplMixin",
|
||||
- "ServerStatusPacketListenerMixin"
|
||||
- ],
|
||||
- "injectors": {
|
||||
- "defaultRequire": 1
|
||||
- }
|
||||
-}
|
Reference in New Issue
Block a user