Out of curiosity and desire to have not only working but well-written code, wondering the best way to implement IGuiHandler while respecting sidedness
The below code works (but only with a @SideOnly annotation in TileEntity when run on dedicated server). If not using annotation will throw:
java.lang.RuntimeException: Attempted to load class net/minecraft/client/gui/inventory/GuiContainer for invalid side SERVER
I have currently implemented my IGuiHandler as:
public class GuiHandler implements IGuiHandler {
@Nullable
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
BlockPos pos = new BlockPos(x, y, z);
TileEntity te = world.getTileEntity(pos);
if (te instanceof IGuiTile) {
return ((IGuiTile) te).createContainer(player);
}
return null;
}
@Nullable
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
BlockPos pos = new BlockPos(x, y, z);
TileEntity te = world.getTileEntity(pos);
if (te instanceof IGuiTile) {
return ((IGuiTile) te).createGui(player);
}
return null;
}
}
IGuiTile
public interface IGuiTile {
Container createContainer(EntityPlayer player);
GuiContainer createGui(EntityPlayer player);
}
and my Tile Entity subclass has the following implementation:
@Override
public Container createContainer(EntityPlayer player) {
return new ContainerFurnace(player.inventory, this);
}
@SideOnly(Side.CLIENT)
@Override
public GuiContainer createGui(EntityPlayer player) {
return new GuiFurnace(this, new ContainerFurnace(player.inventory, this));
}
ps. above code was largely from a Mcjty tutorial as I was learning, and his didn't use the @SideOnly. I don't think he ran his on dedicated server during the tutorial to find this error...
Thanks all!