Port forge and finally fix build scripts

This commit is contained in:
2023-09-25 20:18:35 +02:00
parent ec5fa726a0
commit aef4992cf5
22 changed files with 156 additions and 141 deletions

View File

@@ -1,12 +1,9 @@
package com.hypherionmc.craterlib.client;
import com.hypherionmc.craterlib.api.rendering.CustomRenderType;
import com.hypherionmc.craterlib.common.item.BlockItemDyable;
import com.hypherionmc.craterlib.core.platform.ClientPlatform;
import com.hypherionmc.craterlib.core.systems.reg.RegistryObject;
import com.hypherionmc.craterlib.util.ColorPropertyFunction;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.item.ItemProperties;
@@ -14,12 +11,10 @@ import net.minecraft.network.Connection;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.fml.loading.FMLEnvironment;
import java.util.Collection;
import java.util.Objects;
/**
@@ -37,14 +32,14 @@ public class ForgeClientHelper implements ClientPlatform {
}
}
@Override
/*@Override
public void registerCustomRenderTypes(Collection<RegistryObject<Block>> blocks) {
blocks.forEach(blk -> {
if (blk.get() instanceof CustomRenderType type) {
ItemBlockRenderTypes.setRenderLayer(blk.get(), type.getCustomRenderType());
}
});
}
}*/
@Override
public Minecraft getClientInstance() {

View File

@@ -21,7 +21,6 @@ import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.extensions.IForgeMenuType;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.server.ServerLifecycleHooks;
import org.apache.commons.lang3.function.TriFunction;
import org.jetbrains.annotations.Nullable;
@@ -54,9 +53,9 @@ public class ForgeCommonHelper implements CommonPlatform {
@Override
public void openMenu(ServerPlayer player, MenuProvider menu, @Nullable Consumer<FriendlyByteBuf> initialData) {
if (initialData != null) {
NetworkHooks.openScreen(player, menu, initialData);
player.openMenu(menu, initialData);
} else {
NetworkHooks.openScreen(player, menu, player.getOnPos());
player.openMenu(menu, player.getOnPos());
}
}

View File

@@ -5,17 +5,21 @@ import com.hypherionmc.craterlib.core.network.CraterNetworkHandler;
import com.hypherionmc.craterlib.core.network.CraterPacket;
import com.hypherionmc.craterlib.core.network.PacketDirection;
import com.hypherionmc.craterlib.core.platform.ClientPlatform;
import io.netty.buffer.Unpooled;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.common.util.LogicalSidedProvider;
import net.minecraftforge.event.network.CustomPayloadEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.network.Channel;
import net.minecraftforge.network.ChannelBuilder;
import net.minecraftforge.network.NetworkDirection;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.simple.SimpleChannel;
import net.minecraftforge.network.SimpleChannel;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer;
@@ -29,7 +33,6 @@ import java.util.function.Supplier;
public class ForgeNetworkHandler implements CraterNetworkHandler {
private static final Map<String, ForgeNetworkHandler> NETWORK_HANDLERS = Maps.newConcurrentMap();
private static final String PROTOCOL = Integer.toString(1);
private final SimpleChannel channel;
@@ -39,6 +42,8 @@ public class ForgeNetworkHandler implements CraterNetworkHandler {
private final AtomicInteger packetID = new AtomicInteger();
private HashMap<Class<?>, Integer> packetMap = new LinkedHashMap<>();
private ForgeNetworkHandler(SimpleChannel channel, boolean clientRequired, boolean serverRequired) {
this.channel = channel;
this.clientRequired = clientRequired;
@@ -54,37 +59,47 @@ public class ForgeNetworkHandler implements CraterNetworkHandler {
return packet;
};
BiConsumer<T, Supplier<NetworkEvent.Context>> handler = (packet, sup) -> {
NetworkEvent.Context context = sup.get();
BiConsumer<T, CustomPayloadEvent.Context> handler = (packet, sup) -> {
LogicalSide expectedSide = getSideFromDirection(packetDirection);
LogicalSide currentSide = context.getDirection().getReceptionSide();
LogicalSide currentSide = sup.getDirection().getReceptionSide();
if (expectedSide != currentSide) {
throw new IllegalStateException(String.format("Received message on wrong side, expected %s, was %s", expectedSide, currentSide));
}
context.enqueueWork(() -> {
sup.enqueueWork(() -> {
Player player;
if (packetDirection == PacketDirection.TO_CLIENT) {
player = ClientPlatform.INSTANCE.getClientPlayer();
} else {
player = context.getSender();
player = sup.getSender();
}
packet.handle(player, LogicalSidedProvider.WORKQUEUE.get(expectedSide));
});
context.setPacketHandled(true);
sup.setPacketHandled(true);
};
this.channel.registerMessage(this.packetID.getAndIncrement(), (Class<T>) clazz, encoder, decoder, handler);
int id = packetID.getAndIncrement();
packetMap.put(clazz, id);
this.channel
.messageBuilder((Class<T>) clazz, id)
.encoder(encoder)
.decoder(decoder)
.consumerNetworkThread(handler)
.add();
}
@Override
public Packet<?> toServerBound(CraterPacket<?> packet) {
return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_SERVER);
return NetworkDirection.PLAY_TO_SERVER.buildPacket(toBuffer(packet), channel.getName()).getThis();
//return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_SERVER);
}
@Override
public Packet<?> toClientBound(CraterPacket<?> packet) {
return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_CLIENT);
return NetworkDirection.PLAY_TO_CLIENT.buildPacket(toBuffer(packet), channel.getName()).getThis();
//return this.channel.toVanillaPacket(packet, NetworkDirection.PLAY_TO_CLIENT);
}
@Override
@@ -100,15 +115,24 @@ public class ForgeNetworkHandler implements CraterNetworkHandler {
}
private static SimpleChannel buildSimpleChannel(String modId, boolean clientAcceptsVanillaOrMissing, boolean serverAcceptsVanillaOrMissing) {
return NetworkRegistry.ChannelBuilder
return ChannelBuilder
.named(new ResourceLocation(modId, "crater_network"))
.networkProtocolVersion(() -> PROTOCOL)
.clientAcceptedVersions(clientAcceptsVanillaOrMissing ? NetworkRegistry.acceptMissingOr(PROTOCOL) : PROTOCOL::equals)
.serverAcceptedVersions(serverAcceptsVanillaOrMissing ? NetworkRegistry.acceptMissingOr(PROTOCOL) : PROTOCOL::equals)
.networkProtocolVersion(1)
.clientAcceptedVersions(clientAcceptsVanillaOrMissing ? Channel.VersionTest.ACCEPT_MISSING : Channel.VersionTest.exact(1))
.serverAcceptedVersions(serverAcceptsVanillaOrMissing ? Channel.VersionTest.ACCEPT_MISSING : Channel.VersionTest.exact(1))
.simpleChannel();
}
private LogicalSide getSideFromDirection(PacketDirection direction) {
return direction == PacketDirection.TO_CLIENT ? LogicalSide.CLIENT : LogicalSide.SERVER;
}
protected FriendlyByteBuf toBuffer(CraterPacket<?> message) {
var msg = packetMap.get(message.getClass());
var ret = new FriendlyByteBuf(Unpooled.buffer());
ret.writeVarInt(msg);
message.write(ret);
return ret;
}
}