diff --git a/.idea/misc.xml b/.idea/misc.xml
index 121ee87..b194438 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -12,7 +12,7 @@
-
+
\ No newline at end of file
diff --git a/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java b/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java
new file mode 100644
index 0000000..fe94544
--- /dev/null
+++ b/Common/src/main/java/com/hypherionmc/craterlib/api/networking/CommonPacketWrapper.java
@@ -0,0 +1,19 @@
+package com.hypherionmc.craterlib.api.networking;
+
+import com.hypherionmc.craterlib.core.networking.data.PacketHolder;
+import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf;
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+
+public record CommonPacketWrapper(PacketHolder container, T packet) implements CustomPacketPayload
+{
+ public void encode(BridgedFriendlyByteBuf buf)
+ {
+ container().encoder().accept(packet(), buf);
+ }
+
+ @Override
+ public Type extends CustomPacketPayload> type()
+ {
+ return container.type();
+ }
+}
diff --git a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java
index 81a9ed7..70084eb 100644
--- a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/CraterConfigScreen.java
@@ -269,7 +269,7 @@ public class CraterConfigScreen extends Screen {
Tesselator tesselator = Tesselator.getInstance();
BufferBuilder buffer = tesselator.getBuilder();
RenderSystem.setShader(GameRenderer::getPositionTexColorShader);
- RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION);
+ RenderSystem.setShaderTexture(0, Screen.MENU_BACKGROUND);
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR);
buffer.vertex(matrix, minX, maxY, 0.0F).uv(minX / 32.0F, maxY / 32.0F).color(red, green, blue, endAlpha).endVertex();
diff --git a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/Option.java b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/Option.java
index 821c749..f49ca68 100644
--- a/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/Option.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/client/gui/config/widgets/Option.java
@@ -1,5 +1,7 @@
package com.hypherionmc.craterlib.client.gui.config.widgets;
+import lombok.Getter;
+import lombok.Setter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
@@ -28,16 +30,10 @@ public abstract class Option extends AbstractContainerEventHandler {
public T value;
public boolean hasErrors;
public List extends GuiEventListener> children = new ArrayList<>();
+ @Setter
+ @Getter
private List langKeys = new ArrayList<>();
- public List getLangKeys() {
- return langKeys;
- }
-
- public void setLangKeys(List langKeys) {
- this.langKeys = langKeys;
- }
-
public abstract void render(Minecraft minecraft, Font font, int x, int y, int width, int height, GuiGraphics matrices, int mouseX, int mouseY, float delta);
public int height() {
diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java
index da7ba92..081c8fb 100644
--- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/CraterPacketNetwork.java
@@ -3,6 +3,7 @@ package com.hypherionmc.craterlib.core.networking;
import com.hypherionmc.craterlib.core.networking.data.PacketContext;
import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf;
import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier;
+import lombok.Getter;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
@@ -11,6 +12,7 @@ import java.util.function.Function;
/**
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
*/
+@Getter
public class CraterPacketNetwork {
private final PacketRegistry packetRegistry;
@@ -38,7 +40,4 @@ public class CraterPacketNetwork {
}
}
- public PacketRegistry getPacketRegistry() {
- return packetRegistry;
- }
}
\ No newline at end of file
diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java
index c14b370..d1ec06c 100644
--- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/PacketRegistry.java
@@ -18,7 +18,7 @@ import java.util.function.Function;
*/
public abstract class PacketRegistry implements CraterNetworkHandler, PacketRegistrar {
- final Map, PacketHolder>> PACKET_MAP = new HashMap<>();
+ protected final Map, PacketHolder>> PACKET_MAP = new HashMap<>();
protected final PacketSide side;
diff --git a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java
index b5697a9..10873c5 100644
--- a/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/core/networking/data/PacketHolder.java
@@ -1,7 +1,11 @@
package com.hypherionmc.craterlib.core.networking.data;
+import com.hypherionmc.craterlib.api.networking.CommonPacketWrapper;
import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf;
import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.network.codec.StreamCodec;
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
@@ -10,9 +14,27 @@ import java.util.function.Function;
/**
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
*/
-public record PacketHolder(ResourceIdentifier packetId,
+public record PacketHolder(CustomPacketPayload.Type extends CustomPacketPayload> type,
Class messageType,
BiConsumer encoder,
Function decoder,
Consumer> handler) {
+
+ public PacketHolder(ResourceIdentifier packetId, Class messageType, BiConsumer encoder, Function decoder, Consumer> handler) {
+ this(new CustomPacketPayload.Type<>(packetId.toMojang()), messageType, encoder, decoder, handler);
+ }
+
+ @SuppressWarnings("unchecked")
+ public CustomPacketPayload.Type getType()
+ {
+ return (CustomPacketPayload.Type) type();
+ }
+
+ public StreamCodec getCodec()
+ {
+ return CustomPacketPayload.codec(
+ (packet, buf) -> this.encoder().accept((T)packet.packet(), BridgedFriendlyByteBuf.of(buf)),
+ (buf) -> new CommonPacketWrapper<>(this, this.decoder().apply(BridgedFriendlyByteBuf.of(buf))));
+ }
+
}
\ No newline at end of file
diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java
index c594872..8a2a5a0 100644
--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/multiplayer/BridgedServerData.java
@@ -24,9 +24,9 @@ public class BridgedServerData {
}
public int getMaxPlayers() {
- if (!internal.pinged || internal.players == null) {
+ if (internal.players == null) {
try {
- new ServerStatusPinger().pingServer(internal, () -> {});
+ new ServerStatusPinger().pingServer(internal, () -> {}, () -> {});
} catch (Exception ignored) {}
}
diff --git a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java
index 0c557ff..b6c6cc3 100644
--- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java
@@ -7,6 +7,7 @@ import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
+import net.minecraft.core.RegistryAccess;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style;
@@ -14,11 +15,11 @@ public class ChatUtils {
public static Component adventureToMojang(net.kyori.adventure.text.Component inComponent) {
final String serialised = GsonComponentSerializer.gson().serialize(inComponent);
- return Component.Serializer.fromJson(serialised);
+ return Component.Serializer.fromJson(serialised, RegistryAccess.EMPTY);
}
public static net.kyori.adventure.text.Component mojangToAdventure(Component inComponent) {
- final String serialised = Component.Serializer.toJson(inComponent);
+ final String serialised = Component.Serializer.toJson(inComponent, RegistryAccess.EMPTY);
return GsonComponentSerializer.gson().deserialize(serialised);
}
diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
index 4a7d904..c654433 100644
--- a/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
+++ b/Fabric/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
@@ -22,7 +22,7 @@ public class ServerGamePacketListenerImplMixin {
public ServerPlayer player;
@Inject(
- method = "lambda$handleChat$6",
+ method = "lambda$handleChat$5",
at = @At("HEAD"),
cancellable = true
)
diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java b/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java
index 110e314..cd8740b 100644
--- a/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java
+++ b/Fabric/src/main/java/com/hypherionmc/craterlib/network/CraterFabricNetworkHandler.java
@@ -1,55 +1,46 @@
package com.hypherionmc.craterlib.network;
-import com.hypherionmc.craterlib.CraterConstants;
+import com.hypherionmc.craterlib.api.networking.CommonPacketWrapper;
import com.hypherionmc.craterlib.core.networking.PacketRegistry;
import com.hypherionmc.craterlib.core.networking.data.PacketContext;
import com.hypherionmc.craterlib.core.networking.data.PacketHolder;
import com.hypherionmc.craterlib.core.networking.data.PacketSide;
-import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf;
-import com.hypherionmc.craterlib.nojang.resources.ResourceIdentifier;
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
-import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
+import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
-import net.minecraft.network.FriendlyByteBuf;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.BiConsumer;
/**
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
*/
public class CraterFabricNetworkHandler extends PacketRegistry {
- private final Map, Message>> CHANNELS = new HashMap();
-
public CraterFabricNetworkHandler(PacketSide side) {
super(side);
}
protected void registerPacket(PacketHolder holder) {
- if (CHANNELS.get(holder.messageType()) == null) {
- CHANNELS.put(holder.messageType(), new Message<>(holder.packetId(), holder.encoder()));
-
- if (PacketSide.CLIENT.equals(this.side)) {
- ClientPlayNetworking.registerGlobalReceiver(holder.packetId().toMojang(), ((client, listener, buf, responseSender) -> {
- buf.readByte();
- T message = holder.decoder().apply(BridgedFriendlyByteBuf.of(buf));
- client.execute(() -> holder.handler().accept(new PacketContext<>(message, PacketSide.CLIENT)));
- }));
- } else {
-
- ServerPlayNetworking.registerGlobalReceiver(holder.packetId().toMojang(), ((server, player, listener, buf, responseSender) -> {
- buf.readByte();
- T message = holder.decoder().apply(BridgedFriendlyByteBuf.of(buf));
- server.execute(() -> holder.handler().accept(new PacketContext<>(BridgedPlayer.of(player), message, PacketSide.SERVER)));
- }));
- }
-
- } else {
- CraterConstants.LOG.error("Trying to register duplicate packet for type {}", holder.messageType());
+ try
+ {
+ PayloadTypeRegistry.playC2S().register(holder.getType(), holder.getCodec());
+ PayloadTypeRegistry.playS2C().register(holder.getType(), holder.getCodec());
}
+ catch (IllegalArgumentException e)
+ {
+ // do nothing
+ }
+
+ if (PacketSide.CLIENT.equals(this.side)) {
+ ClientPlayNetworking.registerGlobalReceiver(holder.getType(),
+ (ClientPlayNetworking.PlayPayloadHandler>) (payload, context) -> context.client().execute(() ->
+ holder.handler().accept(
+ new PacketContext<>(payload.packet(), side))));
+ }
+
+ ServerPlayNetworking.registerGlobalReceiver(holder.getType(),
+ (ServerPlayNetworking.PlayPayloadHandler>) (payload, context) -> context.player().server.execute(() ->
+ holder.handler().accept(
+ new PacketContext<>(BridgedPlayer.of(context.player()), payload.packet(), side))));
}
public void sendToServer(T packet) {
@@ -57,26 +48,21 @@ public class CraterFabricNetworkHandler extends PacketRegistry {
}
public void sendToServer(T packet, boolean ignoreCheck) {
- Message message = (Message) CHANNELS.get(packet.getClass());
+ PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass());
- if (ClientPlayNetworking.canSend(message.id().toMojang()) || ignoreCheck) {
- FriendlyByteBuf buf = PacketByteBufs.create();
- buf.writeByte(0);
- message.encoder().accept(packet, BridgedFriendlyByteBuf.of(buf));
- ClientPlayNetworking.send(message.id().toMojang(), buf);
+ if (container != null) {
+ if (ignoreCheck || ClientPlayNetworking.canSend(container.type().id())) {
+ ClientPlayNetworking.send(new CommonPacketWrapper<>(container, packet));
+ }
}
}
public void sendToClient(T packet, BridgedPlayer player) {
- Message message = (Message) CHANNELS.get(packet.getClass());
- if (ServerPlayNetworking.canSend(player.toMojangServerPlayer(), message.id().toMojang()))
- {
- FriendlyByteBuf buf = PacketByteBufs.create();
- buf.writeByte(0);
- message.encoder().accept(packet, BridgedFriendlyByteBuf.of(buf));
- ServerPlayNetworking.send(player.toMojangServerPlayer(), message.id().toMojang(), buf);
+ PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass());
+ if (container != null) {
+ if (ServerPlayNetworking.canSend(player.toMojangServerPlayer(), container.type().id())) {
+ ServerPlayNetworking.send(player.toMojangServerPlayer(), new CommonPacketWrapper<>(container, packet));
+ }
}
}
-
- public record Message(ResourceIdentifier id, BiConsumer encoder) { }
}
diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json
index b863c60..47a55c0 100644
--- a/Fabric/src/main/resources/fabric.mod.json
+++ b/Fabric/src/main/resources/fabric.mod.json
@@ -31,9 +31,9 @@
"${mod_id}.fabric.mixins.json"
],
"depends": {
- "fabricloader": ">=0.14.21",
+ "fabricloader": ">=0.15.0",
"fabric-api": "*",
- "minecraft": ">=1.20.4",
- "java": ">=17"
+ "minecraft": ">=1.20.6",
+ "java": ">=21"
}
}
diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
index 6e2f601..299f52c 100644
--- a/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
+++ b/Forge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
@@ -22,7 +22,7 @@ public class ServerGamePacketListenerImplMixin {
public ServerPlayer player;
@Inject(
- method = "lambda$handleChat$6",
+ method = "lambda$handleChat$5",
at = @At("HEAD"),
cancellable = true
)
diff --git a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java b/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java
index cc84b04..cc14988 100644
--- a/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java
+++ b/Forge/src/main/java/com/hypherionmc/craterlib/network/CraterForgeNetworkHandler.java
@@ -36,7 +36,7 @@ public class CraterForgeNetworkHandler extends PacketRegistry {
protected void registerPacket(PacketHolder holder) {
if (CHANNELS.get(holder.messageType()) == null) {
SimpleChannel channel = ChannelBuilder
- .named(holder.packetId().toMojang())
+ .named(holder.type().id())
.clientAcceptedVersions((a, b) -> true)
.serverAcceptedVersions((a, b) -> true)
.networkProtocolVersion(1)
diff --git a/Forge/src/main/resources/META-INF/mods.toml b/Forge/src/main/resources/META-INF/mods.toml
index c2ecdab..c2c7608 100644
--- a/Forge/src/main/resources/META-INF/mods.toml
+++ b/Forge/src/main/resources/META-INF/mods.toml
@@ -1,31 +1,31 @@
modLoader = "javafml"
-loaderVersion = "[49,)"
+loaderVersion = "[50,)"
license = "MIT"
issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues"
[[mods]]
-modId = "${mod_id}"
-version = "${version}"
-displayName = "${mod_name}"
-displayURL = "https://modrinth.com/mod/craterlib"
-logoFile = "craterlib_logo.png"
-#credits="Thanks for this example mod goes to Java"
-authors = "${mod_author}, Zenith"
-description = '''
-A library mod used by First Dark Development and HypherionSA Mods
-'''
-displayTest = "MATCH_VERSION"
+ modId = "${mod_id}"
+ version = "${version}"
+ displayName = "${mod_name}"
+ displayURL = "https://modrinth.com/mod/craterlib"
+ logoFile = "craterlib_logo.png"
+ #credits="Thanks for this example mod goes to Java"
+ authors = "${mod_author}, Zenith"
+ description = '''
+ A library mod used by First Dark Development and HypherionSA Mods
+ '''
+ displayTest = "NONE"
[[dependencies.${ mod_id }]]
-modId = "forge"
-mandatory = true
-versionRange = "[49,)"
-ordering = "NONE"
-side = "BOTH"
+ modId = "forge"
+ mandatory = true
+ versionRange = "[50,)"
+ ordering = "NONE"
+ side = "BOTH"
[[dependencies.${ mod_id }]]
-modId = "minecraft"
-mandatory = true
-versionRange = "[1.20.4,1.21)"
-ordering = "NONE"
-side = "BOTH"
+ modId = "minecraft"
+ mandatory = true
+ versionRange = "[1.20.6,1.21)"
+ ordering = "NONE"
+ side = "BOTH"
diff --git a/NeoForge/build.gradle b/NeoForge/build.gradle
index cbb7925..c71d840 100644
--- a/NeoForge/build.gradle
+++ b/NeoForge/build.gradle
@@ -50,7 +50,7 @@ processResources {
from project(":Common").sourceSets.main.resources
def buildProps = project.properties.clone()
- filesMatching("META-INF/mods.toml") {
+ filesMatching("META-INF/neoforge.mods.toml") {
expand buildProps
}
}
diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java
index 2ae793b..900cdf1 100644
--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java
+++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/CraterLib.java
@@ -1,8 +1,12 @@
package com.hypherionmc.craterlib;
import com.hypherionmc.craterlib.api.events.client.LateInitEvent;
+import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen;
import com.hypherionmc.craterlib.common.NeoForgeServerEvents;
import com.hypherionmc.craterlib.compat.Vanish;
+import com.hypherionmc.craterlib.core.config.ConfigController;
+import com.hypherionmc.craterlib.core.config.ModuleConfig;
+import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen;
import com.hypherionmc.craterlib.core.event.CraterEventBus;
import com.hypherionmc.craterlib.core.networking.CraterPacketNetwork;
import com.hypherionmc.craterlib.core.networking.PacketRegistry;
@@ -13,12 +17,16 @@ import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft;
import com.hypherionmc.craterlib.nojang.client.BridgedOptions;
import net.minecraft.client.Minecraft;
import net.neoforged.bus.api.IEventBus;
+import net.neoforged.fml.ModList;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.fml.loading.FMLEnvironment;
import net.neoforged.fml.loading.FMLLoader;
+import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import net.neoforged.neoforge.common.NeoForge;
+import java.util.Optional;
+
@Mod(CraterConstants.MOD_ID)
public class CraterLib {
@@ -39,6 +47,13 @@ public class CraterLib {
if (FMLEnvironment.dist.isClient()) {
LateInitEvent event = new LateInitEvent(new BridgedMinecraft(), BridgedOptions.of(Minecraft.getInstance().options));
CraterEventBus.INSTANCE.postEvent(event);
+
+ ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> {
+ if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) {
+ ModuleConfig config = (ModuleConfig) conf;
+ ModList.get().getModContainerById(config.getModId()).ifPresent(c -> c.registerExtensionPoint(IConfigScreenFactory.class, ((minecraft, screen) -> new CraterConfigScreen(config, screen))));
+ }
+ });
}
}
}
diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java
index 69cd537..3e6455a 100644
--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java
+++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/client/NeoForgeClientEvents.java
@@ -7,15 +7,15 @@ import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel;
import net.minecraft.client.Minecraft;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
-import net.neoforged.fml.common.Mod;
-import net.neoforged.neoforge.event.TickEvent;
+import net.neoforged.fml.common.EventBusSubscriber;
+import net.neoforged.neoforge.event.tick.LevelTickEvent;
-@Mod.EventBusSubscriber(modid = CraterConstants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
+@EventBusSubscriber(modid = CraterConstants.MOD_ID, value = Dist.CLIENT)
public class NeoForgeClientEvents {
@SubscribeEvent
- public static void clientTick(TickEvent.LevelTickEvent event) {
- if (event.level == null)
+ public static void clientTick(LevelTickEvent.Pre event) {
+ if (Minecraft.getInstance().level == null)
return;
CraterClientTickEvent craterClientTickEvent = new CraterClientTickEvent(BridgedClientLevel.of(Minecraft.getInstance().level));
diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java
deleted file mode 100644
index 9a98092..0000000
--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ConfigScreenHandlerMixin.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.hypherionmc.craterlib.mixin;
-
-import com.hypherionmc.craterlib.client.gui.config.CraterConfigScreen;
-import com.hypherionmc.craterlib.core.config.ConfigController;
-import com.hypherionmc.craterlib.core.config.ModuleConfig;
-import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.screens.Screen;
-import net.neoforged.neoforge.client.ConfigScreenHandler;
-import net.neoforged.neoforgespi.language.IModInfo;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
-
-import java.util.Optional;
-import java.util.function.BiFunction;
-
-/**
- * @author HypherionSA
- */
-@Mixin(ConfigScreenHandler.class)
-public class ConfigScreenHandlerMixin {
-
- /**
- * Inject Auto Generated config Screens into forge
- *
- */
- @Inject(at = @At("RETURN"), method = "getScreenFactoryFor", cancellable = true, remap = false)
- private static void injectConfigScreen(IModInfo selectedMod, CallbackInfoReturnable>> cir) {
- ConfigController.getMonitoredConfigs().forEach((conf, watcher) -> {
- if (!conf.getClass().isAnnotationPresent(NoConfigScreen.class)) {
- ModuleConfig config = (ModuleConfig) conf;
- if (config.getModId().equals(selectedMod.getModId())) {
- cir.setReturnValue(
- Optional.of((minecraft, screen) -> new CraterConfigScreen(config, screen))
- );
- }
- }
- });
- }
-
-}
diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
index 6e2f601..299f52c 100644
--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
+++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/mixin/ServerGamePacketListenerImplMixin.java
@@ -22,7 +22,7 @@ public class ServerGamePacketListenerImplMixin {
public ServerPlayer player;
@Inject(
- method = "lambda$handleChat$6",
+ method = "lambda$handleChat$5",
at = @At("HEAD"),
cancellable = true
)
diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java
index 344bb72..59cb127 100644
--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java
+++ b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/CraterNeoForgeNetworkHandler.java
@@ -1,70 +1,40 @@
package com.hypherionmc.craterlib.network;
import com.hypherionmc.craterlib.CraterConstants;
+import com.hypherionmc.craterlib.api.networking.CommonPacketWrapper;
import com.hypherionmc.craterlib.core.networking.PacketRegistry;
import com.hypherionmc.craterlib.core.networking.data.PacketContext;
import com.hypherionmc.craterlib.core.networking.data.PacketHolder;
import com.hypherionmc.craterlib.core.networking.data.PacketSide;
-import com.hypherionmc.craterlib.nojang.network.BridgedFriendlyByteBuf;
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
-import net.minecraft.network.FriendlyByteBuf;
-import net.minecraft.world.entity.player.Player;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.LogicalSide;
import net.neoforged.neoforge.network.PacketDistributor;
-import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent;
+import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
import net.neoforged.neoforge.network.handling.IPayloadHandler;
-import net.neoforged.neoforge.network.registration.IPayloadRegistrar;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.BiConsumer;
import java.util.function.Consumer;
-import java.util.function.Function;
/**
* Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
*/
public class CraterNeoForgeNetworkHandler extends PacketRegistry {
- private final Map, NeoForgePacketContainer> PACKETS = new HashMap<>();
-
public CraterNeoForgeNetworkHandler(PacketSide side) {
super(side);
}
@SubscribeEvent
- public void register(final RegisterPayloadHandlerEvent event) {
- if (!PACKETS.isEmpty()) {
- PACKETS.forEach((type, container) -> {
- final IPayloadRegistrar registrar = event.registrar(container.packetId().getNamespace());
- registrar.common(
- container.packetId(),
- container.decoder(),
- container.handler());
- });
+ public void register(final RegisterPayloadHandlersEvent event) {
+ if (!PACKET_MAP.isEmpty()) {
+ PACKET_MAP.forEach((type, container) -> event.registrar(container.getType().id().getNamespace())
+ .optional().commonBidirectional(container.getType(), container.getCodec(), buildHandler(container.handler())));
}
}
+ @Override
protected void registerPacket(PacketHolder container) {
- if (PACKETS.get(container.messageType()) == null) {
- var packetContainer = new NeoForgePacketContainer<>(
- container.messageType(),
- container.packetId().toMojang(),
- mojangEncoder(container.encoder()),
- decoder(mojangDecoder(container.decoder())),
- buildHandler(container.handler())
- );
- PACKETS.put(container.messageType(), packetContainer);
- }
- }
-
- private FriendlyByteBuf.Reader> decoder(Function decoder) {
- return (buf -> {
- T packet = decoder.apply(buf);
- return new NeoForgePacket(PACKETS.get(packet.getClass()), packet);
- });
}
public void sendToServer(T packet) {
@@ -72,45 +42,36 @@ public class CraterNeoForgeNetworkHandler extends PacketRegistry {
}
public void sendToServer(T packet, boolean ignoreCheck) {
- NeoForgePacketContainer container = PACKETS.get(packet.getClass());
- try {
- PacketDistributor.SERVER.noArg().send(new NeoForgePacket<>(container, packet));
- } catch (Throwable t) {
- CraterConstants.LOG.error("{} packet not registered on the client, this is needed.", packet.getClass(), t);
+ PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass());
+ if (container != null) {
+ PacketDistributor.sendToServer(new CommonPacketWrapper<>(container, packet));
}
}
public void sendToClient(T packet, BridgedPlayer player) {
- NeoForgePacketContainer container = PACKETS.get(packet.getClass());
- try {
- if (player.getConnection() == null)
- return;
-
- if (player.getConnection().isConnected(container.packetId())) {
- PacketDistributor.PLAYER.with(player.toMojangServerPlayer()).send(new NeoForgePacket<>(container, packet));
+ PacketHolder container = (PacketHolder) PACKET_MAP.get(packet.getClass());
+ if (container != null) {
+ if (player.getConnection().hasChannel(container.type())) {
+ PacketDistributor.sendToPlayer(player.toMojangServerPlayer(), new CommonPacketWrapper<>(container, packet));
}
- } catch (Throwable t) {
- CraterConstants.LOG.error("{} packet not registered on the server, this is needed.", packet.getClass(), t);
}
}
- private > IPayloadHandler buildHandler(Consumer> handler) {
+ private > IPayloadHandler buildHandler(Consumer> handler) {
return (payload, ctx) -> {
- try {
+ try
+ {
PacketSide side = ctx.flow().getReceptionSide().equals(LogicalSide.SERVER) ? PacketSide.SERVER : PacketSide.CLIENT;
- Player player = ctx.player().orElse(null);
- handler.accept(new PacketContext<>(BridgedPlayer.of(player), payload.packet(), side));
- } catch (Throwable t) {
+ if (PacketSide.SERVER.equals(side)) {
+ handler.accept(new PacketContext<>(BridgedPlayer.of(ctx.player()), payload.packet(), side));
+ } else {
+ handler.accept(new PacketContext<>(payload.packet(), side));
+ }
+
+ }
+ catch (Throwable t) {
CraterConstants.LOG.error("Error handling packet: {} -> ", payload.packet().getClass(), t);
}
};
}
-
- private Function mojangDecoder(Function handler) {
- return byteBuf -> handler.apply(BridgedFriendlyByteBuf.of(byteBuf));
- }
-
- private BiConsumer mojangEncoder(BiConsumer handler) {
- return ((t, byteBuf) -> handler.accept(t, BridgedFriendlyByteBuf.of(byteBuf)));
- }
}
\ No newline at end of file
diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java
deleted file mode 100644
index f4fe45d..0000000
--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacket.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.hypherionmc.craterlib.network;
-
-import net.minecraft.network.FriendlyByteBuf;
-import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
-import net.minecraft.resources.ResourceLocation;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
- */
-public record NeoForgePacket(NeoForgePacketContainer container, T packet) implements CustomPacketPayload {
-
- @Override
- public void write(@NotNull FriendlyByteBuf buff)
- {
- container().encoder().accept(packet(), buff);
- }
-
- @Override
- public @NotNull ResourceLocation id()
- {
- return container().packetId();
- }
-}
\ No newline at end of file
diff --git a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java b/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java
deleted file mode 100644
index cddddb6..0000000
--- a/NeoForge/src/main/java/com/hypherionmc/craterlib/network/NeoForgePacketContainer.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.hypherionmc.craterlib.network;
-
-import net.minecraft.network.FriendlyByteBuf;
-import net.minecraft.resources.ResourceLocation;
-import net.neoforged.neoforge.network.handling.IPayloadHandler;
-
-import java.util.function.BiConsumer;
-
-/**
- * Based on https://github.com/mysticdrew/common-networking/tree/1.20.4
- */
-public record NeoForgePacketContainer(Class messageType,
- ResourceLocation packetId,
- BiConsumer encoder,
- FriendlyByteBuf.Reader> decoder,
- IPayloadHandler> handler) { }
\ No newline at end of file
diff --git a/NeoForge/src/main/resources/META-INF/mods.toml b/NeoForge/src/main/resources/META-INF/mods.toml
deleted file mode 100644
index ceb3416..0000000
--- a/NeoForge/src/main/resources/META-INF/mods.toml
+++ /dev/null
@@ -1,31 +0,0 @@
-modLoader = "javafml"
-loaderVersion = "[1,)"
-license = "MIT"
-issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues"
-
-[[mods]]
-modId = "${mod_id}"
-version = "${version}"
-displayName = "${mod_name}"
-displayURL = "https://modrinth.com/mod/craterlib"
-logoFile = "craterlib_logo.png"
-#credits="Thanks for this example mod goes to Java"
-authors = "${mod_author}, Zenith"
-description = '''
-A library mod used by First Dark Development and HypherionSA Mods
-'''
-displayTest = "MATCH_VERSION"
-
-[[dependencies.${ mod_id }]]
-modId = "neoforge"
-mandatory = true
-versionRange = "[20.4,)"
-ordering = "NONE"
-side = "BOTH"
-
-[[dependencies.${ mod_id }]]
-modId = "minecraft"
-mandatory = true
-versionRange = "[1.20.4,1.21)"
-ordering = "NONE"
-side = "BOTH"
diff --git a/NeoForge/src/main/resources/META-INF/neoforge.mods.toml b/NeoForge/src/main/resources/META-INF/neoforge.mods.toml
new file mode 100644
index 0000000..b5afd9b
--- /dev/null
+++ b/NeoForge/src/main/resources/META-INF/neoforge.mods.toml
@@ -0,0 +1,31 @@
+modLoader = "javafml"
+loaderVersion = "[1,)"
+license = "MIT"
+issueTrackerURL = "https://github.com/firstdarkdev/craterLib/issues"
+
+[[mods]]
+ modId = "${mod_id}"
+ version = "${version}"
+ displayName = "${mod_name}"
+ displayURL = "https://modrinth.com/mod/craterlib"
+ logoFile = "craterlib_logo.png"
+ #credits="Thanks for this example mod goes to Java"
+ authors = "${mod_author}, Zenith"
+ description = '''
+ A library mod used by First Dark Development and HypherionSA Mods
+ '''
+ displayTest = "NONE"
+
+[[dependencies.${ mod_id }]]
+ modId = "neoforge"
+ type="required"
+ versionRange = "[20.6,)"
+ ordering = "NONE"
+ side = "BOTH"
+
+[[dependencies.${ mod_id }]]
+ modId = "minecraft"
+ type="required"
+ versionRange = "[1.20.6,1.21)"
+ ordering = "NONE"
+ side = "BOTH"
diff --git a/NeoForge/src/main/resources/craterlib.neoforge.mixins.json b/NeoForge/src/main/resources/craterlib.neoforge.mixins.json
index aa072d1..e1af981 100644
--- a/NeoForge/src/main/resources/craterlib.neoforge.mixins.json
+++ b/NeoForge/src/main/resources/craterlib.neoforge.mixins.json
@@ -5,9 +5,7 @@
"compatibilityLevel": "JAVA_17",
"mixins": [
],
- "client": [
- "ConfigScreenHandlerMixin"
- ],
+ "client": [],
"server": [
"ServerGamePacketListenerImplMixin"
],
diff --git a/build.gradle b/build.gradle
index d068e7d..01cd33a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '8.1.1' apply false
- id "xyz.wagyourtail.unimined" version "1.1.0-SNAPSHOT" apply false
+ id "xyz.wagyourtail.unimined" version "1.2.4" apply false
id "me.hypherionmc.modutils.modpublisher" version "1.0.23+"
id "com.hypherionmc.modutils.orion" version "1.0.10"
id 'maven-publish'
diff --git a/gradle.properties b/gradle.properties
index a0432db..5b0a086 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -9,18 +9,18 @@ mod_id=craterlib
mod_name=CraterLib
# Shared
-minecraft_version=1.20.4
+minecraft_version=1.20.6
project_group=com.hypherionmc.craterlib
# Fabric
fabric_loader=0.15.0
-fabric_api=0.92.0+1.20.4
+fabric_api=0.97.8+1.20.6
# Forge
-forge_version=49.0.13
+forge_version=50.0.6
# NeoForged
-neoforge_version=73-beta
+neoforge_version=41-beta
# Dependencies
moon_config=1.0.9
@@ -30,9 +30,9 @@ rpc_sdk=1.0
discord_formatter=2.0.0
# Mod Dependencies
-fabrictailor=2.1.2
-vanish=1.4.2+1.20
-mod_menu_version=8.0.0-beta.2
+fabrictailor=2.3.1
+vanish=1.5.4+1.20.5
+mod_menu_version=10.0.0-beta.1
vanishmod=1.1.12.1
vanishmod_neo=puxrKAMr
diff --git a/settings.gradle b/settings.gradle
index 2988fbb..090bd43 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -11,5 +11,4 @@ pluginManagement {
}
rootProject.name = 'CraterLib'
-include("Common", "Fabric", "Forge")
-include 'NeoForge'
\ No newline at end of file
+include("Common", "Fabric", "NeoForge", "Forge")
\ No newline at end of file