diff --git a/build.gradle b/build.gradle index 7ae16dc..c00c1b6 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { - id "fabric-loom" version "1.7-SNAPSHOT" - id "maven-publish" + id 'net.fabricmc.fabric-loom-remap' version "${loom_version}" + id 'maven-publish' } version = project.mod_version @@ -23,7 +23,7 @@ dependencies { mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" implementation 'com.google.code.gson:gson:2.12.1' compileOnly 'net.luckperms:api:5.4' @@ -32,7 +32,7 @@ dependencies { compileOnly("curse.maven:huskhomes-849217:5468607") // Arda regions - modApi(files("build/libs/arda-regions-1.0.0.jar")) +// modApi(files("build/libs/arda-regions-1.0.0.jar")) modRuntimeOnly("me.djtheredstoner:DevAuth-fabric:${devauth_version}") } @@ -67,34 +67,37 @@ processResources { } } -def targetJavaVersion = 17 tasks.withType(JavaCompile).configureEach { - it.options.encoding = "UTF-8" - if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { - it.options.release.set(targetJavaVersion) - } + it.options.release = 21 } java { - def javaVersion = JavaVersion.toVersion(targetJavaVersion) - if (JavaVersion.current() < javaVersion) { - toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) - } withSourcesJar() + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } jar { + inputs.property "archivesName", project.base.archivesName + from("LICENSE") { - rename { "${it}_${project.archivesBaseName}"} + rename { "${it}_${inputs.properties.archivesName}" } } } publishing { publications { - mavenJava(MavenPublication) { + create("mavenJava", MavenPublication) { + artifactId = project.archives_base_name from components.java } } - repositories {} + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. + } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 0287a24..8ce32a0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,13 +3,13 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.20.1 -yarn_mappings=1.20.1+build.10 -loader_version=0.16.10 -loom_version=1.11-SNAPSHOT +minecraft_version=1.21.1 +yarn_mappings=1.21.1+build.3 +loader_version=0.18.4 +loom_version=1.14-SNAPSHOT # Fabric API -fabric_version=0.92.3+1.20.1 +fabric_version=0.116.7+1.21.1 # Mod Properties mod_version=1.2.5 @@ -17,5 +17,6 @@ maven_group = space.ajcool archives_base_name = ArdaPaths # Dependencies -yacl_version=3.5.0-for-1.20.1 +fabric_api_version=0.116.9+1.21.1 +yacl_version=3.5.0-for-1.21.1 devauth_version=1.2.1 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e583..f8e1ee3 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a441313..23449a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/space/ajcool/ardapaths/ArdaPaths.java b/src/main/java/space/ajcool/ardapaths/ArdaPaths.java index 44bf701..c05726f 100644 --- a/src/main/java/space/ajcool/ardapaths/ArdaPaths.java +++ b/src/main/java/space/ajcool/ardapaths/ArdaPaths.java @@ -17,7 +17,6 @@ import space.ajcool.ardapaths.core.data.config.ServerConfigManager; import space.ajcool.ardapaths.core.data.config.server.ServerConfig; import space.ajcool.ardapaths.core.networking.PacketRegistry; -import space.ajcool.ardapaths.core.networking.packets.EmptyPacket; import space.ajcool.ardapaths.mc.blocks.ModBlocks; import space.ajcool.ardapaths.mc.blocks.entities.ModBlockEntities; import space.ajcool.ardapaths.mc.blocks.entities.PathMarkerBlockEntity; diff --git a/src/main/java/space/ajcool/ardapaths/core/Client.java b/src/main/java/space/ajcool/ardapaths/core/Client.java index adb151a..4e6efe6 100644 --- a/src/main/java/space/ajcool/ardapaths/core/Client.java +++ b/src/main/java/space/ajcool/ardapaths/core/Client.java @@ -13,8 +13,7 @@ import java.util.UUID; @Environment(EnvType.CLIENT) -public class Client -{ +public class Client { /** * Gets the Minecraft client instance. We annotate this with * {@link NotNull} because utility methods should only be @@ -22,32 +21,28 @@ public class Client * * @return The Minecraft client instance */ - public static @NotNull MinecraftClient mc() - { + public static @NotNull MinecraftClient mc() { return MinecraftClient.getInstance(); } /** * @return The client's world, or null if not available */ - public static @Nullable ClientWorld world() - { + public static @Nullable ClientWorld world() { return mc().world; } /** * @return The client's player, or null if not available */ - public static @Nullable ClientPlayerEntity player() - { + public static @Nullable ClientPlayerEntity player() { return mc().player; } /** * @return The address of the current server, or an empty string if the client is in single player mode */ - public static String getServerAddress() - { + public static String getServerAddress() { MinecraftClient client = mc(); if (client.isInSingleplayer()) return ""; ServerInfo server = client.getCurrentServerEntry(); @@ -58,24 +53,22 @@ public static String getServerAddress() /** * @return The player's UUID, or null if not available */ - public static @Nullable UUID getUuid() - { + public static @Nullable UUID getUuid() { return mc().getSession().getUuidOrNull(); } /** * @return The player's UUID as a string, or an empty string if not available */ - public static String getUuidString() - { - return mc().getSession().getUuid(); + public static String getUuidString() { + UUID uuid = getUuid(); + return uuid != null ? uuid.toString() : ""; } /** * @return True if the client is in a single player world, otherwise false */ - public static boolean isInSinglePlayer() - { + public static boolean isInSinglePlayer() { MinecraftClient client = mc(); return client.isInSingleplayer(); } @@ -83,8 +76,7 @@ public static boolean isInSinglePlayer() /** * @return True if the client is holding the control key, otherwise false */ - public static boolean isCtrlDown() - { + public static boolean isCtrlDown() { ClientWorld level = world(); return level != null && level.isClient() && Screen.hasControlDown(); } diff --git a/src/main/java/space/ajcool/ardapaths/core/PermissionHelper.java b/src/main/java/space/ajcool/ardapaths/core/PermissionHelper.java index b472b05..473e263 100644 --- a/src/main/java/space/ajcool/ardapaths/core/PermissionHelper.java +++ b/src/main/java/space/ajcool/ardapaths/core/PermissionHelper.java @@ -11,7 +11,6 @@ import org.jetbrains.annotations.Nullable; import space.ajcool.ardapaths.ArdaPaths; import space.ajcool.ardapaths.core.networking.PacketRegistry; -import space.ajcool.ardapaths.core.networking.packets.EmptyPacket; public class PermissionHelper { @@ -39,7 +38,7 @@ private static boolean clientEditPermissionCheck() { ArdaPaths.LOGGER.info("Refreshing permissions"); lastPermissionCheckTime = currentTime; - PacketRegistry.PERMISSION_CHECK.send(new EmptyPacket(), response -> {hasEditPermission = response.hasPermission();}); + PacketRegistry.PERMISSION_CHECK.send(response -> {hasEditPermission = response.hasPermission();}); // Default to false until we get a response from the server return hasEditPermission != null ? hasEditPermission : false; diff --git a/src/main/java/space/ajcool/ardapaths/core/consumers/ArdaRegionsConsumer.java b/src/main/java/space/ajcool/ardapaths/core/consumers/ArdaRegionsConsumer.java index 277f230..1607cf8 100644 --- a/src/main/java/space/ajcool/ardapaths/core/consumers/ArdaRegionsConsumer.java +++ b/src/main/java/space/ajcool/ardapaths/core/consumers/ArdaRegionsConsumer.java @@ -1,7 +1,7 @@ package space.ajcool.ardapaths.core.consumers; -import mc.ardacraft.ardaregions.api.ArdaRegionsAPI; -import mc.ardacraft.ardaregions.api.ArdaRegionsApiEntrypoint; +//import mc.ardacraft.ardaregions.api.ArdaRegionsAPI; +//import mc.ardacraft.ardaregions.api.ArdaRegionsApiEntrypoint; import net.fabricmc.api.EnvType; import net.fabricmc.loader.api.FabricLoader; import space.ajcool.ardapaths.ArdaPaths; @@ -10,27 +10,27 @@ * Consumer for the Arda Regions API that listens for client discovery popup events * and updates the ArdaRegionsState accordingly. */ -public class ArdaRegionsConsumer implements ArdaRegionsApiEntrypoint { - - /** - * Called when the Arda Regions API is ready. - * Registers a listener for client discovery popup events to update the displaying state. - * - * @param api the Arda Regions API instance - */ - @Override - public void onApiReady(ArdaRegionsAPI api) { - - if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) { - ArdaPaths.LOGGER.info("{}, skipping Arda Regions consumer registration on server side.", ArdaPaths.MOD_ID); - return; - } - ArdaPaths.LOGGER.info("Arda Regions API is ready, registering consumer."); - api.getClientDiscoveryPopupEvent().register( - (regionId, regionName, description, alpha) -> { - - ArdaRegionsState.setDisplaying(alpha > 0.2f); - } - ); - } -} \ No newline at end of file +//public class ArdaRegionsConsumer implements ArdaRegionsApiEntrypoint { +// +// /** +// * Called when the Arda Regions API is ready. +// * Registers a listener for client discovery popup events to update the displaying state. +// * +// * @param api the Arda Regions API instance +// */ +// @Override +// public void onApiReady(ArdaRegionsAPI api) { +// +// if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) { +// ArdaPaths.LOGGER.info("{}, skipping Arda Regions consumer registration on server side.", ArdaPaths.MOD_ID); +// return; +// } +// ArdaPaths.LOGGER.info("Arda Regions API is ready, registering consumer."); +// api.getClientDiscoveryPopupEvent().register( +// (regionId, regionName, description, alpha) -> { +// +// ArdaRegionsState.setDisplaying(alpha > 0.2f); +// } +// ); +// } +//} \ No newline at end of file diff --git a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IClientPacketHandler.java b/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IClientPacketHandler.java deleted file mode 100644 index f685977..0000000 --- a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IClientPacketHandler.java +++ /dev/null @@ -1,14 +0,0 @@ -package space.ajcool.ardapaths.core.consumers.networking; - -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.PacketByteBuf; - -public interface IClientPacketHandler -{ - /** - * Handle an incoming packet on the client. - */ - void handle(MinecraftClient client, ClientPlayNetworkHandler handler, PacketByteBuf buf, PacketSender sender); -} diff --git a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IPacket.java b/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IPacket.java deleted file mode 100644 index aef664c..0000000 --- a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IPacket.java +++ /dev/null @@ -1,21 +0,0 @@ -package space.ajcool.ardapaths.core.consumers.networking; - -import net.minecraft.network.PacketByteBuf; - -public interface IPacket -{ - /** - * Build the packet. - */ - PacketByteBuf build(); - - /** - * Convert the packet to an instance of the object. - * - * @param buf The packet byte buffer to read - */ - static T read(PacketByteBuf buf) - { - return null; - } -} diff --git a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IPacketHandler.java b/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IPacketHandler.java deleted file mode 100644 index 27f3353..0000000 --- a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IPacketHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -package space.ajcool.ardapaths.core.consumers.networking; - -import net.minecraft.util.Identifier; - -public interface IPacketHandler -{ - /** - * Get the channel ID for this packet handler. - */ - Identifier getChannelId(); -} diff --git a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IServerPacketHandler.java b/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IServerPacketHandler.java deleted file mode 100644 index 0c1d138..0000000 --- a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/IServerPacketHandler.java +++ /dev/null @@ -1,30 +0,0 @@ -package space.ajcool.ardapaths.core.consumers.networking; - -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; - -public interface IServerPacketHandler extends IPacketHandler -{ - /** - * Send a packet to the server. - * - * @param packet The packet to send - */ - default void send(final T packet) - { - ClientPlayNetworking.send(getChannelId(), packet.build()); - } - - /** - * Handle an incoming packet on the server. - */ - void handle(MinecraftServer server, - ServerPlayerEntity player, - ServerPlayNetworkHandler handler, - PacketByteBuf buf, - PacketSender sender); -} diff --git a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/PacketHandler.java b/src/main/java/space/ajcool/ardapaths/core/consumers/networking/PacketHandler.java deleted file mode 100644 index 71d8533..0000000 --- a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/PacketHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package space.ajcool.ardapaths.core.consumers.networking; - -import net.minecraft.util.Identifier; -import space.ajcool.ardapaths.ArdaPaths; - -public abstract class PacketHandler implements IPacketHandler -{ - private final Identifier channelId; - - public PacketHandler(final String channelId) - { - this.channelId = Identifier.of(ArdaPaths.MOD_ID, channelId); - } - - @Override - public Identifier getChannelId() - { - return channelId; - } -} diff --git a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/RespondablePacketHandler.java b/src/main/java/space/ajcool/ardapaths/core/consumers/networking/RespondablePacketHandler.java deleted file mode 100644 index ea3ba9a..0000000 --- a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/RespondablePacketHandler.java +++ /dev/null @@ -1,86 +0,0 @@ -package space.ajcool.ardapaths.core.consumers.networking; - -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.Identifier; -import space.ajcool.ardapaths.ArdaPaths; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import java.util.function.Consumer; -import java.util.function.Function; - -public abstract class RespondablePacketHandler extends PacketHandler implements IServerPacketHandler, IClientPacketHandler -{ - private final Map> responseConsumers = new HashMap<>(); - private final Function reader; - private final Identifier responseChannelId; - private final Function responseReader; - - public RespondablePacketHandler( - final String channel, - final Function reader, - final String responseChannel, - final Function responseReader - ) - { - super(channel); - this.reader = reader; - responseChannelId = new Identifier(ArdaPaths.MOD_ID, responseChannel); - this.responseReader = responseReader; - } - - public Identifier getResponseChannelId() - { - return responseChannelId; - } - - public void send(final T packet, final Consumer consumer) - { - UUID id = UUID.randomUUID(); - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeUuid(id); - PacketByteBuf packetBuf = packet.build(); - buf.writeBytes(packetBuf); - if (consumer != null) - { - responseConsumers.put(id, consumer); - } - ClientPlayNetworking.send(getChannelId(), buf); - } - - @Override - public void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, PacketByteBuf buf, PacketSender sender) - { - UUID requestId = buf.readUuid(); - T packet = reader.apply(buf); - System.out.println(packet); - U responsePacket = handle(server, player, handler, packet, sender); - PacketByteBuf responseBuf = PacketByteBufs.create().writeUuid(requestId); - PacketByteBuf responsePacketBuf = responsePacket.build(); - responseBuf.writeBytes(responsePacketBuf); - sender.sendPacket(responseChannelId, responseBuf); - } - - public abstract U handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, T packet, PacketSender sender); - - @Override - public void handle(MinecraftClient client, ClientPlayNetworkHandler handler, PacketByteBuf buf, PacketSender sender) - { - UUID requestId = buf.readUuid(); - U packet = responseReader.apply(buf); - Consumer consumer = responseConsumers.remove(requestId); - if (consumer != null) - { - consumer.accept(packet); - } - } -} diff --git a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/ServerPacketHandler.java b/src/main/java/space/ajcool/ardapaths/core/consumers/networking/ServerPacketHandler.java deleted file mode 100644 index dbb9b45..0000000 --- a/src/main/java/space/ajcool/ardapaths/core/consumers/networking/ServerPacketHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package space.ajcool.ardapaths.core.consumers.networking; - -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; - -import java.util.function.Function; - -public abstract class ServerPacketHandler extends PacketHandler implements IServerPacketHandler -{ - private final Function reader; - - public ServerPacketHandler(final String channel, final Function reader) - { - super(channel); - this.reader = reader; - } - - public void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, PacketByteBuf buf, PacketSender sender) - { - T packet = reader.apply(buf); - handle(server, player, handler, packet, sender); - } - - protected abstract void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, T packet, PacketSender sender); -} diff --git a/src/main/java/space/ajcool/ardapaths/core/data/config/ClientConfigManager.java b/src/main/java/space/ajcool/ardapaths/core/data/config/ClientConfigManager.java index 695fb8c..c733139 100644 --- a/src/main/java/space/ajcool/ardapaths/core/data/config/ClientConfigManager.java +++ b/src/main/java/space/ajcool/ardapaths/core/data/config/ClientConfigManager.java @@ -11,7 +11,6 @@ import space.ajcool.ardapaths.core.data.config.shared.Color; import space.ajcool.ardapaths.core.data.config.shared.PathData; import space.ajcool.ardapaths.core.networking.PacketRegistry; -import space.ajcool.ardapaths.core.networking.packets.EmptyPacket; import space.ajcool.ardapaths.mc.items.ModItems; import java.lang.reflect.Type; @@ -47,7 +46,7 @@ public void updatePathData() } else { - PacketRegistry.PATH_DATA_REQUEST.send(new EmptyPacket(), response -> + PacketRegistry.PATH_DATA_REQUEST.send(response -> { String json = response.json(); diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/PacketRegistry.java b/src/main/java/space/ajcool/ardapaths/core/networking/PacketRegistry.java index 336e12c..5d21f51 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/PacketRegistry.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/PacketRegistry.java @@ -1,45 +1,65 @@ package space.ajcool.ardapaths.core.networking; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import space.ajcool.ardapaths.core.Fabric; -import space.ajcool.ardapaths.core.consumers.networking.IServerPacketHandler; -import space.ajcool.ardapaths.core.consumers.networking.RespondablePacketHandler; import space.ajcool.ardapaths.core.networking.handlers.server.*; +import space.ajcool.ardapaths.core.networking.packets.client.ArdaPathsPermissionCheckResponsePacket; +import space.ajcool.ardapaths.core.networking.packets.client.PathDataResponsePacket; +import space.ajcool.ardapaths.core.networking.packets.server.*; -public class PacketRegistry -{ - /** - * Client-To-Server - */ - public static final PlayerTeleportHandler PLAYER_TELEPORT = register(new PlayerTeleportHandler()); - public static final PathMarkerUpdateHandler PATH_MARKER_UPDATE = register(new PathMarkerUpdateHandler()); - public static final PathMarkerLinksUpdateHandler PATH_MARKER_LINKS_UPDATE = register(new PathMarkerLinksUpdateHandler()); - public static final PathDataRequestHandler PATH_DATA_REQUEST = register(new PathDataRequestHandler()); - public static final PathDataUpdateRequestHandler PATH_DATA_UPDATE_REQUEST = register(new PathDataUpdateRequestHandler()); - public static final ChapterUpdateHandler CHAPTER_UPDATE = register(new ChapterUpdateHandler()); - public static final ChapterDeleteHandler CHAPTER_DELETE = register(new ChapterDeleteHandler()); - public static final ChapterStartUpdateHandler CHAPTER_START_UPDATE = register(new ChapterStartUpdateHandler()); - public static final ChapterStartRemoveHandler CHAPTER_START_REMOVE = register(new ChapterStartRemoveHandler()); - public static final ChapterPlayerTeleportHandler CHAPTER_PLAYER_TELEPORT = register(new ChapterPlayerTeleportHandler()); - public static final ArdaPathsPermissionCheckHandler PERMISSION_CHECK = register(new ArdaPathsPermissionCheckHandler()); +public class PacketRegistry { - /** - * Register a client-to-server packet handler. - * - * @param handler The handler to register - */ - private static > T register(T handler) - { - ServerPlayNetworking.registerGlobalReceiver(handler.getChannelId(), handler::handle); - if (Fabric.isClient() && handler instanceof RespondablePacketHandler responseHandler) - { - ClientPlayNetworking.registerGlobalReceiver(responseHandler.getResponseChannelId(), responseHandler::handle); - } - return handler; - } + public static final PlayerTeleportHandler PLAYER_TELEPORT = new PlayerTeleportHandler(); + public static final PathMarkerUpdateHandler PATH_MARKER_UPDATE = new PathMarkerUpdateHandler(); + public static final PathMarkerLinksUpdateHandler PATH_MARKER_LINKS_UPDATE = new PathMarkerLinksUpdateHandler(); + public static final PathDataRequestHandler PATH_DATA_REQUEST = new PathDataRequestHandler(); + public static final PathDataUpdateRequestHandler PATH_DATA_UPDATE_REQUEST = new PathDataUpdateRequestHandler(); + public static final ChapterUpdateHandler CHAPTER_UPDATE = new ChapterUpdateHandler(); + public static final ChapterDeleteHandler CHAPTER_DELETE = new ChapterDeleteHandler(); + public static final ChapterStartUpdateHandler CHAPTER_START_UPDATE = new ChapterStartUpdateHandler(); + public static final ChapterStartRemoveHandler CHAPTER_START_REMOVE = new ChapterStartRemoveHandler(); + public static final ChapterPlayerTeleportHandler CHAPTER_PLAYER_TELEPORT = new ChapterPlayerTeleportHandler(); + public static final ArdaPathsPermissionCheckHandler PERMISSION_CHECK = new ArdaPathsPermissionCheckHandler(); + + public static void init() { + // 1. Register C2S payload types + PayloadTypeRegistry.playC2S().register(PlayerTeleportPacket.ID, PlayerTeleportPacket.CODEC); + PayloadTypeRegistry.playC2S().register(PathMarkerUpdatePacket.ID, PathMarkerUpdatePacket.CODEC); + PayloadTypeRegistry.playC2S().register(PathMarkerLinksUpdatePacket.ID, PathMarkerLinksUpdatePacket.CODEC); + PayloadTypeRegistry.playC2S().register(PathDataUpdatePacket.ID, PathDataUpdatePacket.CODEC); + PayloadTypeRegistry.playC2S().register(ChapterUpdatePacket.ID, ChapterUpdatePacket.CODEC); + PayloadTypeRegistry.playC2S().register(ChapterDeletePacket.ID, ChapterDeletePacket.CODEC); + PayloadTypeRegistry.playC2S().register(ChapterStartUpdatePacket.ID, ChapterStartUpdatePacket.CODEC); + PayloadTypeRegistry.playC2S().register(ChapterStartRemovePacket.ID, ChapterStartRemovePacket.CODEC); + PayloadTypeRegistry.playC2S().register(ChapterPlayerTeleportPacket.ID, ChapterPlayerTeleportPacket.CODEC); + PayloadTypeRegistry.playC2S().register(PermissionCheckRequestPayload.ID, PermissionCheckRequestPayload.CODEC); + PayloadTypeRegistry.playC2S().register(PathDataRequestPayload.ID, PathDataRequestPayload.CODEC); - public static void init() - { + // 2. Register S2C payload types + PayloadTypeRegistry.playS2C().register(ArdaPathsPermissionCheckResponsePacket.ID, ArdaPathsPermissionCheckResponsePacket.CODEC); + PayloadTypeRegistry.playS2C().register(PathDataResponsePacket.ID, PathDataResponsePacket.CODEC); + + // 3. Register server-side receivers + ServerPlayNetworking.registerGlobalReceiver(PlayerTeleportPacket.ID, PLAYER_TELEPORT::receive); + ServerPlayNetworking.registerGlobalReceiver(PathMarkerUpdatePacket.ID, PATH_MARKER_UPDATE::receive); + ServerPlayNetworking.registerGlobalReceiver(PathMarkerLinksUpdatePacket.ID, PATH_MARKER_LINKS_UPDATE::receive); + ServerPlayNetworking.registerGlobalReceiver(PathDataUpdatePacket.ID, PATH_DATA_UPDATE_REQUEST::receive); + ServerPlayNetworking.registerGlobalReceiver(ChapterUpdatePacket.ID, CHAPTER_UPDATE::receive); + ServerPlayNetworking.registerGlobalReceiver(ChapterDeletePacket.ID, CHAPTER_DELETE::receive); + ServerPlayNetworking.registerGlobalReceiver(ChapterStartUpdatePacket.ID, CHAPTER_START_UPDATE::receive); + ServerPlayNetworking.registerGlobalReceiver(ChapterStartRemovePacket.ID, CHAPTER_START_REMOVE::receive); + ServerPlayNetworking.registerGlobalReceiver(ChapterPlayerTeleportPacket.ID, CHAPTER_PLAYER_TELEPORT::receive); + ServerPlayNetworking.registerGlobalReceiver(PermissionCheckRequestPayload.ID, PERMISSION_CHECK::receiveOnServer); + ServerPlayNetworking.registerGlobalReceiver(PathDataRequestPayload.ID, PATH_DATA_REQUEST::receiveOnServer); + + // 4. Register client-side receivers (respondable responses only) + if (Fabric.isClient()) { + ClientPlayNetworking.registerGlobalReceiver( + ArdaPathsPermissionCheckResponsePacket.ID, PERMISSION_CHECK::receiveOnClient); + ClientPlayNetworking.registerGlobalReceiver( + PathDataResponsePacket.ID, PATH_DATA_REQUEST::receiveOnClient); + } } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ArdaPathsPermissionCheckHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ArdaPathsPermissionCheckHandler.java index 5acef6b..1d2831f 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ArdaPathsPermissionCheckHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ArdaPathsPermissionCheckHandler.java @@ -1,28 +1,35 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import space.ajcool.ardapaths.core.PermissionHelper; -import space.ajcool.ardapaths.core.consumers.networking.RespondablePacketHandler; -import space.ajcool.ardapaths.core.networking.packets.EmptyPacket; import space.ajcool.ardapaths.core.networking.packets.client.ArdaPathsPermissionCheckResponsePacket; +import space.ajcool.ardapaths.core.networking.packets.server.PermissionCheckRequestPayload; -public class ArdaPathsPermissionCheckHandler extends RespondablePacketHandler { +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.function.Consumer; - private static final String REQUEST_CHANNEL = "ardapaths_permission_check_request"; - private static final String RESPONSE_CHANNEL = "ardapaths_permission_check_response"; +public class ArdaPathsPermissionCheckHandler { - public ArdaPathsPermissionCheckHandler() { - super(REQUEST_CHANNEL, EmptyPacket::read, RESPONSE_CHANNEL, ArdaPathsPermissionCheckResponsePacket::read); - } + private final Map> responseConsumers = new HashMap<>(); - @Override - public ArdaPathsPermissionCheckResponsePacket handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, EmptyPacket packet, PacketSender sender) { + public void send(Consumer consumer) { + UUID requestId = UUID.randomUUID(); + responseConsumers.put(requestId, consumer); + ClientPlayNetworking.send(new PermissionCheckRequestPayload(requestId)); + } - if (player == null) return new ArdaPathsPermissionCheckResponsePacket(false); + public void receiveOnServer(PermissionCheckRequestPayload payload, ServerPlayNetworking.Context context) { + boolean hasPerm = PermissionHelper.hasEditPermission(context.player()); + context.responseSender().sendPacket( + new ArdaPathsPermissionCheckResponsePacket(payload.requestId(), hasPerm) + ); + } - return new ArdaPathsPermissionCheckResponsePacket(PermissionHelper.hasEditPermission(player)); + public void receiveOnClient(ArdaPathsPermissionCheckResponsePacket payload, ClientPlayNetworking.Context context) { + Consumer consumer = responseConsumers.remove(payload.requestId()); + if (consumer != null) consumer.accept(payload); } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterDeleteHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterDeleteHandler.java index fb48076..ad2ab08 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterDeleteHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterDeleteHandler.java @@ -1,31 +1,22 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; -import space.ajcool.ardapaths.core.data.config.shared.ChapterData; import space.ajcool.ardapaths.core.data.config.shared.PathData; import space.ajcool.ardapaths.core.networking.packets.server.ChapterDeletePacket; -import space.ajcool.ardapaths.core.networking.packets.server.ChapterUpdatePacket; -public class ChapterDeleteHandler extends ServerPacketHandler -{ - public ChapterDeleteHandler() - { - super("path_chapter_delete", ChapterDeletePacket::read); +public class ChapterDeleteHandler { + + public void send(ChapterDeletePacket packet) { + ClientPlayNetworking.send(packet); } - @Override - public void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, ChapterDeletePacket packet, PacketSender sender) - { - final String pathId = packet.pathId(); - final String chapterId = packet.chapterId(); + public void receive(ChapterDeletePacket payload, ServerPlayNetworking.Context context) { + final String pathId = payload.pathId(); + final String chapterId = payload.chapterId(); final PathData pathData = ArdaPaths.CONFIG.getPath(pathId); - if (pathData == null) - { + if (pathData == null) { return; } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterPlayerTeleportHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterPlayerTeleportHandler.java index a82c13e..3867192 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterPlayerTeleportHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterPlayerTeleportHandler.java @@ -1,45 +1,41 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.math.BlockPos; import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; import space.ajcool.ardapaths.core.executors.WarpExecutor; import space.ajcool.ardapaths.core.networking.packets.server.ChapterPlayerTeleportPacket; import java.util.Optional; -public class ChapterPlayerTeleportHandler extends ServerPacketHandler -{ - public ChapterPlayerTeleportHandler() - { - super("chapter_player_teleport", ChapterPlayerTeleportPacket::read); +public class ChapterPlayerTeleportHandler { + + public void send(ChapterPlayerTeleportPacket packet) { + ClientPlayNetworking.send(packet); } - @Override - public void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, ChapterPlayerTeleportPacket packet, PacketSender sender) - { - server.execute(() -> - { - final String pathId = packet.pathId(); - final String chapterId = packet.chapterId(); + public void receive(ChapterPlayerTeleportPacket payload, ServerPlayNetworking.Context context) { + ServerPlayerEntity player = context.player(); + MinecraftServer server = context.server(); - final Optional startWarp = ArdaPaths.CONFIG.getChapterStartWarp(pathId, chapterId); + server.execute(() -> { + final String pathId = payload.pathId(); + final String chapterId = payload.chapterId(); - if (startWarp.isPresent() && FabricLoader.getInstance().isModLoaded("huskhomes")){ + final Optional startWarp = ArdaPaths.CONFIG.getChapterStartWarp(pathId, chapterId); + if (startWarp.isPresent() && FabricLoader.getInstance().isModLoaded("huskhomes")) { ArdaPaths.LOGGER.info("Attempting to warp player {} at {}", player.getUuidAsString(), startWarp.get()); WarpExecutor warpExecutor = new WarpExecutor(); warpExecutor.warpTo(player, startWarp.get()); } else { final BlockPos start = ArdaPaths.CONFIG.getChapterStartCoordinates(pathId, chapterId); - if (start != null) - { + if (start != null) { player.requestTeleport(start.getX() + 0.5, start.getY(), start.getZ() + 0.5); } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterStartRemoveHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterStartRemoveHandler.java index fa18082..e9a00b2 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterStartRemoveHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterStartRemoveHandler.java @@ -1,25 +1,19 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; import space.ajcool.ardapaths.core.networking.packets.server.ChapterStartRemovePacket; -public class ChapterStartRemoveHandler extends ServerPacketHandler -{ - public ChapterStartRemoveHandler() - { - super("chapter_start_remove", ChapterStartRemovePacket::read); +public class ChapterStartRemoveHandler { + + public void send(ChapterStartRemovePacket packet) { + ClientPlayNetworking.send(packet); } - @Override - public void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, ChapterStartRemovePacket packet, PacketSender sender) - { - final String pathId = packet.pathId(); - final String chapterId = packet.chapterId(); + public void receive(ChapterStartRemovePacket payload, ServerPlayNetworking.Context context) { + final String pathId = payload.pathId(); + final String chapterId = payload.chapterId(); ArdaPaths.CONFIG.removeChapterStart(pathId, chapterId); ArdaPaths.CONFIG_MANAGER.save(); } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterStartUpdateHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterStartUpdateHandler.java index b574bca..9853439 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterStartUpdateHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterStartUpdateHandler.java @@ -1,28 +1,22 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.util.math.BlockPos; import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; import space.ajcool.ardapaths.core.data.config.server.PositionData; import space.ajcool.ardapaths.core.networking.packets.server.ChapterStartUpdatePacket; -public class ChapterStartUpdateHandler extends ServerPacketHandler -{ - public ChapterStartUpdateHandler() - { - super("path_chapter_start_update", ChapterStartUpdatePacket::read); +public class ChapterStartUpdateHandler { + + public void send(ChapterStartUpdatePacket packet) { + ClientPlayNetworking.send(packet); } - @Override - public void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, ChapterStartUpdatePacket packet, PacketSender sender) - { - final String pathId = packet.pathId(); - final String chapterId = packet.chapterId(); - final BlockPos start = packet.position(); + public void receive(ChapterStartUpdatePacket payload, ServerPlayNetworking.Context context) { + final String pathId = payload.pathId(); + final String chapterId = payload.chapterId(); + final BlockPos start = payload.position(); ArdaPaths.CONFIG.setChapterStart(pathId, chapterId, PositionData.fromBlockPos(start)); ArdaPaths.CONFIG_MANAGER.save(); } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterUpdateHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterUpdateHandler.java index 8654c9e..2d020f1 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterUpdateHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/ChapterUpdateHandler.java @@ -1,38 +1,31 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; import space.ajcool.ardapaths.core.data.config.shared.ChapterData; import space.ajcool.ardapaths.core.data.config.shared.PathData; import space.ajcool.ardapaths.core.networking.packets.server.ChapterUpdatePacket; -public class ChapterUpdateHandler extends ServerPacketHandler -{ - public ChapterUpdateHandler() - { - super("path_chapter_update", ChapterUpdatePacket::read); +public class ChapterUpdateHandler { + + public void send(ChapterUpdatePacket packet) { + ClientPlayNetworking.send(packet); } - @Override - public void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, ChapterUpdatePacket packet, PacketSender sender) - { - final String pathId = packet.pathId(); + public void receive(ChapterUpdatePacket payload, ServerPlayNetworking.Context context) { + final String pathId = payload.pathId(); final PathData pathData = ArdaPaths.CONFIG.getPath(pathId); - if (pathData == null) - { + if (pathData == null) { return; } - final String chapterId = packet.chapterId(); - final String chapterName = packet.chapterName(); - final String chapterDate = packet.chapterDate(); - final int chapterIndex = packet.chapterIndex(); - final String warp = packet.warp(); - final ChapterData chapterData = new ChapterData(chapterId, chapterName, chapterDate, chapterIndex,warp); + final String chapterId = payload.chapterId(); + final String chapterName = payload.chapterName(); + final String chapterDate = payload.chapterDate(); + final int chapterIndex = payload.chapterIndex(); + final String warp = payload.warp(); + final ChapterData chapterData = new ChapterData(chapterId, chapterName, chapterDate, chapterIndex, warp); pathData.setChapter(chapterData); ArdaPaths.CONFIG_MANAGER.save(); diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathDataRequestHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathDataRequestHandler.java index 44190d2..1dc8a82 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathDataRequestHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathDataRequestHandler.java @@ -1,29 +1,36 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; -import net.minecraft.server.network.ServerPlayerEntity; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.RespondablePacketHandler; import space.ajcool.ardapaths.core.data.Json; -import space.ajcool.ardapaths.core.networking.packets.EmptyPacket; import space.ajcool.ardapaths.core.networking.packets.client.PathDataResponsePacket; +import space.ajcool.ardapaths.core.networking.packets.server.PathDataRequestPayload; -/** - * A packet sent from the client to the server to request path data. - */ -public class PathDataRequestHandler extends RespondablePacketHandler -{ - public PathDataRequestHandler() - { - super("path_data_request", EmptyPacket::read, "path_data_response", PathDataResponsePacket::read); +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.function.Consumer; + +public class PathDataRequestHandler { + + private final Map> responseConsumers = new HashMap<>(); + + public void send(Consumer consumer) { + UUID requestId = UUID.randomUUID(); + responseConsumers.put(requestId, consumer); + ClientPlayNetworking.send(new PathDataRequestPayload(requestId)); } - @Override - public PathDataResponsePacket handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, EmptyPacket packet, PacketSender sender) - { + public void receiveOnServer(PathDataRequestPayload payload, ServerPlayNetworking.Context context) { String json = Json.toJson(ArdaPaths.CONFIG.getPaths()); - return new PathDataResponsePacket(json); + context.responseSender().sendPacket( + new PathDataResponsePacket(payload.requestId(), json) + ); + } + + public void receiveOnClient(PathDataResponsePacket payload, ClientPlayNetworking.Context context) { + Consumer consumer = responseConsumers.remove(payload.requestId()); + if (consumer != null) consumer.accept(payload); } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathDataUpdateRequestHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathDataUpdateRequestHandler.java index 9431de3..f5cccbc 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathDataUpdateRequestHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathDataUpdateRequestHandler.java @@ -1,33 +1,25 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.server.network.ServerPlayerEntity; import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; import space.ajcool.ardapaths.core.data.config.shared.Color; import space.ajcool.ardapaths.core.data.config.shared.PathData; import space.ajcool.ardapaths.core.networking.packets.server.PathDataUpdatePacket; -/** - * A packet sent from the client to the server to request path data. - */ -public class PathDataUpdateRequestHandler extends ServerPacketHandler -{ - public PathDataUpdateRequestHandler() - { - super("path_data_update_request", PathDataUpdatePacket::read); +public class PathDataUpdateRequestHandler { + + public void send(PathDataUpdatePacket packet) { + ClientPlayNetworking.send(packet); } - @Override - public void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, PathDataUpdatePacket packet, PacketSender sender) - { - final String pathId = packet.id(); - final String name = packet.name(); - final int primaryColor = packet.primaryColor(); - final int secondaryColor = packet.secondaryColor(); - final int tertiaryColor = packet.tertiaryColor(); + public void receive(PathDataUpdatePacket payload, ServerPlayNetworking.Context context) { + final String pathId = payload.id(); + final String name = payload.name(); + final int primaryColor = payload.primaryColor(); + final int secondaryColor = payload.secondaryColor(); + final int tertiaryColor = payload.tertiaryColor(); PathData pathData = ArdaPaths.CONFIG.getPath(pathId); diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathMarkerLinksUpdateHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathMarkerLinksUpdateHandler.java index 16d5ac9..47ab05d 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathMarkerLinksUpdateHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathMarkerLinksUpdateHandler.java @@ -1,41 +1,35 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.block.entity.BlockEntity; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.math.BlockPos; -import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; -import space.ajcool.ardapaths.core.conversions.PathMarkerBlockEntityConverter; import space.ajcool.ardapaths.core.networking.packets.server.PathMarkerLinksUpdatePacket; -import space.ajcool.ardapaths.core.networking.packets.server.PathMarkerUpdatePacket; import space.ajcool.ardapaths.mc.blocks.entities.PathMarkerBlockEntity; import java.util.HashMap; import java.util.Map; -public class PathMarkerLinksUpdateHandler extends ServerPacketHandler -{ - public PathMarkerLinksUpdateHandler() - { - super("path_marker_links_update", PathMarkerLinksUpdatePacket::read); +public class PathMarkerLinksUpdateHandler { + + public void send(PathMarkerLinksUpdatePacket packet) { + ClientPlayNetworking.send(packet); } - @Override - protected void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, PathMarkerLinksUpdatePacket packet, PacketSender sender) - { - BlockPos blockPos = packet.position(); + public void receive(PathMarkerLinksUpdatePacket payload, ServerPlayNetworking.Context context) { + ServerPlayerEntity player = context.player(); + MinecraftServer server = context.server(); + + BlockPos blockPos = payload.position(); - server.execute(() -> - { + server.execute(() -> { BlockEntity blockEntity = player.getWorld().getBlockEntity(blockPos); - if (blockEntity instanceof PathMarkerBlockEntity marker) - { - marker.applyNbt(syncPathsFromIncoming(marker.toNbt(), packet.data())); + if (blockEntity instanceof PathMarkerBlockEntity marker) { + marker.applyNbt(syncPathsFromIncoming(marker.toNbt(), payload.data())); marker.markUpdated(); } }); diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathMarkerUpdateHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathMarkerUpdateHandler.java index ac29905..d050e1b 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathMarkerUpdateHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PathMarkerUpdateHandler.java @@ -1,37 +1,34 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.block.entity.BlockEntity; import net.minecraft.nbt.NbtCompound; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.math.BlockPos; import space.ajcool.ardapaths.ArdaPaths; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; import space.ajcool.ardapaths.core.networking.packets.server.PathMarkerUpdatePacket; import space.ajcool.ardapaths.mc.blocks.entities.PathMarkerBlockEntity; -public class PathMarkerUpdateHandler extends ServerPacketHandler -{ - public PathMarkerUpdateHandler() - { - super("path_marker_update", PathMarkerUpdatePacket::read); +public class PathMarkerUpdateHandler { + + public void send(PathMarkerUpdatePacket packet) { + ClientPlayNetworking.send(packet); } - @Override - protected void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, PathMarkerUpdatePacket packet, PacketSender sender) - { - BlockPos blockPos = packet.position(); - NbtCompound nbt = packet.data(); + public void receive(PathMarkerUpdatePacket payload, ServerPlayNetworking.Context context) { + ServerPlayerEntity player = context.player(); + MinecraftServer server = context.server(); + + BlockPos blockPos = payload.position(); + NbtCompound nbt = payload.data(); ArdaPaths.LOGGER.info("Received NBT : [{}]", nbt.toString()); - server.execute(() -> - { + server.execute(() -> { BlockEntity blockEntity = player.getWorld().getBlockEntity(blockPos); - if (blockEntity instanceof PathMarkerBlockEntity marker) - { - marker.readNbt(nbt); + if (blockEntity instanceof PathMarkerBlockEntity marker) { + marker.readNbt(nbt, player.getRegistryManager()); marker.markUpdated(); } }); diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PlayerTeleportHandler.java b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PlayerTeleportHandler.java index 8b07d47..6c3a16c 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PlayerTeleportHandler.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/handlers/server/PlayerTeleportHandler.java @@ -1,43 +1,37 @@ package space.ajcool.ardapaths.core.networking.handlers.server; -import net.fabricmc.fabric.api.networking.v1.PacketSender; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; -import space.ajcool.ardapaths.core.consumers.networking.ServerPacketHandler; import space.ajcool.ardapaths.core.networking.packets.server.PlayerTeleportPacket; -public class PlayerTeleportHandler extends ServerPacketHandler -{ - public PlayerTeleportHandler() - { - super("player_teleport", PlayerTeleportPacket::read); +public class PlayerTeleportHandler { + + public void send(PlayerTeleportPacket packet) { + ClientPlayNetworking.send(packet); } - @Override - protected void handle(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler handler, PlayerTeleportPacket packet, PacketSender sender) - { + public void receive(PlayerTeleportPacket payload, ServerPlayNetworking.Context context) { + ServerPlayerEntity player = context.player(); + MinecraftServer server = context.server(); server.execute(() -> { - - if (packet.worldId() != null) { - - RegistryKey key = RegistryKey.of(RegistryKeys.WORLD, packet.worldId()); + if (payload.worldId() != null) { + RegistryKey key = RegistryKey.of(RegistryKeys.WORLD, payload.worldId()); ServerWorld serverWorld = server.getWorld(key); - if (serverWorld != null){ - - player.teleport(serverWorld, packet.x(), packet.y(), packet.z(), player.getYaw(), player.getPitch()); + if (serverWorld != null) { + player.teleport(serverWorld, payload.x(), payload.y(), payload.z(), player.getYaw(), player.getPitch()); return; } } - player.teleport(packet.x(), packet.y(), packet.z()); - + player.teleport(payload.x(), payload.y(), payload.z(), false); }); } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/EmptyPacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/EmptyPacket.java deleted file mode 100644 index 4751b92..0000000 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/EmptyPacket.java +++ /dev/null @@ -1,21 +0,0 @@ -package space.ajcool.ardapaths.core.networking.packets; - -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; - -public record EmptyPacket() implements IPacket -{ - private static final PacketByteBuf EMPTY = PacketByteBufs.create(); - - @Override - public PacketByteBuf build() - { - return EMPTY; - } - - public static EmptyPacket read(PacketByteBuf buf) - { - return new EmptyPacket(); - } -} diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/client/ArdaPathsPermissionCheckResponsePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/client/ArdaPathsPermissionCheckResponsePacket.java index c072082..32e7937 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/client/ArdaPathsPermissionCheckResponsePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/client/ArdaPathsPermissionCheckResponsePacket.java @@ -1,21 +1,28 @@ package space.ajcool.ardapaths.core.networking.packets.client; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; +import net.minecraft.util.Uuids; -public record ArdaPathsPermissionCheckResponsePacket(boolean hasPermission) implements IPacket { +import java.util.UUID; - @Override - public PacketByteBuf build() { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeBoolean(hasPermission); - return buf; - } +public record ArdaPathsPermissionCheckResponsePacket(UUID requestId, boolean hasPermission) implements CustomPayload { + + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "ardapaths_permission_check_response")); - public static ArdaPathsPermissionCheckResponsePacket read(PacketByteBuf buf) - { - final boolean hasPerm = buf.readBoolean(); - return new ArdaPathsPermissionCheckResponsePacket(hasPerm); + public static final PacketCodec CODEC = + PacketCodec.tuple( + Uuids.PACKET_CODEC, ArdaPathsPermissionCheckResponsePacket::requestId, + PacketCodecs.BOOL, ArdaPathsPermissionCheckResponsePacket::hasPermission, + ArdaPathsPermissionCheckResponsePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/client/PathDataResponsePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/client/PathDataResponsePacket.java index 87452aa..b79aa24 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/client/PathDataResponsePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/client/PathDataResponsePacket.java @@ -1,23 +1,28 @@ package space.ajcool.ardapaths.core.networking.packets.client; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; +import net.minecraft.util.Uuids; -public record PathDataResponsePacket(String json) implements IPacket -{ +import java.util.UUID; - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeString(json); - return buf; - } +public record PathDataResponsePacket(UUID requestId, String json) implements CustomPayload { + + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "path_data_response")); - public static PathDataResponsePacket read(PacketByteBuf buf) - { - final String json = buf.readString(); - return new PathDataResponsePacket(json); + public static final PacketCodec CODEC = + PacketCodec.tuple( + Uuids.PACKET_CODEC, PathDataResponsePacket::requestId, + PacketCodecs.STRING, PathDataResponsePacket::json, + PathDataResponsePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterDeletePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterDeletePacket.java index 7c8c75d..49584c6 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterDeletePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterDeletePacket.java @@ -1,30 +1,28 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; -import space.ajcool.ardapaths.core.data.config.shared.ChapterData; -import space.ajcool.ardapaths.core.data.config.shared.PathData; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; public record ChapterDeletePacket( String pathId, String chapterId -) implements IPacket -{ +) implements CustomPayload { - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeString(pathId); - buf.writeString(chapterId); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "path_chapter_delete")); - public static ChapterDeletePacket read(PacketByteBuf buf) - { - final String pathId = buf.readString(); - final String chapterId = buf.readString(); - return new ChapterDeletePacket(pathId, chapterId); + public static final PacketCodec CODEC = + PacketCodec.tuple( + PacketCodecs.STRING, ChapterDeletePacket::pathId, + PacketCodecs.STRING, ChapterDeletePacket::chapterId, + ChapterDeletePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterPlayerTeleportPacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterPlayerTeleportPacket.java index fb3ec43..bc24e5c 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterPlayerTeleportPacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterPlayerTeleportPacket.java @@ -1,25 +1,25 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; -public record ChapterPlayerTeleportPacket(String pathId, String chapterId) implements IPacket -{ +public record ChapterPlayerTeleportPacket(String pathId, String chapterId) implements CustomPayload { - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeString(pathId); - buf.writeString(chapterId); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "chapter_player_teleport")); - public static ChapterPlayerTeleportPacket read(PacketByteBuf buf) - { - final String pathId = buf.readString(); - final String chapterId = buf.readString(); - return new ChapterPlayerTeleportPacket(pathId, chapterId); + public static final PacketCodec CODEC = + PacketCodec.tuple( + PacketCodecs.STRING, ChapterPlayerTeleportPacket::pathId, + PacketCodecs.STRING, ChapterPlayerTeleportPacket::chapterId, + ChapterPlayerTeleportPacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterStartRemovePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterStartRemovePacket.java index a018b79..18d8d7e 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterStartRemovePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterStartRemovePacket.java @@ -1,25 +1,25 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; -public record ChapterStartRemovePacket(String pathId, String chapterId) implements IPacket -{ +public record ChapterStartRemovePacket(String pathId, String chapterId) implements CustomPayload { - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeString(pathId); - buf.writeString(chapterId); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "chapter_start_remove")); - public static ChapterStartRemovePacket read(PacketByteBuf buf) - { - final String pathId = buf.readString(); - final String chapterId = buf.readString(); - return new ChapterStartRemovePacket(pathId, chapterId); + public static final PacketCodec CODEC = + PacketCodec.tuple( + PacketCodecs.STRING, ChapterStartRemovePacket::pathId, + PacketCodecs.STRING, ChapterStartRemovePacket::chapterId, + ChapterStartRemovePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterStartUpdatePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterStartUpdatePacket.java index 24f5a67..69473ef 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterStartUpdatePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterStartUpdatePacket.java @@ -1,28 +1,27 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; -public record ChapterStartUpdatePacket(String pathId, String chapterId, BlockPos position) implements IPacket -{ +public record ChapterStartUpdatePacket(String pathId, String chapterId, BlockPos position) implements CustomPayload { - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeString(pathId); - buf.writeString(chapterId); - buf.writeBlockPos(position); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "path_chapter_start_update")); - public static ChapterStartUpdatePacket read(PacketByteBuf buf) - { - final String pathId = buf.readString(); - final String chapterId = buf.readString(); - final BlockPos position = buf.readBlockPos(); - return new ChapterStartUpdatePacket(pathId, chapterId, position); + public static final PacketCodec CODEC = + PacketCodec.tuple( + PacketCodecs.STRING, ChapterStartUpdatePacket::pathId, + PacketCodecs.STRING, ChapterStartUpdatePacket::chapterId, + BlockPos.PACKET_CODEC, ChapterStartUpdatePacket::position, + ChapterStartUpdatePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterUpdatePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterUpdatePacket.java index bb7d93f..0da296e 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterUpdatePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/ChapterUpdatePacket.java @@ -1,8 +1,10 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; import space.ajcool.ardapaths.core.data.config.shared.ChapterData; public record ChapterUpdatePacket( @@ -12,35 +14,28 @@ public record ChapterUpdatePacket( String chapterDate, int chapterIndex, String warp -) implements IPacket -{ +) implements CustomPayload { - public ChapterUpdatePacket(String pathId, ChapterData chapter) - { + public ChapterUpdatePacket(String pathId, ChapterData chapter) { this(pathId, chapter.getId(), chapter.getName(), chapter.getDate(), chapter.getIndex(), chapter.getWarp()); } - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeString(pathId); - buf.writeString(chapterId); - buf.writeString(chapterName); - buf.writeString(chapterDate); - buf.writeInt(chapterIndex); - buf.writeString(warp); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "path_chapter_update")); - public static ChapterUpdatePacket read(PacketByteBuf buf) - { - final String pathId = buf.readString(); - final String chapterId = buf.readString(); - final String chapterName = buf.readString(); - final String chapterDate = buf.readString(); - final int chapterIndex = buf.readInt(); - final String warp = buf.readString(); - return new ChapterUpdatePacket(pathId, chapterId, chapterName, chapterDate, chapterIndex, warp); + public static final PacketCodec CODEC = + PacketCodec.tuple( + PacketCodecs.STRING, ChapterUpdatePacket::pathId, + PacketCodecs.STRING, ChapterUpdatePacket::chapterId, + PacketCodecs.STRING, ChapterUpdatePacket::chapterName, + PacketCodecs.STRING, ChapterUpdatePacket::chapterDate, + PacketCodecs.INTEGER, ChapterUpdatePacket::chapterIndex, + PacketCodecs.STRING, ChapterUpdatePacket::warp, + ChapterUpdatePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathDataRequestPayload.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathDataRequestPayload.java new file mode 100644 index 0000000..fcdbe26 --- /dev/null +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathDataRequestPayload.java @@ -0,0 +1,26 @@ +package space.ajcool.ardapaths.core.networking.packets.server; + +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; +import net.minecraft.util.Uuids; + +import java.util.UUID; + +public record PathDataRequestPayload(UUID requestId) implements CustomPayload { + + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "path_data_request")); + + public static final PacketCodec CODEC = + PacketCodec.tuple( + Uuids.PACKET_CODEC, PathDataRequestPayload::requestId, + PathDataRequestPayload::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; + } +} diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathDataUpdatePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathDataUpdatePacket.java index aa50896..60a6ed3 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathDataUpdatePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathDataUpdatePacket.java @@ -1,8 +1,10 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; public record PathDataUpdatePacket( String id, @@ -10,28 +12,23 @@ public record PathDataUpdatePacket( int primaryColor, int secondaryColor, int tertiaryColor -) implements IPacket -{ +) implements CustomPayload { - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeString(id); - buf.writeString(name); - buf.writeInt(primaryColor); - buf.writeInt(secondaryColor); - buf.writeInt(tertiaryColor); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "path_data_update_request")); - public static space.ajcool.ardapaths.core.networking.packets.server.PathDataUpdatePacket read(PacketByteBuf buf) - { - final String pathId = buf.readString(); - final String pathName = buf.readString(); - final int pathPrimaryColor = buf.readInt(); - final int pathSecondaryColor = buf.readInt(); - final int pathTertiaryColor = buf.readInt(); - return new space.ajcool.ardapaths.core.networking.packets.server.PathDataUpdatePacket(pathId, pathName, pathPrimaryColor, pathSecondaryColor, pathTertiaryColor); + public static final PacketCodec CODEC = + PacketCodec.tuple( + PacketCodecs.STRING, PathDataUpdatePacket::id, + PacketCodecs.STRING, PathDataUpdatePacket::name, + PacketCodecs.INTEGER, PathDataUpdatePacket::primaryColor, + PacketCodecs.INTEGER, PathDataUpdatePacket::secondaryColor, + PacketCodecs.INTEGER, PathDataUpdatePacket::tertiaryColor, + PathDataUpdatePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathMarkerLinksUpdatePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathMarkerLinksUpdatePacket.java index 5367b16..28fdc47 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathMarkerLinksUpdatePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathMarkerLinksUpdatePacket.java @@ -1,27 +1,27 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.minecraft.nbt.NbtCompound; -import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; -public record PathMarkerLinksUpdatePacket(BlockPos position, NbtCompound data) implements IPacket -{ +public record PathMarkerLinksUpdatePacket(BlockPos position, NbtCompound data) implements CustomPayload { - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeBlockPos(position); - buf.writeNbt(data); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "path_marker_links_update")); - public static PathMarkerLinksUpdatePacket read(PacketByteBuf buf) - { - final BlockPos position = buf.readBlockPos(); - final NbtCompound data = buf.readNbt(); - return new PathMarkerLinksUpdatePacket(position, data); + public static final PacketCodec CODEC = + PacketCodec.tuple( + BlockPos.PACKET_CODEC, PathMarkerLinksUpdatePacket::position, + PacketCodecs.NBT_COMPOUND, PathMarkerLinksUpdatePacket::data, + PathMarkerLinksUpdatePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathMarkerUpdatePacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathMarkerUpdatePacket.java index 18c451b..e7fcf93 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathMarkerUpdatePacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PathMarkerUpdatePacket.java @@ -1,27 +1,27 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.minecraft.nbt.NbtCompound; -import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; -public record PathMarkerUpdatePacket(BlockPos position, NbtCompound data) implements IPacket -{ +public record PathMarkerUpdatePacket(BlockPos position, NbtCompound data) implements CustomPayload { - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeBlockPos(position); - buf.writeNbt(data); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "path_marker_update")); - public static PathMarkerUpdatePacket read(PacketByteBuf buf) - { - final BlockPos position = buf.readBlockPos(); - final NbtCompound data = buf.readNbt(); - return new PathMarkerUpdatePacket(position, data); + public static final PacketCodec CODEC = + PacketCodec.tuple( + BlockPos.PACKET_CODEC, PathMarkerUpdatePacket::position, + PacketCodecs.NBT_COMPOUND, PathMarkerUpdatePacket::data, + PathMarkerUpdatePacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PermissionCheckRequestPayload.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PermissionCheckRequestPayload.java new file mode 100644 index 0000000..bbf6e9b --- /dev/null +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PermissionCheckRequestPayload.java @@ -0,0 +1,26 @@ +package space.ajcool.ardapaths.core.networking.packets.server; + +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.packet.CustomPayload; +import net.minecraft.util.Identifier; +import net.minecraft.util.Uuids; + +import java.util.UUID; + +public record PermissionCheckRequestPayload(UUID requestId) implements CustomPayload { + + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "ardapaths_permission_check_request")); + + public static final PacketCodec CODEC = + PacketCodec.tuple( + Uuids.PACKET_CODEC, PermissionCheckRequestPayload::requestId, + PermissionCheckRequestPayload::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; + } +} diff --git a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PlayerTeleportPacket.java b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PlayerTeleportPacket.java index db65fe4..51818dd 100644 --- a/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PlayerTeleportPacket.java +++ b/src/main/java/space/ajcool/ardapaths/core/networking/packets/server/PlayerTeleportPacket.java @@ -1,30 +1,27 @@ package space.ajcool.ardapaths.core.networking.packets.server; -import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; -import net.minecraft.network.PacketByteBuf; +import net.minecraft.network.RegistryByteBuf; +import net.minecraft.network.codec.PacketCodec; +import net.minecraft.network.codec.PacketCodecs; +import net.minecraft.network.packet.CustomPayload; import net.minecraft.util.Identifier; -import space.ajcool.ardapaths.core.consumers.networking.IPacket; -public record PlayerTeleportPacket(double x, double y, double z, Identifier worldId) implements IPacket -{ +public record PlayerTeleportPacket(double x, double y, double z, Identifier worldId) implements CustomPayload { - @Override - public PacketByteBuf build() - { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeDouble(x); - buf.writeDouble(y); - buf.writeDouble(z); - buf.writeIdentifier(worldId); - return buf; - } + public static final CustomPayload.Id ID = + new CustomPayload.Id<>(Identifier.of("ardapaths", "player_teleport")); - public static PlayerTeleportPacket read(PacketByteBuf buf) - { - final double x = buf.readDouble(); - final double y = buf.readDouble(); - final double z = buf.readDouble(); - final Identifier worldId = buf.readIdentifier(); - return new PlayerTeleportPacket(x, y, z, worldId); + public static final PacketCodec CODEC = + PacketCodec.tuple( + PacketCodecs.DOUBLE, PlayerTeleportPacket::x, + PacketCodecs.DOUBLE, PlayerTeleportPacket::y, + PacketCodecs.DOUBLE, PlayerTeleportPacket::z, + Identifier.PACKET_CODEC, PlayerTeleportPacket::worldId, + PlayerTeleportPacket::new + ); + + @Override + public CustomPayload.Id getId() { + return ID; } } diff --git a/src/main/java/space/ajcool/ardapaths/mc/blocks/ModBlocks.java b/src/main/java/space/ajcool/ardapaths/mc/blocks/ModBlocks.java index 9ea8bde..c10c64e 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/blocks/ModBlocks.java +++ b/src/main/java/space/ajcool/ardapaths/mc/blocks/ModBlocks.java @@ -1,9 +1,9 @@ package space.ajcool.ardapaths.mc.blocks; -import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; @@ -31,7 +31,7 @@ private static T register(final String id, final T block) { final Identifier identifier = Identifier.of(ArdaPaths.MOD_ID, id); Registry.register(Registries.BLOCK, identifier, block); - Registry.register(Registries.ITEM, identifier, new BlockItem(block, new FabricItemSettings())); + Registry.register(Registries.ITEM, identifier, new BlockItem(block, new Item.Settings())); return block; } diff --git a/src/main/java/space/ajcool/ardapaths/mc/blocks/PathMarkerBlock.java b/src/main/java/space/ajcool/ardapaths/mc/blocks/PathMarkerBlock.java index 438b9bd..99cc697 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/blocks/PathMarkerBlock.java +++ b/src/main/java/space/ajcool/ardapaths/mc/blocks/PathMarkerBlock.java @@ -1,5 +1,6 @@ package space.ajcool.ardapaths.mc.blocks; +import com.mojang.serialization.MapCodec; import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityTicker; @@ -22,7 +23,6 @@ import space.ajcool.ardapaths.ArdaPathsClient; import space.ajcool.ardapaths.core.Client; import space.ajcool.ardapaths.core.networking.PacketRegistry; -import space.ajcool.ardapaths.core.networking.packets.EmptyPacket; import space.ajcool.ardapaths.core.networking.packets.server.PathMarkerUpdatePacket; import space.ajcool.ardapaths.mc.blocks.entities.ModBlockEntities; import space.ajcool.ardapaths.mc.blocks.entities.PathMarkerBlockEntity; @@ -39,7 +39,13 @@ public PathMarkerBlock(AbstractBlock.Settings properties) super(properties); } - public ActionResult onUse(BlockState blockState, World level, BlockPos blockPos, PlayerEntity player, Hand interactionHand, BlockHitResult blockHitResult) + @Override + protected MapCodec getCodec() { + return createCodec(PathMarkerBlock::new); + } + + @Override + protected ActionResult onUse(BlockState blockState, World level, BlockPos blockPos, PlayerEntity player, BlockHitResult blockHitResult) { BlockEntity selectedBlockEntity = level.getBlockEntity(blockPos); @@ -47,7 +53,7 @@ public ActionResult onUse(BlockState blockState, World level, BlockPos blockPos, if (!player.isHolding(ModItems.PATH_MARKER) || !(selectedBlockEntity instanceof PathMarkerBlockEntity pathMarkerBlockEntity)) return ActionResult.PASS; if (!level.isClient()) return ActionResult.CONSUME; - PacketRegistry.PERMISSION_CHECK.send(new EmptyPacket(),response -> { + PacketRegistry.PERMISSION_CHECK.send(response -> { if (response.hasPermission()) this.validateOnUse(level, blockPos, pathMarkerBlockEntity, player); }); @@ -93,7 +99,7 @@ public void validateOnUse(World level, BlockPos blockPos, PathMarkerBlockEntity data.setTarget(blockPos.subtract(selectedBlockPosition)); } - PathMarkerUpdatePacket packet = new PathMarkerUpdatePacket(pathMarker.getPos(), pathMarker.createNbt()); + PathMarkerUpdatePacket packet = new PathMarkerUpdatePacket(pathMarker.getPos(), pathMarker.createNbt(level.getRegistryManager())); PacketRegistry.PATH_MARKER_UPDATE.send(packet); player.sendMessage(message); ArdaPaths.LOGGER.info("Sending Update Packet"); @@ -135,6 +141,6 @@ public BlockEntity createBlockEntity(BlockPos blockPos, BlockState blockState) @Override public BlockEntityTicker getTicker(World level, BlockState blockState, BlockEntityType blockEntityType) { - return level.isClient ? checkType(blockEntityType, ModBlockEntities.PATH_MARKER, PathMarkerBlockEntity::tick) : null; + return validateTicker(blockEntityType, ModBlockEntities.PATH_MARKER, PathMarkerBlockEntity::tick); } } \ No newline at end of file diff --git a/src/main/java/space/ajcool/ardapaths/mc/blocks/entities/PathMarkerBlockEntity.java b/src/main/java/space/ajcool/ardapaths/mc/blocks/entities/PathMarkerBlockEntity.java index c2a90d0..a8ecf7c 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/blocks/entities/PathMarkerBlockEntity.java +++ b/src/main/java/space/ajcool/ardapaths/mc/blocks/entities/PathMarkerBlockEntity.java @@ -7,6 +7,7 @@ import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; +import net.minecraft.registry.RegistryWrapper; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -56,7 +57,9 @@ public void createTrail(@NotNull String pathId, @NotNull String chapterId, @NotN public static void tick(World level, BlockPos blockPos, BlockState blockState, PathMarkerBlockEntity pathMarkerBlockEntity) { - Paths.addTickingMarker(pathMarkerBlockEntity); + if (level.isClient()) { + Paths.addTickingMarker(pathMarkerBlockEntity); + } } @Override @@ -66,9 +69,9 @@ public static void tick(World level, BlockPos blockPos, BlockState blockState, P } @Override - public @NotNull NbtCompound toInitialChunkDataNbt() + public @NotNull NbtCompound toInitialChunkDataNbt(RegistryWrapper.WrapperLookup wrapper) { - return this.createNbt(); + return this.createNbt(wrapper); } public void markUpdated() @@ -83,11 +86,11 @@ public void markUpdated() * @param compoundTag The NBT compound tag */ @Override - public void readNbt(NbtCompound compoundTag) + public void readNbt(NbtCompound compoundTag, RegistryWrapper.WrapperLookup wrapper) { NbtCompound converted = PathMarkerBlockEntityConverter.convertNbt(compoundTag); - super.readNbt(converted); + super.readNbt(converted, wrapper); this.applyNbt(converted.getCompound("paths")); } @@ -98,9 +101,9 @@ public void readNbt(NbtCompound compoundTag) * @param compoundTag The NBT compound tag */ @Override - public void writeNbt(NbtCompound compoundTag) + public void writeNbt(NbtCompound compoundTag, RegistryWrapper.WrapperLookup wrapper) { - super.writeNbt(compoundTag); + super.writeNbt(compoundTag, wrapper); this.toNbt(compoundTag); } @@ -468,7 +471,7 @@ public boolean isEmpty() @Override public void applyNbt(NbtCompound nbt) { - this.target = nbt.contains("target") ? NbtHelper.toBlockPos(nbt.getCompound("target")) : null; + this.target = nbt.contains("target") ? NbtHelper.toBlockPos(nbt, "target").orElse(null) : null; this.proximityMessage = nbt.getString("proximity_message"); this.activationRange = nbt.getInt("activation_range"); this.chapterId = nbt.getString("chapter"); diff --git a/src/main/java/space/ajcool/ardapaths/mc/items/ModItemGroups.java b/src/main/java/space/ajcool/ardapaths/mc/items/ModItemGroups.java index 4f82bbf..53133a3 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/items/ModItemGroups.java +++ b/src/main/java/space/ajcool/ardapaths/mc/items/ModItemGroups.java @@ -33,7 +33,7 @@ public class ModItemGroups */ private static ItemGroup register(final String id, final ItemGroup group, Item... items) { - RegistryKey key = RegistryKey.of(Registries.ITEM_GROUP.getKey(), new Identifier(ArdaPaths.MOD_ID, id)); + RegistryKey key = RegistryKey.of(Registries.ITEM_GROUP.getKey(), Identifier.of(ArdaPaths.MOD_ID, id)); if (Registries.ITEM_GROUP.contains(key)) { return Registries.ITEM_GROUP.get(key); diff --git a/src/main/java/space/ajcool/ardapaths/mc/items/ModItems.java b/src/main/java/space/ajcool/ardapaths/mc/items/ModItems.java index af806c3..ebd73b7 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/items/ModItems.java +++ b/src/main/java/space/ajcool/ardapaths/mc/items/ModItems.java @@ -1,6 +1,6 @@ package space.ajcool.ardapaths.mc.items; -import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +//import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.item.Item; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; @@ -13,7 +13,7 @@ public class ModItems { public static final PathRevealerItem PATH_REVEALER = register( "path_revealer", - new PathRevealerItem(new FabricItemSettings().maxCount(1).fireproof().rarity(Rarity.EPIC)) + new PathRevealerItem(new Item.Settings().maxCount(1).fireproof().rarity(Rarity.EPIC)) ); public static final Item PATH_MARKER = ModBlocks.PATH_MARKER.asItem(); diff --git a/src/main/java/space/ajcool/ardapaths/mc/items/PathRevealerItem.java b/src/main/java/space/ajcool/ardapaths/mc/items/PathRevealerItem.java index 5662699..f225449 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/items/PathRevealerItem.java +++ b/src/main/java/space/ajcool/ardapaths/mc/items/PathRevealerItem.java @@ -2,17 +2,16 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipType; import net.minecraft.text.Style; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; -import org.jetbrains.annotations.Nullable; import space.ajcool.ardapaths.ArdaPathsClient; import space.ajcool.ardapaths.core.data.config.shared.PathData; import space.ajcool.ardapaths.screens.Screens; @@ -39,19 +38,19 @@ public TypedActionResult use(World level, PlayerEntity player, Hand i } @Override - public void appendTooltip(ItemStack itemStack, @Nullable World level, List list, TooltipContext tooltipFlag) + public void appendTooltip(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipType options) { - super.appendTooltip(itemStack, level, list, tooltipFlag); + super.appendTooltip(stack, context, tooltip, options); PathData path = ArdaPathsClient.CONFIG.getSelectedPath(); if (path != null) { var text = Text.literal("You are currently on ").formatted(Formatting.GRAY).append(Text.literal(path.getName()).fillStyle(Style.EMPTY.withColor(path.getPrimaryColor().asHex()))); - list.add(text); + tooltip.add(text); } - list.add(Text.literal(" ")); - list.add(Text.literal("Hold ").formatted(Formatting.AQUA).append(Text.literal("this item to start pathfinding.").formatted(Formatting.GRAY))); - list.add(Text.literal("Right Click ").formatted(Formatting.AQUA).append(Text.literal("to change your path.").formatted(Formatting.GRAY))); + tooltip.add(Text.literal(" ")); + tooltip.add(Text.literal("Hold ").formatted(Formatting.AQUA).append(Text.literal("this item to start pathfinding.").formatted(Formatting.GRAY))); + tooltip.add(Text.literal("Right Click ").formatted(Formatting.AQUA).append(Text.literal("to change your path.").formatted(Formatting.GRAY))); } } diff --git a/src/main/java/space/ajcool/ardapaths/mc/particles/ModParticles.java b/src/main/java/space/ajcool/ardapaths/mc/particles/ModParticles.java index 408d547..2203bd4 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/particles/ModParticles.java +++ b/src/main/java/space/ajcool/ardapaths/mc/particles/ModParticles.java @@ -4,7 +4,7 @@ import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; -import net.minecraft.particle.DefaultParticleType; +import net.minecraft.particle.SimpleParticleType; import net.minecraft.particle.ParticleType; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; @@ -17,7 +17,7 @@ public class ModParticles * If adding a new particle, make sure to add it to the {@link ModParticles#initClient} method. */ - public static final DefaultParticleType PATH = register( + public static final SimpleParticleType PATH = register( "path", FabricParticleTypes.simple(true) ); @@ -30,7 +30,7 @@ public class ModParticles */ private static > T register(final String id, final T type) { - return Registry.register(Registries.PARTICLE_TYPE, new Identifier(ArdaPaths.MOD_ID, id), type); + return Registry.register(Registries.PARTICLE_TYPE, Identifier.of(ArdaPaths.MOD_ID, id), type); } public static void init() diff --git a/src/main/java/space/ajcool/ardapaths/mc/particles/PathParticleProvider.java b/src/main/java/space/ajcool/ardapaths/mc/particles/PathParticleProvider.java index a869761..d67fe6b 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/particles/PathParticleProvider.java +++ b/src/main/java/space/ajcool/ardapaths/mc/particles/PathParticleProvider.java @@ -8,12 +8,12 @@ import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.world.ClientWorld; -import net.minecraft.particle.DefaultParticleType; +import net.minecraft.particle.SimpleParticleType; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @Environment(EnvType.CLIENT) -public class PathParticleProvider implements ParticleFactory +public class PathParticleProvider implements ParticleFactory { private final SpriteProvider sprite; @@ -22,7 +22,7 @@ public PathParticleProvider(SpriteProvider spriteSet) this.sprite = spriteSet; } - public Particle createParticle(DefaultParticleType simpleParticleType, ClientWorld level, double x, double y, double z, double encodedColorA, double encodedColorB, double encodedColorC) + public Particle createParticle(SimpleParticleType simpleParticleType, ClientWorld level, double x, double y, double z, double encodedColorA, double encodedColorB, double encodedColorC) { var glowParticle = new GlowParticle(level, x, y, z, 0.0, 0.0, 0.0, this.sprite) { diff --git a/src/main/java/space/ajcool/ardapaths/mc/sounds/ModSounds.java b/src/main/java/space/ajcool/ardapaths/mc/sounds/ModSounds.java index 54d42ba..7e1b3cc 100644 --- a/src/main/java/space/ajcool/ardapaths/mc/sounds/ModSounds.java +++ b/src/main/java/space/ajcool/ardapaths/mc/sounds/ModSounds.java @@ -17,7 +17,7 @@ public class ModSounds */ private static SoundEvent register(final String id) { - final Identifier identifier = new Identifier(ArdaPaths.MOD_ID, id); + final Identifier identifier = Identifier.of(ArdaPaths.MOD_ID, id); return Registry.register(Registries.SOUND_EVENT, identifier, SoundEvent.of(identifier)); } diff --git a/src/main/java/space/ajcool/ardapaths/paths/rendering/ProximityRenderer.java b/src/main/java/space/ajcool/ardapaths/paths/rendering/ProximityRenderer.java index 7b31b14..fffcb61 100644 --- a/src/main/java/space/ajcool/ardapaths/paths/rendering/ProximityRenderer.java +++ b/src/main/java/space/ajcool/ardapaths/paths/rendering/ProximityRenderer.java @@ -2,6 +2,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderTickCounter; import net.minecraft.util.Hand; import org.jetbrains.annotations.NotNull; import space.ajcool.ardapaths.core.Client; @@ -39,7 +40,8 @@ public class ProximityRenderer { private AnimatedTitle currentDisplayedTitle; - public static void render(DrawContext context, float delta) { + public static void render(DrawContext context, RenderTickCounter tickCounter) { + float delta = tickCounter.getTickDelta(true); INSTANCE.renderNextItem(context, delta); updateVisualMessageStack(context); } @@ -51,7 +53,8 @@ public static void render(DrawContext context, float delta) { */ public static void addMessage(@NotNull AnimatedMessage animatedMessage) { - if (INSTANCE.currentDisplayedMessage != null && INSTANCE.currentDisplayedMessage.equals(animatedMessage)) return; + if (INSTANCE.currentDisplayedMessage != null && INSTANCE.currentDisplayedMessage.equals(animatedMessage)) + return; INSTANCE.addToQueue(animatedMessage); } @@ -106,8 +109,8 @@ private void renderNextItem(DrawContext context, float delta) { } // Render current items if available - if (currentDisplayedMessage != null) currentDisplayedMessage.render(context); - if (currentDisplayedTitle != null) currentDisplayedTitle.render(context); + if (currentDisplayedMessage != null) currentDisplayedMessage.render(context); + if (currentDisplayedTitle != null) currentDisplayedTitle.render(context); } /** @@ -118,7 +121,7 @@ private void renderNextItem(DrawContext context, float delta) { * between 1 and 64. */ @SuppressWarnings("DataFlowIssue") - private static void updateVisualMessageStack(DrawContext context){ + private static void updateVisualMessageStack(DrawContext context) { var count = (INSTANCE.currentDisplayedMessage != null && !INSTANCE.currentDisplayedMessage.isFinished()) ? 1 : 0; count += (INSTANCE.currentDisplayedTitle != null && !INSTANCE.currentDisplayedTitle.isFinished()) ? 1 : 0; diff --git a/src/main/java/space/ajcool/ardapaths/screens/ChapterEditScreen.java b/src/main/java/space/ajcool/ardapaths/screens/ChapterEditScreen.java index 5b515fd..a79644f 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/ChapterEditScreen.java +++ b/src/main/java/space/ajcool/ardapaths/screens/ChapterEditScreen.java @@ -392,7 +392,6 @@ private void resetFields() { @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - this.renderBackground(context); super.render(context, mouseX, mouseY, delta); int centerX = this.width / 2; diff --git a/src/main/java/space/ajcool/ardapaths/screens/ConfirmationPopup.java b/src/main/java/space/ajcool/ardapaths/screens/ConfirmationPopup.java index 276b8bf..bae8dc8 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/ConfirmationPopup.java +++ b/src/main/java/space/ajcool/ardapaths/screens/ConfirmationPopup.java @@ -48,7 +48,7 @@ protected void init() { @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - this.renderBackground(context); + super.render(context, mouseX, mouseY, delta); // Draw centered text context.drawCenteredTextWithShadow( @@ -58,8 +58,6 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { this.height / 2 - 20, 0xFFFFFF ); - - super.render(context, mouseX, mouseY, delta); } @Override diff --git a/src/main/java/space/ajcool/ardapaths/screens/JournalScreen.java b/src/main/java/space/ajcool/ardapaths/screens/JournalScreen.java index 0247f26..8067f16 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/JournalScreen.java +++ b/src/main/java/space/ajcool/ardapaths/screens/JournalScreen.java @@ -79,7 +79,6 @@ protected void init() { // Center vertically int listTop = (height - listHeight) / 2 + 20; - int listBottom = listTop + listHeight; // Title above list int titleY = listTop - 25; @@ -91,11 +90,11 @@ protected void init() { ); JournalListWidget listWidget = new JournalListWidget( - this.client, totalUiWidth, listHeight, listTop, listBottom, 32 + this.client, totalUiWidth, listHeight, listTop, 32 ); // Center horizontally - listWidget.setLeftPos((width - totalUiWidth) / 2); + listWidget.setPosition((width - totalUiWidth) / 2, listTop); // Add pre-built entries for (JournalListEntry entry : entries) { @@ -138,7 +137,6 @@ private void handleTeleportRequest(String pathId, String chapterId, PlayerTelepo @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - this.renderBackground(context); super.render(context, mouseX, mouseY, delta); } } \ No newline at end of file diff --git a/src/main/java/space/ajcool/ardapaths/screens/MarkerEditScreen.java b/src/main/java/space/ajcool/ardapaths/screens/MarkerEditScreen.java index 6e1b6ef..dda6285 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/MarkerEditScreen.java +++ b/src/main/java/space/ajcool/ardapaths/screens/MarkerEditScreen.java @@ -197,7 +197,7 @@ private void buildSubtitle(int x, int y){ this.addDrawableChild(TextBuilder.create() .setPosition(x, y) - .setSize(280, 20) + .setSize(360, 20) .setText(Text.translatable("ardapaths.client.marker.configuration.screens.linked_chapters_and_paths", linkedPaths, linkedChapters)) .build() ); @@ -206,8 +206,8 @@ private void buildSubtitle(int x, int y){ this.buildMarkerEditLinksButton(x+260, y); } else { this.addDrawableChild(TextBuilder.create() - .setPosition(x + 35, y) - .setSize(280, 20) + .setPosition(x, y) + .setSize(360, 20) .setText(Text.translatable("ardapaths.client.marker.configuration.screens.no_linked_chapters_and_paths")) .build() ); @@ -272,7 +272,7 @@ private void buildChapterSelectionDropdown(int x, int y) return label; }) .setOptions(chapters) - .setSelected(ArdaPathsClient.CONFIG.getPath(selectedPathId).getChapter(selectedChapterId)) + .setSelected(selectedPath != null ? selectedPath.getChapter(selectedChapterId) : null) .setOnSelect(chapter -> { selectedChapterId = chapter.getId(); @@ -461,7 +461,7 @@ private void buildSaveButton(int x, int y) @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - this.renderBackground(context); + super.render(context, mouseX, mouseY, delta); int centerX = this.width / 2; int currentY = 112; @@ -475,21 +475,12 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) context.drawTextWithShadow(this.textRenderer, Text.translatable("ardapaths.client.marker.configuration.screens.ffactor"), centerX + 45, sideY += 20, 0xFFFFFF); context.drawTextWithShadow(this.textRenderer, Text.translatable("ardapaths.client.marker.configuration.screens.fspeed"), centerX + 49, sideY += 20, 0xFFFFFF); context.drawTextWithShadow(this.textRenderer, Text.translatable("ardapaths.client.marker.configuration.screens.opacity"), centerX + 53, sideY += 20, 0xFFFFFF); - - super.render(context, mouseX, mouseY, delta); } @Override public boolean mouseReleased(double mouseX, double mouseY, int button) { - return super.mouseReleased(mouseX, mouseY, button) || this.multiLineEditBox.mouseReleased(mouseX, mouseY, button); - } - - @Override - public void tick() - { - this.multiLineEditBox.tick(); - super.tick(); + return super.mouseReleased(mouseX, mouseY, button) || (this.multiLineEditBox != null && this.multiLineEditBox.mouseReleased(mouseX, mouseY, button)); } public void saveAndClose() diff --git a/src/main/java/space/ajcool/ardapaths/screens/MarkerLinksEditScreen.java b/src/main/java/space/ajcool/ardapaths/screens/MarkerLinksEditScreen.java index f5a5642..d60c437 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/MarkerLinksEditScreen.java +++ b/src/main/java/space/ajcool/ardapaths/screens/MarkerLinksEditScreen.java @@ -112,8 +112,8 @@ protected void init() { } else { this.addDrawableChild(TextBuilder.create() - .setPosition(centerX - 70, y+30) - .setSize(140, 20) + .setPosition(centerX - 140, y+30) + .setSize(280, 20) .setText(Text.translatable("ardapaths.client.chapter.configuration.screens.marker.links.no_linked_data")) .build() ); @@ -137,7 +137,6 @@ private void unlinkMarkerToPathAndChapter(String pathEntryKey, ChapterData chapt @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { - this.renderBackground(context); super.render(context, mouseX, mouseY, delta); } diff --git a/src/main/java/space/ajcool/ardapaths/screens/PathSelectionScreen.java b/src/main/java/space/ajcool/ardapaths/screens/PathSelectionScreen.java index 874cf12..003d984 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/PathSelectionScreen.java +++ b/src/main/java/space/ajcool/ardapaths/screens/PathSelectionScreen.java @@ -77,9 +77,10 @@ protected void init() String currentChapterName = currentChapter != null ? currentChapter.getName() : "0"; String currentPathName = currentPath != null ? currentPath.getName() : Text.translatable("ardapaths.client.configuration.screens.generic_path").toString(); + int totalContentWidth = UI_ELEMENT_WIDTH * 2 + COLUMNS_SPACING; this.addDrawableChild(TextBuilder.create() - .setPosition(center - 75, y) - .setSize(150, 20) + .setPosition(center - totalContentWidth / 2, y) + .setSize(totalContentWidth, 20) .setText(Text.literal(Text.translatable("ardapaths.client.configuration.screens.path_selection.current_path_chapter",currentChapterName).getString()) .append(Text.literal(Text.translatable(currentPathName).getString()) .fillStyle(Style.EMPTY.withColor(currentPath != null ? currentPath.getPrimaryColor().asHex() : Color.fromRgb(100, 100, 100).asHex())))) @@ -338,7 +339,6 @@ protected void applyValue() { public void render(DrawContext context, int mouseX, int mouseY, float delta) { - this.renderBackground(context); super.render(context, mouseX, mouseY, delta); } } \ No newline at end of file diff --git a/src/main/java/space/ajcool/ardapaths/screens/widgets/CheckboxWidget.java b/src/main/java/space/ajcool/ardapaths/screens/widgets/CheckboxWidget.java index 2cb001b..ba906aa 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/widgets/CheckboxWidget.java +++ b/src/main/java/space/ajcool/ardapaths/screens/widgets/CheckboxWidget.java @@ -14,7 +14,10 @@ public class CheckboxWidget extends PressableWidget { - private static final Identifier TEXTURE = new Identifier("textures/gui/checkbox.png"); + private static final Identifier CHECKBOX = Identifier.ofVanilla("widget/checkbox"); + private static final Identifier CHECKBOX_HIGHLIGHTED = Identifier.ofVanilla("widget/checkbox_highlighted"); + private static final Identifier CHECKBOX_SELECTED = Identifier.ofVanilla("widget/checkbox_selected"); + private static final Identifier CHECKBOX_SELECTED_HIGHLIGHTED = Identifier.ofVanilla("widget/checkbox_selected_highlighted"); private final Text text; private boolean checked; private boolean enabled; @@ -30,7 +33,7 @@ public CheckboxWidget(int x, int y, int width, int height, Text text, boolean ch } @Override - protected void renderButton(DrawContext context, int mouseX, int mouseY, float delta) + public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { int x = this.getX(); int y = this.getY(); @@ -53,28 +56,16 @@ protected void renderButton(DrawContext context, int mouseX, int mouseY, float d return; } - if (this.isHovered()) + Identifier texture; + if (checked) { - if (checked) - { - context.drawTexture(TEXTURE, x, y, width, height, 20, 20, 20, 20, 64, 64); - } - else - { - context.drawTexture(TEXTURE, x, y, width, height, 20, 0, 20, 20, 64, 64); - } + texture = this.isHovered() ? CHECKBOX_SELECTED_HIGHLIGHTED : CHECKBOX_SELECTED; } else { - if (checked) - { - context.drawTexture(TEXTURE, x, y, width, height, 0, 20, 20, 20, 64, 64); - } - else - { - context.drawTexture(TEXTURE, x, y, width, height, 0, 0, 20, 20, 64, 64); - } + texture = this.isHovered() ? CHECKBOX_HIGHLIGHTED : CHECKBOX; } + context.drawGuiTexture(texture, x, y, width, height); int textX = x - width - textRenderer.getWidth(text) + 10; diff --git a/src/main/java/space/ajcool/ardapaths/screens/widgets/DropdownWidget.java b/src/main/java/space/ajcool/ardapaths/screens/widgets/DropdownWidget.java index 068dacc..50039da 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/widgets/DropdownWidget.java +++ b/src/main/java/space/ajcool/ardapaths/screens/widgets/DropdownWidget.java @@ -10,6 +10,8 @@ import org.jetbrains.annotations.Nullable; import space.ajcool.ardapaths.core.Client; +import static net.minecraft.util.Identifier.ofVanilla; + import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -17,7 +19,9 @@ public class DropdownWidget extends ClickableWidget { - private static final Identifier WIDGETS_TEXTURE = new Identifier("textures/gui/widgets.png"); + private static final Identifier BUTTON_TEXTURE = ofVanilla("widget/button"); + private static final Identifier BUTTON_HIGHLIGHTED_TEXTURE = ofVanilla("widget/button_highlighted"); + private static final Identifier BUTTON_DISABLED_TEXTURE = ofVanilla("widget/button_disabled"); private final int originalWidth; private final int originalHeight; @@ -58,10 +62,10 @@ public DropdownWidget( } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) + protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { // First, draw the button itself. - super.render(context, mouseX, mouseY, delta); + renderButton(context, mouseX, mouseY, delta); Text title = this.getMessage(); if (title != null) { @@ -110,17 +114,16 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) } } - @Override - protected void renderButton(DrawContext context, int mouseX, int mouseY, float delta) + private void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { TextRenderer textRenderer = Client.mc().textRenderer; int x = getX(); int y = getY(); - int vScale = (mouseX >= x && mouseX <= x + originalWidth && - mouseY >= y && mouseY <= y + originalHeight) ? 2 : 1; - int v = 46 + (vScale * 20); - renderBox(context, x, y, selected, textRenderer, originalWidth, originalHeight, v); + boolean hovered = mouseX >= x && mouseX <= x + originalWidth && + mouseY >= y && mouseY <= y + originalHeight; + Identifier texture = hovered ? BUTTON_HIGHLIGHTED_TEXTURE : BUTTON_TEXTURE; + renderBox(context, x, y, selected, textRenderer, originalWidth, originalHeight, texture); String arrow = expanded ? "▲" : "▼"; int arrowX = x + originalWidth - textRenderer.getWidth(arrow) - 4; @@ -136,25 +139,30 @@ private void renderItem(DrawContext context, int x, int y, T item, boolean selec TextRenderer textRenderer = Client.mc().textRenderer; int width = getWidth(); - int v = 46; + Identifier texture; if (hovered) { - v += 40; + texture = BUTTON_HIGHLIGHTED_TEXTURE; } else if (selected) { - v += 20; + texture = BUTTON_TEXTURE; + } + else + { + texture = BUTTON_DISABLED_TEXTURE; } - renderBox(context, x, y, item, textRenderer, width, originalHeight, v); + renderBox(context, x, y, item, textRenderer, width, originalHeight, texture); } /** * Renders a box with text. If item is null, "None" is displayed. */ private void renderBox(DrawContext context, int x, int y, T item, TextRenderer textRenderer, - int width, int height, int v) + int width, int height, Identifier texture) { - context.drawNineSlicedTexture(WIDGETS_TEXTURE, x, y, width, height, 20, 4, 200, 20, 0, v); + context.drawGuiTexture(texture, x, y, width, height); + Text display = (item == null) ? Text.literal("None") : optionDisplay.apply(item); int textX = x + 4; int textY = y + (height - textRenderer.fontHeight) / 2; @@ -212,7 +220,6 @@ public void onClick(double mouseX, double mouseY) selected = item; if (onSelect != null) { - System.out.println("Accepting"); onSelect.accept(item); } } @@ -227,7 +234,7 @@ public void onClick(double mouseX, double mouseY) * the user can scroll using the mouse wheel. */ @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) + public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { if (expanded) { @@ -241,13 +248,13 @@ public boolean mouseScrolled(double mouseX, double mouseY, double amount) if (totalItems > maxVisibleOptions) { // Adjust scrollOffset - scrollOffset -= (int) amount; + scrollOffset -= (int) verticalAmount; scrollOffset = Math.max(0, scrollOffset); scrollOffset = Math.min(scrollOffset, totalItems - maxVisibleOptions); return true; } } - return super.mouseScrolled(mouseX, mouseY, amount); + return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); } @Override diff --git a/src/main/java/space/ajcool/ardapaths/screens/widgets/InputBoxWidget.java b/src/main/java/space/ajcool/ardapaths/screens/widgets/InputBoxWidget.java index cbcf606..30bda93 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/widgets/InputBoxWidget.java +++ b/src/main/java/space/ajcool/ardapaths/screens/widgets/InputBoxWidget.java @@ -100,9 +100,9 @@ public boolean charTyped(char chr, int modifiers) * overdraw its text in a light gray color and show a tooltip when hovered. */ @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) + public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { - super.render(context, mouseX, mouseY, delta); + super.renderWidget(context, mouseX, mouseY, delta); if (!enabled) { @@ -123,7 +123,7 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) String raw = this.getText(); // Convert raw text → colored styled text (you define this) - Text colored = Text.literal(this.getText()).fillStyle(Style.EMPTY.withColor(backgroundColor));; + Text colored = Text.literal(this.getText()).fillStyle(Style.EMPTY.withColor(backgroundColor)); // Coordinates for drawing inside the box int textX = this.getX() + 4; diff --git a/src/main/java/space/ajcool/ardapaths/screens/widgets/JournalListEntry.java b/src/main/java/space/ajcool/ardapaths/screens/widgets/JournalListEntry.java index 89b2fd8..93eaa19 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/widgets/JournalListEntry.java +++ b/src/main/java/space/ajcool/ardapaths/screens/widgets/JournalListEntry.java @@ -146,7 +146,7 @@ public void render(DrawContext context, int index, int y, int x, int entryWidth, @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (this.teleportButton.isMouseOver(mouseX, mouseY)) { + if (this.teleportButton != null && this.teleportButton.isMouseOver(mouseX, mouseY)) { return this.teleportButton.mouseClicked(mouseX, mouseY, button); } return false; diff --git a/src/main/java/space/ajcool/ardapaths/screens/widgets/JournalListWidget.java b/src/main/java/space/ajcool/ardapaths/screens/widgets/JournalListWidget.java index 247735c..b14e07c 100644 --- a/src/main/java/space/ajcool/ardapaths/screens/widgets/JournalListWidget.java +++ b/src/main/java/space/ajcool/ardapaths/screens/widgets/JournalListWidget.java @@ -18,15 +18,12 @@ public class JournalListWidget extends EntryListWidget { * @param client The Minecraft client * @param width The width of the widget * @param height The height of the widget - * @param top The top position of the widget - * @param bottom The bottom position of the widget + * @param y The y position of the widget * @param itemHeight The height of each item (not used for variable height entries) */ - public JournalListWidget(MinecraftClient client, int width, int height, int top, int bottom, int itemHeight) { - super(client, width, height, top, bottom, itemHeight); - setRenderBackground(false); + public JournalListWidget(MinecraftClient client, int width, int height, int y, int itemHeight) { + super(client, width, height, y, itemHeight); setRenderHeader(false, 0); - setRenderHorizontalShadows(false); } /** @@ -41,12 +38,12 @@ public int getRowWidth() { * Position the scrollbar on the right side of the list. */ @Override - protected int getScrollbarPositionX() { - return this.left + this.width - 6; + protected int getScrollbarX() { + return this.getX() + this.width - 6; } /** - * Add a journal entry to the list. + * Add a journal entry to the list. */ public void addJournalEntry(JournalListEntry entry) { this.addEntry(entry); @@ -64,7 +61,9 @@ protected int getMaxPosition() { return total + this.headerHeight; } - /** Render the list with variable height entries. + /** + * Render the list with variable height entries. + * * @param context The draw context * @param mouseX The mouse x position * @param mouseY The mouse y position @@ -75,14 +74,14 @@ protected void renderList(DrawContext context, int mouseX, int mouseY, float del int rowLeft = this.getRowLeft(); int rowWidth = this.getRowWidth(); - int currentY = this.top + 4 - (int) this.getScrollAmount(); + int currentY = this.getY() + 4 - (int) this.getScrollAmount(); for (int i = 0; i < this.getEntryCount(); i++) { JournalListEntry entry = this.getEntry(i); int entryHeight = entry.getHeight(rowWidth); - if (currentY + entryHeight >= this.top && currentY <= this.bottom) { + if (currentY + entryHeight >= this.getY() && currentY <= this.getBottom()) { entry.render(context, i, currentY, rowLeft, rowWidth, entryHeight, mouseX, mouseY, this.isMouseOver(mouseX, mouseY) && this.getEntryAtPosition(mouseX, mouseY) == entry, delta); } @@ -92,13 +91,14 @@ protected void renderList(DrawContext context, int mouseX, int mouseY, float del /** * Get the entry at the given position, accounting for variable heights. + * * @param x The x position * @param y The y position - * @return The entry at the given position, or null if none. + * @return The entry at the given position, or null if none. */ private JournalListEntry getJournalEntryAtPosition(double x, double y) { - int currentY = this.top + 4 - (int) this.getScrollAmount(); + int currentY = this.getY() + 4 - (int) this.getScrollAmount(); for (int i = 0; i < this.getEntryCount(); i++) { JournalListEntry entry = this.getEntry(i); @@ -114,9 +114,10 @@ private JournalListEntry getJournalEntryAtPosition(double x, double y) { /** * Handle mouse clicks to delegate to entries. * This is necessary because entries have variable heights. + * * @param mouseX The mouse x position * @param mouseY The mouse y position - * @param button The mouse button + * @param button The mouse button * @return true if the click was handled by an entry, false otherwise. */ @Override @@ -140,7 +141,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { * Append narration information for accessibility. */ @Override - public void appendNarrations(NarrationMessageBuilder builder) { + protected void appendClickableNarrations(NarrationMessageBuilder builder) { JournalListEntry selected = this.getSelectedOrNull(); diff --git a/src/main/resources/ardapaths.mixins.json b/src/main/resources/ardapaths.mixins.json index a2ce64f..6711591 100644 --- a/src/main/resources/ardapaths.mixins.json +++ b/src/main/resources/ardapaths.mixins.json @@ -1,7 +1,7 @@ { "required": true, "package": "space.ajcool.ardapaths.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "mixins": [ ], "client": [ diff --git a/src/main/resources/assets/ardapaths/models/item/path_revealer.json b/src/main/resources/assets/ardapaths/models/item/path_revealer.json index 0d75938..4008933 100644 --- a/src/main/resources/assets/ardapaths/models/item/path_revealer.json +++ b/src/main/resources/assets/ardapaths/models/item/path_revealer.json @@ -1,6 +1,6 @@ { "credit": "Made with Blockbench", - "parent": "item/generated", + "parent": "minecraft:item/generated", "textures": { "layer0": "ardapaths:item/path_revealer" }, diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ebf97b6..ca9fd18 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -20,9 +20,6 @@ ], "main": [ "space.ajcool.ardapaths.ArdaPaths" - ], - "arda-regions:api": [ - "space.ajcool.ardapaths.core.consumers.ArdaRegionsConsumer" ] }, "mixins": [ @@ -31,9 +28,7 @@ "accessWidener": "arda-path.accesswidener", "depends": { "fabricloader": ">=${loader_version}", - "fabric": "*", "minecraft": "${minecraft_version}", - "fabric-permissions-api-v0": "*", - "arda-regions": "*" + "fabric-api": "*" } } \ No newline at end of file