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() { 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.DyableBlock;
import me.hypherionmc.craterlib.api.rendering.ItemDyable; import me.hypherionmc.craterlib.api.rendering.ItemDyable;
import me.hypherionmc.craterlib.platform.ClientPlatform;
import me.hypherionmc.craterlib.platform.Platform; import me.hypherionmc.craterlib.platform.Platform;
import me.hypherionmc.craterlib.platform.services.Environment;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
@@ -23,7 +25,10 @@ public class BlockItemDyable extends BlockItem implements ItemDyable {
public BlockItemDyable(Block block, Properties properties) { public BlockItemDyable(Block block, Properties properties) {
super(block, 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; package me.hypherionmc.craterlib.network;
import me.hypherionmc.craterlib.platform.ClientPlatform;
import me.hypherionmc.craterlib.platform.Platform; import me.hypherionmc.craterlib.platform.Platform;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@@ -19,7 +20,7 @@ public interface CraterNetworkHandler {
Packet<?> toClientBound(CraterPacket<?> packet); Packet<?> toClientBound(CraterPacket<?> packet);
default void sendToServer(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) { 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.CraterConstants;
import me.hypherionmc.craterlib.platform.services.ILoaderHelper; import me.hypherionmc.craterlib.platform.services.ILoaderHelper;
import me.hypherionmc.craterlib.platform.services.LibClientHelper;
import me.hypherionmc.craterlib.platform.services.LibCommonHelper; import me.hypherionmc.craterlib.platform.services.LibCommonHelper;
import java.util.ServiceLoader; import java.util.ServiceLoader;
@@ -11,8 +10,6 @@ public class Platform {
public static final ILoaderHelper LOADER = load(ILoaderHelper.class); 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 final LibCommonHelper COMMON_HELPER = load(LibCommonHelper.class);
public static <T> T load(Class<T> clazz) { public static <T> T load(Class<T> clazz) {

View File

@@ -1,14 +1,19 @@
package me.hypherionmc.craterlib.platform.services; package me.hypherionmc.craterlib.platform.services;
import me.hypherionmc.craterlib.common.item.BlockItemDyable; import me.hypherionmc.craterlib.common.item.BlockItemDyable;
import me.hypherionmc.craterlib.network.CraterPacket;
import me.hypherionmc.craterlib.systems.reg.RegistryObject; 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.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import java.util.Collection; import java.util.Collection;
import java.util.function.Supplier; import java.util.function.Function;
/** /**
* @author HypherionSA * @author HypherionSA
@@ -16,8 +21,6 @@ import java.util.function.Supplier;
*/ */
public interface LibClientHelper { public interface LibClientHelper {
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf);
public void registerItemProperty(BlockItemDyable item, String property); public void registerItemProperty(BlockItemDyable item, String property);
public void registerCustomRenderTypes( public void registerCustomRenderTypes(
@@ -25,4 +28,14 @@ public interface LibClientHelper {
Collection<RegistryObject<Item>> items 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.CraterNetworkHandler;
import me.hypherionmc.craterlib.network.CraterPacket; import me.hypherionmc.craterlib.network.CraterPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.MenuProvider; import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory; 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.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType; 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 org.apache.commons.lang3.function.TriFunction;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier;
/** /**
* @author HypherionSA * @author HypherionSA
@@ -28,14 +27,6 @@ public interface LibCommonHelper {
public CraterNetworkHandler createPacketHandler(String modid); public CraterNetworkHandler createPacketHandler(String modid);
public Minecraft getClientInstance();
public Player getClientPlayer();
public Level getClientLevel();
public Connection getClientConnection();
public MinecraftServer getMCServer(); public MinecraftServer getMCServer();
public void openMenu(ServerPlayer player, MenuProvider menu, @Nullable Consumer<FriendlyByteBuf> initialData); 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); public <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor);
/* FABRIC ONLY */ /* FABRIC ONLY */
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory);
public void registerServerReceiver(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.Container;
import net.minecraft.world.ContainerHelper; import net.minecraft.world.ContainerHelper;
import net.minecraft.world.SimpleContainer; import net.minecraft.world.SimpleContainer;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
/** /**

View File

@@ -2,23 +2,28 @@ package me.hypherionmc.craterlib.client;
import me.hypherionmc.craterlib.api.rendering.CustomRenderType; import me.hypherionmc.craterlib.api.rendering.CustomRenderType;
import me.hypherionmc.craterlib.common.item.BlockItemDyable; import me.hypherionmc.craterlib.common.item.BlockItemDyable;
import me.hypherionmc.craterlib.network.CraterPacket;
import me.hypherionmc.craterlib.platform.services.LibClientHelper; import me.hypherionmc.craterlib.platform.services.LibClientHelper;
import me.hypherionmc.craterlib.systems.reg.RegistryObject; import me.hypherionmc.craterlib.systems.reg.RegistryObject;
import me.hypherionmc.craterlib.util.ColorPropertyFunction; import me.hypherionmc.craterlib.util.ColorPropertyFunction;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; 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 net.minecraft.world.level.block.Block;
import net.minecraft.world.level.material.Fluid;
import java.util.Collection; import java.util.Collection;
import java.util.function.Supplier; import java.util.function.Function;
/** /**
* @author HypherionSA * @author HypherionSA
@@ -26,22 +31,6 @@ import java.util.function.Supplier;
*/ */
public class FabricClientHelper implements LibClientHelper { public class FabricClientHelper implements LibClientHelper {
@Override
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf) {
FabricItemGroupBuilder tab = FabricItemGroupBuilder.create(new ResourceLocation(modid, tabid));
if (icon != null) {
tab.icon(icon);
}
CreativeModeTab tab1 = tab.build();
if (backgroundSuf != null && !backgroundSuf.isEmpty()) {
tab1.setBackgroundSuffix(backgroundSuf);
}
return tab1;
}
@Override @Override
public void registerItemProperty(BlockItemDyable item, String property) { public void registerItemProperty(BlockItemDyable item, String property) {
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) { if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
@@ -67,4 +56,32 @@ public class FabricClientHelper implements LibClientHelper {
} }
}); });
} }
@Override
public Minecraft getClientInstance() {
return Minecraft.getInstance();
}
@Override
public Player getClientPlayer() {
return Minecraft.getInstance().player;
}
@Override
public Level getClientLevel() {
return Minecraft.getInstance().level;
}
@Override
public Connection getClientConnection() {
return Minecraft.getInstance().getConnection().getConnection();
}
@Override
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
ClientPlayNetworking.registerGlobalReceiver(channelName, (Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
CraterPacket<?> packet = factory.apply(buf);
client.execute(() -> packet.handle(client.player, client));
});
}
} }

View File

@@ -4,14 +4,11 @@ import me.hypherionmc.craterlib.network.CraterNetworkHandler;
import me.hypherionmc.craterlib.network.CraterPacket; import me.hypherionmc.craterlib.network.CraterPacket;
import me.hypherionmc.craterlib.network.FabricNetworkHandler; import me.hypherionmc.craterlib.network.FabricNetworkHandler;
import me.hypherionmc.craterlib.platform.services.LibCommonHelper; import me.hypherionmc.craterlib.platform.services.LibCommonHelper;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory;
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType; import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -23,12 +20,14 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType; 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 org.apache.commons.lang3.function.TriFunction;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier;
/** /**
* @author HypherionSA * @author HypherionSA
@@ -43,39 +42,11 @@ public class FabricCommonHelper implements LibCommonHelper {
return FabricNetworkHandler.of(modid); return FabricNetworkHandler.of(modid);
} }
@Override
public Minecraft getClientInstance() {
return Minecraft.getInstance();
}
@Override
public Player getClientPlayer() {
return Minecraft.getInstance().player;
}
@Override
public Level getClientLevel() {
return Minecraft.getInstance().level;
}
@Override
public Connection getClientConnection() {
return Minecraft.getInstance().getConnection().getConnection();
}
@Override @Override
public MinecraftServer getMCServer() { public MinecraftServer getMCServer() {
return server; return server;
} }
@Override
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
ClientPlayNetworking.registerGlobalReceiver(channelName, (Minecraft client, ClientPacketListener handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
CraterPacket<?> packet = factory.apply(buf);
client.execute(() -> packet.handle(client.player, client));
});
}
@Override @Override
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) { public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
ServerPlayNetworking.registerGlobalReceiver(channelName, (MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) -> { ServerPlayNetworking.registerGlobalReceiver(channelName, (MinecraftServer server, ServerPlayer player, ServerGamePacketListenerImpl handler, FriendlyByteBuf buf, PacketSender responseSender) -> {
@@ -111,4 +82,20 @@ public class FabricCommonHelper implements LibCommonHelper {
public <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor) { public <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor) {
return new ExtendedScreenHandlerType<>(constructor::apply); return new ExtendedScreenHandlerType<>(constructor::apply);
} }
@Override
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf) {
FabricItemGroupBuilder tab = FabricItemGroupBuilder.create(new ResourceLocation(modid, tabid));
if (icon != null) {
tab.icon(icon);
}
CreativeModeTab tab1 = tab.build();
if (backgroundSuf != null && !backgroundSuf.isEmpty()) {
tab1.setBackgroundSuffix(backgroundSuf);
}
return tab1;
}
} }

View File

@@ -7,8 +7,6 @@ import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import java.io.File; import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
/** /**
* @author HypherionSA * @author HypherionSA

View File

@@ -1,6 +1,7 @@
package me.hypherionmc.craterlib.network; package me.hypherionmc.craterlib.network;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import me.hypherionmc.craterlib.platform.ClientPlatform;
import me.hypherionmc.craterlib.platform.Platform; import me.hypherionmc.craterlib.platform.Platform;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
@@ -40,7 +41,7 @@ public class FabricNetworkHandler implements CraterNetworkHandler {
final Function<FriendlyByteBuf, CraterPacket<?>> decoder = buf -> Util.make(supplier.get(), message -> message.read(buf)); final Function<FriendlyByteBuf, CraterPacket<?>> decoder = buf -> Util.make(supplier.get(), message -> message.read(buf));
switch (packetDirection) { switch (packetDirection) {
case TO_CLIENT -> Platform.COMMON_HELPER.registerClientReceiver(channelName, decoder); case TO_CLIENT -> ClientPlatform.CLIENT_HELPER.registerClientReceiver(channelName, decoder);
case TO_SERVER -> Platform.COMMON_HELPER.registerServerReceiver(channelName, decoder); case TO_SERVER -> Platform.COMMON_HELPER.registerServerReceiver(channelName, decoder);
} }
} }

View File

@@ -2,20 +2,25 @@ package me.hypherionmc.craterlib.client;
import me.hypherionmc.craterlib.api.rendering.CustomRenderType; import me.hypherionmc.craterlib.api.rendering.CustomRenderType;
import me.hypherionmc.craterlib.common.item.BlockItemDyable; import me.hypherionmc.craterlib.common.item.BlockItemDyable;
import me.hypherionmc.craterlib.network.CraterPacket;
import me.hypherionmc.craterlib.platform.services.LibClientHelper; import me.hypherionmc.craterlib.platform.services.LibClientHelper;
import me.hypherionmc.craterlib.systems.reg.RegistryObject; import me.hypherionmc.craterlib.systems.reg.RegistryObject;
import me.hypherionmc.craterlib.util.ColorPropertyFunction; import me.hypherionmc.craterlib.util.ColorPropertyFunction;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; 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 net.minecraft.world.level.block.Block;
import net.minecraftforge.fml.loading.FMLEnvironment; import net.minecraftforge.fml.loading.FMLEnvironment;
import java.util.Collection; import java.util.Collection;
import java.util.function.Supplier; import java.util.Objects;
import java.util.function.Function;
/** /**
* @author HypherionSA * @author HypherionSA
@@ -23,24 +28,7 @@ import java.util.function.Supplier;
*/ */
public class ForgeClientHelper implements LibClientHelper { public class ForgeClientHelper implements LibClientHelper {
@Override public ForgeClientHelper() {}
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf) {
CreativeModeTab tab = new CreativeModeTab(modid + "." + tabid) {
@Override
public ItemStack makeIcon() {
if (icon != null) {
return icon.get();
} else {
return ItemStack.EMPTY;
}
}
};
if (backgroundSuf != null && !backgroundSuf.isEmpty()) {
tab.setBackgroundSuffix(backgroundSuf);
}
return tab;
}
@Override @Override
public void registerItemProperty(BlockItemDyable item, String property) { public void registerItemProperty(BlockItemDyable item, String property) {
@@ -57,4 +45,30 @@ public class ForgeClientHelper implements LibClientHelper {
} }
}); });
} }
@Override
public Minecraft getClientInstance() {
return Minecraft.getInstance();
}
@Override
public Player getClientPlayer() {
return Minecraft.getInstance().player;
}
@Override
public Level getClientLevel() {
return Minecraft.getInstance().level;
}
@Override
public Connection getClientConnection() {
Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!");
return Minecraft.getInstance().getConnection().getConnection();
}
@Override
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
// UNUSED
}
} }

View File

@@ -4,27 +4,25 @@ import me.hypherionmc.craterlib.network.CraterNetworkHandler;
import me.hypherionmc.craterlib.network.CraterPacket; import me.hypherionmc.craterlib.network.CraterPacket;
import me.hypherionmc.craterlib.network.ForgeNetworkHandler; import me.hypherionmc.craterlib.network.ForgeNetworkHandler;
import me.hypherionmc.craterlib.platform.services.LibCommonHelper; import me.hypherionmc.craterlib.platform.services.LibCommonHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.MenuProvider; import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory; 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.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType; 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 net.minecraftforge.common.extensions.IForgeMenuType; import net.minecraftforge.common.extensions.IForgeMenuType;
import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.server.ServerLifecycleHooks; import net.minecraftforge.server.ServerLifecycleHooks;
import org.apache.commons.lang3.function.TriFunction; import org.apache.commons.lang3.function.TriFunction;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Objects;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier;
/** /**
* @author HypherionSA * @author HypherionSA
@@ -32,42 +30,18 @@ import java.util.function.Function;
*/ */
public class ForgeCommonHelper implements LibCommonHelper { public class ForgeCommonHelper implements LibCommonHelper {
public ForgeCommonHelper() {}
@Override @Override
public CraterNetworkHandler createPacketHandler(String modid) { public CraterNetworkHandler createPacketHandler(String modid) {
return ForgeNetworkHandler.of(modid, true, true); return ForgeNetworkHandler.of(modid, true, true);
} }
@Override
public Minecraft getClientInstance() {
return Minecraft.getInstance();
}
@Override
public Player getClientPlayer() {
return Minecraft.getInstance().player;
}
@Override
public Level getClientLevel() {
return Minecraft.getInstance().level;
}
@Override
public Connection getClientConnection() {
Objects.requireNonNull(Minecraft.getInstance().getConnection(), "Cannot send packets when not in game!");
return Minecraft.getInstance().getConnection().getConnection();
}
@Override @Override
public MinecraftServer getMCServer() { public MinecraftServer getMCServer() {
return ServerLifecycleHooks.getCurrentServer(); return ServerLifecycleHooks.getCurrentServer();
} }
@Override
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
// UNUSED
}
@Override @Override
public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) { public void registerServerReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
// UNUSED // UNUSED
@@ -86,4 +60,23 @@ public class ForgeCommonHelper implements LibCommonHelper {
public <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor) { public <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor) {
return IForgeMenuType.create(constructor::apply); return IForgeMenuType.create(constructor::apply);
} }
@Override
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf) {
CreativeModeTab tab = new CreativeModeTab(modid + "." + tabid) {
@Override
public ItemStack makeIcon() {
if (icon != null) {
return icon.get();
} else {
return ItemStack.EMPTY;
}
}
};
if (backgroundSuf != null && !backgroundSuf.isEmpty()) {
tab.setBackgroundSuffix(backgroundSuf);
}
return tab;
}
} }

View File

@@ -4,7 +4,6 @@ import me.hypherionmc.craterlib.platform.services.Environment;
import me.hypherionmc.craterlib.platform.services.ILoaderHelper; import me.hypherionmc.craterlib.platform.services.ILoaderHelper;
import net.minecraft.SharedConstants; import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.FMLPaths; import net.minecraftforge.fml.loading.FMLPaths;
@@ -17,6 +16,8 @@ import java.io.File;
*/ */
public class ForgeLoaderHelper implements ILoaderHelper { public class ForgeLoaderHelper implements ILoaderHelper {
public ForgeLoaderHelper() {}
@Override @Override
public boolean isFabric() { public boolean isFabric() {
return false; return false;

View File

@@ -1,7 +1,7 @@
package me.hypherionmc.craterlib.network; package me.hypherionmc.craterlib.network;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import me.hypherionmc.craterlib.platform.Platform; import me.hypherionmc.craterlib.platform.ClientPlatform;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -64,7 +64,7 @@ public class ForgeNetworkHandler implements CraterNetworkHandler {
context.enqueueWork(() -> { context.enqueueWork(() -> {
Player player; Player player;
if (packetDirection == PacketDirection.TO_CLIENT) { if (packetDirection == PacketDirection.TO_CLIENT) {
player = Platform.COMMON_HELPER.getClientPlayer(); player = ClientPlatform.CLIENT_HELPER.getClientPlayer();
} else { } else {
player = context.getSender(); player = context.getSender();
} }

View File

@@ -1,7 +1,7 @@
# Project # Project
version_major=0 version_major=0
version_minor=0 version_minor=0
version_patch=3d version_patch=5d
group=me.hypherionmc.craterlib group=me.hypherionmc.craterlib
# Common # Common