Move Client Side only code to the correct classes to prevent server crashes

This commit is contained in:
2022-09-25 13:36:23 +02:00
parent 0b22730703
commit f6e42cf502
17 changed files with 180 additions and 138 deletions

View File

@@ -40,7 +40,7 @@ public class CreativeTabBuilder {
}
public CreativeModeTab build() {
return Platform.CLIENT_HELPER.tabBuilder(this.modid, this.tabid, this.tabIcon, this.backgroundPrefix);
return Platform.COMMON_HELPER.tabBuilder(this.modid, this.tabid, this.tabIcon, this.backgroundPrefix);
}
}

View File

@@ -2,7 +2,9 @@ package me.hypherionmc.craterlib.common.item;
import me.hypherionmc.craterlib.api.rendering.DyableBlock;
import me.hypherionmc.craterlib.api.rendering.ItemDyable;
import me.hypherionmc.craterlib.platform.ClientPlatform;
import me.hypherionmc.craterlib.platform.Platform;
import me.hypherionmc.craterlib.platform.services.Environment;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.BlockItem;
@@ -23,7 +25,10 @@ public class BlockItemDyable extends BlockItem implements ItemDyable {
public BlockItemDyable(Block block, Properties properties) {
super(block, properties);
Platform.CLIENT_HELPER.registerItemProperty(this, "color");
if (Platform.LOADER.getEnvironment() == Environment.CLIENT) {
ClientPlatform.CLIENT_HELPER.registerItemProperty(this, "color");
}
}
/**

View File

@@ -1,5 +1,6 @@
package me.hypherionmc.craterlib.network;
import me.hypherionmc.craterlib.platform.ClientPlatform;
import me.hypherionmc.craterlib.platform.Platform;
import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer;
@@ -19,7 +20,7 @@ public interface CraterNetworkHandler {
Packet<?> toClientBound(CraterPacket<?> packet);
default void sendToServer(CraterPacket<?> packet) {
Platform.COMMON_HELPER.getClientConnection().send(this.toServerBound(packet));
ClientPlatform.CLIENT_HELPER.getClientConnection().send(this.toServerBound(packet));
}
default void sendTo(CraterPacket<?> packet, ServerPlayer player) {

View File

@@ -0,0 +1,24 @@
package me.hypherionmc.craterlib.platform;
import me.hypherionmc.craterlib.CraterConstants;
import me.hypherionmc.craterlib.platform.services.LibClientHelper;
import java.util.ServiceLoader;
/**
* @author HypherionSA
* @date 25/09/2022
*/
public class ClientPlatform {
public static final LibClientHelper CLIENT_HELPER = load(LibClientHelper.class);
public static <T> T load(Class<T> clazz) {
final T loadedService = ServiceLoader.load(clazz)
.findFirst()
.orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName()));
CraterConstants.LOG.debug("Loaded {} for service {}", loadedService, clazz);
return loadedService;
}
}

View File

@@ -2,7 +2,6 @@ package me.hypherionmc.craterlib.platform;
import me.hypherionmc.craterlib.CraterConstants;
import me.hypherionmc.craterlib.platform.services.ILoaderHelper;
import me.hypherionmc.craterlib.platform.services.LibClientHelper;
import me.hypherionmc.craterlib.platform.services.LibCommonHelper;
import java.util.ServiceLoader;
@@ -11,8 +10,6 @@ public class Platform {
public static final ILoaderHelper LOADER = load(ILoaderHelper.class);
public static final LibClientHelper CLIENT_HELPER = load(LibClientHelper.class);
public static final LibCommonHelper COMMON_HELPER = load(LibCommonHelper.class);
public static <T> T load(Class<T> clazz) {

View File

@@ -1,14 +1,19 @@
package me.hypherionmc.craterlib.platform.services;
import me.hypherionmc.craterlib.common.item.BlockItemDyable;
import me.hypherionmc.craterlib.network.CraterPacket;
import me.hypherionmc.craterlib.systems.reg.RegistryObject;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.client.Minecraft;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import java.util.Collection;
import java.util.function.Supplier;
import java.util.function.Function;
/**
* @author HypherionSA
@@ -16,8 +21,6 @@ import java.util.function.Supplier;
*/
public interface LibClientHelper {
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf);
public void registerItemProperty(BlockItemDyable item, String property);
public void registerCustomRenderTypes(
@@ -25,4 +28,14 @@ public interface LibClientHelper {
Collection<RegistryObject<Item>> items
);
public Minecraft getClientInstance();
public Player getClientPlayer();
public Level getClientLevel();
public Connection getClientConnection();
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
}

View File

@@ -2,23 +2,22 @@ package me.hypherionmc.craterlib.platform.services;
import me.hypherionmc.craterlib.network.CraterNetworkHandler;
import me.hypherionmc.craterlib.network.CraterPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.level.Level;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import org.apache.commons.lang3.function.TriFunction;
import javax.annotation.Nullable;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* @author HypherionSA
@@ -28,14 +27,6 @@ public interface LibCommonHelper {
public CraterNetworkHandler createPacketHandler(String modid);
public Minecraft getClientInstance();
public Player getClientPlayer();
public Level getClientLevel();
public Connection getClientConnection();
public MinecraftServer getMCServer();
public void openMenu(ServerPlayer player, MenuProvider menu, @Nullable Consumer<FriendlyByteBuf> initialData);
@@ -43,6 +34,7 @@ public interface LibCommonHelper {
public <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor);
/* FABRIC ONLY */
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf);
}

View File

@@ -7,7 +7,6 @@ import net.minecraft.world.Clearable;
import net.minecraft.world.Container;
import net.minecraft.world.ContainerHelper;
import net.minecraft.world.SimpleContainer;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
/**