Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
mezz committed Jun 10, 2024
1 parent 7b3e0d6 commit de1403a
Show file tree
Hide file tree
Showing 29 changed files with 175 additions and 256 deletions.
3 changes: 2 additions & 1 deletion Common/src/main/java/mezz/jei/common/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ public final class Constants {

public static final RecipeType<?> UNIVERSAL_RECIPE_TRANSFER_TYPE = RecipeType.create(ModIds.JEI_ID, "universal_recipe_transfer_handler", Object.class);
public static final ResourceLocation LOCATION_JEI_GUI_TEXTURE_ATLAS = new ResourceLocation(ModIds.JEI_ID, "textures/atlas/gui.png");
public static final ResourceLocation NETWORK_CHANNEL_ID = new ResourceLocation(ModIds.JEI_ID, "channel");
public static final ResourceLocation TO_CLIENT_CHANNEL_ID = new ResourceLocation(ModIds.JEI_ID, "to_client");
public static final ResourceLocation TO_SERVER_CHANNEL_ID = new ResourceLocation(ModIds.JEI_ID, "to_server");

/**
* Ingredients with this tag will be hidden from JEI.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import net.minecraft.resources.ResourceKey;

public interface IPlatformHelper {
<T> IPlatformRegistry<T> getRegistry(ResourceKey<? extends Registry<T>> key);

IPlatformItemStackHelper getItemStackHelper();

IPlatformFluidHelperInternal<?> getFluidHelper();
Expand Down

This file was deleted.

6 changes: 2 additions & 4 deletions Common/src/main/java/mezz/jei/common/util/ErrorUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import mezz.jei.api.ingredients.IIngredientType;
import mezz.jei.api.recipe.RecipeType;
import mezz.jei.api.runtime.IIngredientManager;
import mezz.jei.common.platform.IPlatformRegistry;
import mezz.jei.common.platform.Services;
import net.minecraft.client.Minecraft;
import net.minecraft.core.NonNullList;
import net.minecraft.core.registries.Registries;
Expand Down Expand Up @@ -33,7 +31,7 @@ public static String getItemStackInfo(@Nullable ItemStack itemStack) {
return "null";
}
Item item = itemStack.getItem();
IPlatformRegistry<Item> itemRegistry = Services.PLATFORM.getRegistry(Registries.ITEM);
RegistryWrapper<Item> itemRegistry = RegistryWrapper.getRegistry(Registries.ITEM);

final String itemName = itemRegistry.getRegistryName(item)
.map(ResourceLocation::toString)
Expand All @@ -44,7 +42,7 @@ public static String getItemStackInfo(@Nullable ItemStack itemStack) {
if (block == null) {
blockName = "null";
} else {
IPlatformRegistry<Block> blockRegistry = Services.PLATFORM.getRegistry(Registries.BLOCK);
RegistryWrapper<Block> blockRegistry = RegistryWrapper.getRegistry(Registries.BLOCK);
blockName = blockRegistry.getRegistryName(block)
.map(ResourceLocation::toString)
.orElseGet(() -> block.getClass().getName());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package mezz.jei.fabric.platform;
package mezz.jei.common.util;

import mezz.jei.common.platform.IPlatformRegistry;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
Expand All @@ -10,16 +9,16 @@
import java.util.Optional;
import java.util.stream.Stream;

public class RegistryWrapper<T> implements IPlatformRegistry<T> {
public static <T> IPlatformRegistry<T> getRegistry(ResourceKey<? extends Registry<T>> key) {
public class RegistryWrapper<T> {
public static <T> RegistryWrapper<T> getRegistry(ResourceKey<? extends Registry<T>> key) {
Registry<? extends Registry<?>> rootRegistry = BuiltInRegistries.REGISTRY;
Registry<?> registry = rootRegistry.get(key.location());
if (registry == null) {
throw new NullPointerException("Could not find registry for key: " + key);
}
IPlatformRegistry<?> registryWrapper = new RegistryWrapper<>(registry);
RegistryWrapper<?> registryWrapper = new RegistryWrapper<>(registry);
@SuppressWarnings("unchecked")
IPlatformRegistry<T> castPlatformRegistry = (IPlatformRegistry<T>) registryWrapper;
RegistryWrapper<T> castPlatformRegistry = (RegistryWrapper<T>) registryWrapper;
return castPlatformRegistry;
}

Expand All @@ -29,39 +28,32 @@ private RegistryWrapper(Registry<T> registry) {
this.registry = registry;
}

@Override
public Stream<T> getValues() {
return this.registry.stream();
}

@Override
public Stream<Holder.Reference<T>> getHolderStream() {
return this.registry.holders();
}

@Override
public Optional<T> getValue(ResourceLocation resourceLocation) {
T t = this.registry.get(resourceLocation);
return Optional.ofNullable(t);
}

@Override
public int getId(T entry) {
return this.registry.getId(entry);
}

@Override
public Optional<T> getValue(int id) {
return this.registry.getHolder(id)
.map(Holder::value);
}

@Override
public boolean contains(T entry) {
return this.registry.getKey(entry) != null;
}

@Override
public Optional<ResourceLocation> getRegistryName(T entry) {
return this.registry.getResourceKey(entry)
.map(ResourceKey::location);
Expand Down
3 changes: 1 addition & 2 deletions Common/src/main/java/mezz/jei/common/util/StackHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import mezz.jei.api.helpers.IStackHelper;
import mezz.jei.api.ingredients.subtypes.ISubtypeManager;
import mezz.jei.api.ingredients.subtypes.UidContext;
import mezz.jei.common.platform.Services;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
Expand Down Expand Up @@ -51,7 +50,7 @@ public static String getRegistryNameForStack(ItemStack stack) {
ErrorUtil.checkNotEmpty(stack, "stack");

Item item = stack.getItem();
return Services.PLATFORM
return RegistryWrapper
.getRegistry(Registries.ITEM)
.getRegistryName(item)
.map(ResourceLocation::toString)
Expand Down
6 changes: 3 additions & 3 deletions Forge/src/main/java/mezz/jei/forge/JustEnoughItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ public JustEnoughItems() {
ModLoadingContext modLoadingContext = ModLoadingContext.get();
IServerConfig serverConfig = ServerConfig.register(modLoadingContext);

NetworkHandler networkHandler = new NetworkHandler(Constants.NETWORK_CHANNEL_ID, 2);
JustEnoughItemsCommon jeiCommon = new JustEnoughItemsCommon(networkHandler, serverConfig);
NetworkHandler networkHandler = new NetworkHandler(serverConfig, 3);
JustEnoughItemsCommon jeiCommon = new JustEnoughItemsCommon(networkHandler);
jeiCommon.register(subscriptions);

JustEnoughItemsClientSafeRunner clientSafeRunner = new JustEnoughItemsClientSafeRunner(networkHandler, subscriptions, serverConfig);
JustEnoughItemsClientSafeRunner clientSafeRunner = new JustEnoughItemsClientSafeRunner(networkHandler, subscriptions);
DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> clientSafeRunner::registerClient);
}
}
8 changes: 2 additions & 6 deletions Forge/src/main/java/mezz/jei/forge/JustEnoughItemsClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

import mezz.jei.api.IModPlugin;
import mezz.jei.common.Internal;
import mezz.jei.common.config.IServerConfig;
import mezz.jei.common.gui.textures.Textures;
import mezz.jei.common.network.ClientPacketRouter;
import mezz.jei.forge.events.PermanentEventSubscriptions;
import mezz.jei.forge.network.ConnectionToServer;
import mezz.jei.forge.network.NetworkHandler;
Expand All @@ -29,8 +27,7 @@ public class JustEnoughItemsClient {

public JustEnoughItemsClient(
NetworkHandler networkHandler,
PermanentEventSubscriptions subscriptions,
IServerConfig serverConfig
PermanentEventSubscriptions subscriptions
) {
this.subscriptions = subscriptions;

Expand All @@ -40,8 +37,7 @@ public JustEnoughItemsClient(
InternalKeyMappings keyMappings = createKeyMappings(subscriptions);
Internal.setKeyMappings(keyMappings);

ClientPacketRouter packetRouter = new ClientPacketRouter(serverConnection, serverConfig);
networkHandler.registerClientPacketHandler(packetRouter);
networkHandler.registerClientPacketHandler(serverConnection);

List<IModPlugin> plugins = ForgePluginFinder.getModPlugins();
StartData startData = new StartData(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
package mezz.jei.forge;

import mezz.jei.common.config.IServerConfig;
import mezz.jei.forge.events.PermanentEventSubscriptions;
import mezz.jei.forge.network.NetworkHandler;

public class JustEnoughItemsClientSafeRunner {
private final NetworkHandler networkHandler;
private final PermanentEventSubscriptions subscriptions;
private final IServerConfig serverConfig;

public JustEnoughItemsClientSafeRunner(
NetworkHandler networkHandler,
PermanentEventSubscriptions subscriptions,
IServerConfig serverConfig
PermanentEventSubscriptions subscriptions
) {
this.networkHandler = networkHandler;
this.subscriptions = subscriptions;
this.serverConfig = serverConfig;
}

public void registerClient() {
JustEnoughItemsClient jeiClient = new JustEnoughItemsClient(networkHandler, subscriptions, serverConfig);
JustEnoughItemsClient jeiClient = new JustEnoughItemsClient(networkHandler, subscriptions);
jeiClient.register();
}
}
11 changes: 3 additions & 8 deletions Forge/src/main/java/mezz/jei/forge/JustEnoughItemsCommon.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
package mezz.jei.forge;

import mezz.jei.common.network.IConnectionToClient;
import mezz.jei.common.network.ServerPacketRouter;
import mezz.jei.common.config.IServerConfig;
import mezz.jei.forge.events.PermanentEventSubscriptions;
import mezz.jei.forge.network.ConnectionToClient;
import mezz.jei.forge.network.NetworkHandler;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;

public class JustEnoughItemsCommon {
private final NetworkHandler networkHandler;
private final IServerConfig serverConfig;

public JustEnoughItemsCommon(NetworkHandler networkHandler, IServerConfig serverConfig) {
public JustEnoughItemsCommon(NetworkHandler networkHandler) {
this.networkHandler = networkHandler;
this.serverConfig = serverConfig;
}

public void register(PermanentEventSubscriptions subscriptions) {
subscriptions.register(FMLCommonSetupEvent.class, event -> this.commonSetup());
}

private void commonSetup() {
IConnectionToClient connection = new ConnectionToClient(this.networkHandler);
ServerPacketRouter packetRouter = new ServerPacketRouter(connection, serverConfig);
this.networkHandler.registerServerPacketHandler(packetRouter);
IConnectionToClient connection = new ConnectionToClient(networkHandler);
this.networkHandler.registerServerPacketHandler(connection);
}
}
26 changes: 11 additions & 15 deletions Forge/src/main/java/mezz/jei/forge/network/ConnectionToClient.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
package mezz.jei.forge.network;

import io.netty.buffer.Unpooled;
import mezz.jei.common.network.IConnectionToClient;
import mezz.jei.common.network.packets.PlayToClientPacket;
import net.minecraft.core.RegistryAccess;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.level.Level;
import net.minecraftforge.network.ICustomPacket;
import net.minecraftforge.network.NetworkDirection;

public class ConnectionToClient implements IConnectionToClient {
private final NetworkHandler networkHandler;

public ConnectionToClient(NetworkHandler networkHandler) {
this.networkHandler = networkHandler;
}

@Override
public <T extends PlayToClientPacket<T>> void sendPacketToClient(T packet, ServerPlayer player) {
@SuppressWarnings("resource") Level level = player.level();
RegistryAccess registryAccess = level.registryAccess();
RegistryFriendlyByteBuf buf = new RegistryFriendlyByteBuf(Unpooled.buffer(), registryAccess);
try {
packet.streamCodec().m_318638_(buf, packet);
ICustomPacket<Packet<?>> payload = NetworkDirection.PLAY_TO_CLIENT.buildPacket(buf, packet.type().f_314054_());
player.connection.send(payload.getThis());
} finally {
buf.release();
}
networkHandler.getClientChannel()
.ifPresent(clientChannel -> {
Packet<?> payload = NetworkDirection.PLAY_TO_CLIENT.buildPacket(clientChannel, packet);
player.connection.send(payload);
});
}
}
23 changes: 9 additions & 14 deletions Forge/src/main/java/mezz/jei/forge/network/ConnectionToServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@
import net.minecraft.network.Connection;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraftforge.network.EventNetworkChannel;
import net.minecraftforge.network.ICustomPacket;
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
import net.minecraftforge.network.Channel;
import net.minecraftforge.network.NetworkDirection;
import org.jetbrains.annotations.Nullable;

import java.util.Optional;
import java.util.UUID;

public final class ConnectionToServer implements IConnectionToServer {
Expand All @@ -38,8 +39,7 @@ public boolean isJeiOnServer() {
if (!id.equals(jeiOnServerCacheUuid)) {
jeiOnServerCacheUuid = id;
Connection connection = clientPacketListener.getConnection();
EventNetworkChannel networkChannel = networkHandler.getChannel();
jeiOnServerCacheValue = networkChannel.isRemotePresent(connection);
jeiOnServerCacheValue = networkHandler.isRemotePresent(connection);
}
return jeiOnServerCacheValue;
}
Expand All @@ -49,16 +49,11 @@ public <T extends PlayToServerPacket<T>> void sendPacketToServer(T packet) {
Minecraft minecraft = Minecraft.getInstance();
ClientPacketListener netHandler = minecraft.getConnection();
if (netHandler != null && isJeiOnServer()) {
ClientLevel level = netHandler.getLevel();
RegistryAccess registryAccess = level.registryAccess();
RegistryFriendlyByteBuf buf = new RegistryFriendlyByteBuf(Unpooled.buffer(), registryAccess);
try {
packet.streamCodec().m_318638_(buf, packet);
ICustomPacket<Packet<?>> payload = NetworkDirection.PLAY_TO_SERVER.buildPacket(buf, packet.type().f_314054_());
netHandler.send(payload.getThis());
} finally {
buf.release();
}
networkHandler.getServerChannel()
.ifPresent(serverChannel -> {
Packet<?> payload = NetworkDirection.PLAY_TO_SERVER.buildPacket(serverChannel, packet);
netHandler.send(payload);
});
}
}
}
Loading

0 comments on commit de1403a

Please sign in to comment.