Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'fabric-loom' version '1.10-SNAPSHOT'
id 'net.fabricmc.fabric-loom' version '1.15-SNAPSHOT'
id 'maven-publish'
}

Expand All @@ -25,11 +25,10 @@ repositories {
dependencies {
// To change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
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}"
implementation "net.fabricmc:fabric-loader:${project.loader_version}"
implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

include modImplementation("net.hypixel:mod-api:${project.mod_api_version}")
include implementation("net.hypixel:mod-api:${project.mod_api_version}")
}

processResources {
Expand All @@ -45,7 +44,7 @@ processResources {
}
}

def targetJavaVersion = 17
def targetJavaVersion = 25
tasks.withType(JavaCompile).configureEach {
// ensure that the encoding is set to UTF-8, no matter what the system default is
// this fixes some edge cases with special characters not displaying correctly
Expand Down
7 changes: 3 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ org.gradle.jvmargs=-Xmx1G

# Fabric Properties
# check these on https://modmuss50.me/fabric.html
minecraft_version=1.21
yarn_mappings=1.21+build.9
loader_version=0.16.10
minecraft_version=26.1-pre-1
loader_version=0.18.4

# Mod Properties
mod_version = 1.0.1+build.dev
Expand All @@ -15,4 +14,4 @@ org.gradle.jvmargs=-Xmx1G

# Dependencies
# check this on https://modmuss50.me/fabric.html
fabric_version=0.102.0+1.21
fabric_version=0.143.12+26.1
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
34 changes: 19 additions & 15 deletions src/main/java/net/hypixel/modapi/fabric/FabricModAPI.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package net.hypixel.modapi.fabric;

import com.mojang.logging.LogUtils;
import io.netty.buffer.ByteBuf;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.networking.v1.ClientConfigurationNetworking;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.gametest.v1.GameTest;
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import net.fabricmc.loader.api.FabricLoader;
import net.hypixel.modapi.HypixelModAPI;
Expand All @@ -16,12 +18,10 @@
import net.hypixel.modapi.packet.HypixelPacket;
import net.hypixel.modapi.packet.impl.clientbound.ClientboundHelloPacket;
import net.hypixel.modapi.packet.impl.clientbound.event.ClientboundLocationPacket;
import net.minecraft.client.MinecraftClient;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.network.codec.PacketCodec;
import net.minecraft.network.packet.CustomPayload;
import net.minecraft.test.GameTest;
import net.minecraft.util.Identifier;
import net.minecraft.client.Minecraft;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.Identifier;
import org.jetbrains.annotations.ApiStatus;
import org.slf4j.Logger;

Expand Down Expand Up @@ -58,7 +58,7 @@ public boolean sendPacket(HypixelPacket packet) {

ServerboundHypixelPayload hypixelPayload = new ServerboundHypixelPayload(packet);

if (MinecraftClient.getInstance().getNetworkHandler() != null) {
if (Minecraft.getInstance().getConnection() != null) {
ClientPlayNetworking.send(hypixelPayload);
return true;
}
Expand Down Expand Up @@ -105,10 +105,12 @@ public static void reloadRegistrations() {

private static void registerClientbound(String identifier) {
try {
CustomPayload.Id<ClientboundHypixelPayload> clientboundId = new CustomPayload.Id<>(Identifier.of(identifier));
PacketCodec<PacketByteBuf, ClientboundHypixelPayload> codec = ClientboundHypixelPayload.buildCodec(clientboundId);
PayloadTypeRegistry.playS2C().register(clientboundId, codec);
PayloadTypeRegistry.configurationS2C().register(clientboundId, codec);
CustomPacketPayload.Type<ClientboundHypixelPayload> clientboundId = new CustomPacketPayload.Type<>(
Identifier.parse(identifier)
);
StreamCodec<ByteBuf, ClientboundHypixelPayload> codec = ClientboundHypixelPayload.buildCodec(clientboundId);
PayloadTypeRegistry.clientboundPlay().register(clientboundId, codec);
PayloadTypeRegistry.clientboundConfiguration().register(clientboundId, codec);

// Also register the global receiver for handling incoming packets during PLAY and CONFIGURATION
ClientPlayNetworking.registerGlobalReceiver(clientboundId, (payload, context) -> {
Expand Down Expand Up @@ -157,10 +159,12 @@ private static void handleIncomingPayload(String identifier, ClientboundHypixelP

private static void registerServerbound(String identifier) {
try {
CustomPayload.Id<ServerboundHypixelPayload> serverboundId = new CustomPayload.Id<>(Identifier.of(identifier));
PacketCodec<PacketByteBuf, ServerboundHypixelPayload> codec = ServerboundHypixelPayload.buildCodec(serverboundId);
PayloadTypeRegistry.playC2S().register(serverboundId, codec);
PayloadTypeRegistry.configurationC2S().register(serverboundId, codec);
CustomPacketPayload.Type<ServerboundHypixelPayload> serverboundId = new CustomPacketPayload.Type<>(
Identifier.parse(identifier)
);
StreamCodec<ByteBuf, ServerboundHypixelPayload> codec = ServerboundHypixelPayload.buildCodec();
PayloadTypeRegistry.serverboundPlay().register(serverboundId, codec);
PayloadTypeRegistry.serverboundConfiguration().register(serverboundId, codec);
} catch (IllegalArgumentException ignored) {
// Ignored as this is fired when we reload the registrations and the packet is already registered
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package net.hypixel.modapi.fabric.payload;

import io.netty.buffer.ByteBuf;
import net.hypixel.modapi.HypixelModAPI;
import net.hypixel.modapi.error.ErrorReason;
import net.hypixel.modapi.packet.ClientboundHypixelPacket;
import net.hypixel.modapi.serializer.PacketSerializer;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.network.codec.PacketCodec;
import net.minecraft.network.packet.CustomPayload;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import org.jspecify.annotations.NonNull;

public class ClientboundHypixelPayload implements CustomPayload {
private final Id<ClientboundHypixelPayload> id;
public class ClientboundHypixelPayload implements CustomPacketPayload {
private final Type<ClientboundHypixelPayload> type;

private ClientboundHypixelPacket packet;
private ErrorReason errorReason;

private ClientboundHypixelPayload(Id<ClientboundHypixelPayload> id, PacketByteBuf buf) {
this.id = id;
private ClientboundHypixelPayload(Type<ClientboundHypixelPayload> type, ByteBuf buf) {
this.type = type;

PacketSerializer serializer = new PacketSerializer(buf);
boolean success = serializer.readBoolean();
Expand All @@ -24,12 +25,12 @@ private ClientboundHypixelPayload(Id<ClientboundHypixelPayload> id, PacketByteBu
return;
}

this.packet = HypixelModAPI.getInstance().getRegistry().createClientboundPacket(id.id().toString(), serializer);
this.packet = HypixelModAPI.getInstance().getRegistry().createClientboundPacket(type.id().toString(), serializer);
}

@Override
public Id<? extends CustomPayload> getId() {
return id;
public @NonNull Type<? extends CustomPacketPayload> type() {
return type;
}

public boolean isSuccess() {
Expand All @@ -44,8 +45,8 @@ public ErrorReason getErrorReason() {
return errorReason;
}

public static PacketCodec<PacketByteBuf, ClientboundHypixelPayload> buildCodec(Id<ClientboundHypixelPayload> id) {
return CustomPayload.codecOf((value, buf) -> {
public static StreamCodec<ByteBuf, ClientboundHypixelPayload> buildCodec(Type<ClientboundHypixelPayload> id) {
return CustomPacketPayload.codec((value, buf) -> {
throw new UnsupportedOperationException("Cannot write ClientboundHypixelPayload");
}, buf -> new ClientboundHypixelPayload(id, buf));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
package net.hypixel.modapi.fabric.payload;

import io.netty.buffer.ByteBuf;
import net.hypixel.modapi.packet.HypixelPacket;
import net.hypixel.modapi.serializer.PacketSerializer;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.network.codec.PacketCodec;
import net.minecraft.network.packet.CustomPayload;
import net.minecraft.util.Identifier;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraft.resources.Identifier;
import org.jspecify.annotations.NonNull;

public class ServerboundHypixelPayload implements CustomPayload {
private final Id<ServerboundHypixelPayload> id;
public class ServerboundHypixelPayload implements CustomPacketPayload {
private final Type<ServerboundHypixelPayload> type;
private final HypixelPacket packet;

public ServerboundHypixelPayload(HypixelPacket packet) {
this.id = new CustomPayload.Id<>(Identifier.of(packet.getIdentifier()));
this.type = new CustomPacketPayload.Type<>(Identifier.parse(packet.getIdentifier()));
this.packet = packet;
}

private void write(PacketByteBuf buf) {
private void write(ByteBuf buf) {
PacketSerializer serializer = new PacketSerializer(buf);
packet.write(serializer);
}


@Override
public Id<? extends CustomPayload> getId() {
return id;
public @NonNull Type<? extends CustomPacketPayload> type() {
return type;
}

public static PacketCodec<PacketByteBuf, ServerboundHypixelPayload> buildCodec(Id<ServerboundHypixelPayload> id) {
return CustomPayload.codecOf(ServerboundHypixelPayload::write, buf -> {
public static StreamCodec<ByteBuf, ServerboundHypixelPayload> buildCodec() {
return CustomPacketPayload.codec(ServerboundHypixelPayload::write, _ -> {
throw new UnsupportedOperationException("Cannot read ServerboundHypixelPayload");
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
},
"depends": {
"fabricloader": ">=${loader_version}",
"fabric": "*",
"fabric-api": "*",
"minecraft": ">=${minecraft_version}"
}
}