Posted June 16, 20196 yr How can I connect IInteractionObject with my Gui? My target is to open gui (with no container) through clicking on entity and I want to make it compatible both with client and server side. I have my gui registred in this way in the main mod file ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.GUIFACTORY, ()->GuiOldMan::new); At first I tried to make my GuiOldMan implements IInteractionObject but the whole gui is client side only so it didn't work for the server. I am trying to open Gui using NetworkHooks.openGui((EntityPlayerMP) player, new GuiOldMan()); I've been also trying to make separate object that implements IInteractionObject, but I don't know how to connect this object with gui. Thanks in Advance!
June 16, 20196 yr Author 10 minutes ago, diesieben07 said: If your GUI is client-only just use Minecraft#displayGuiScreen. IInteractionObject and friends are for GUIs that need server<>client interaction. yeah I have tried that using Quote if(world.isRemote) but it doesn't work when running on a server. Also I've been trying to make it work on server using packets (server -> client -> open Gui) but it doesn't work. Edited June 16, 20196 yr by Krevik
June 16, 20196 yr Author 9 minutes ago, diesieben07 said: Show your attempt at using a packet. And elaborate on "doesn't work". When I try using Minecraft.getInstance.displayGui() inside if(world.isRemote()) I am getting crash when starting server Attempted to load class net/minecraft/client/gui/GuiScreen for invalid dist DEDICATED_SERVER My attempt for using packet: ProcessInteract Method: Spoiler @Override public boolean processInteract(EntityPlayer player, EnumHand hand) { if(player instanceof EntityPlayerMP) { PacketHandler.sendTo(new PacketClientOpenGuiOldMan(), (EntityPlayerMP) player); } return super.processInteract(player, hand); } Packet Handler class: Spoiler public final class PacketHandler { private static final String PROTOCOL_VERSION = Integer.toString(1); private static final SimpleChannel HANDLER = NetworkRegistry.ChannelBuilder .named(new ResourceLocation(MOD_ID, "channel_kathairis_"+PROTOCOL_VERSION)) .clientAcceptedVersions(PROTOCOL_VERSION::equals) .serverAcceptedVersions(PROTOCOL_VERSION::equals) .networkProtocolVersion(() -> PROTOCOL_VERSION) .simpleChannel(); public static void register() { int id = 0; HANDLER.registerMessage(id++, PacketClientOpenGuiOldMan.class, PacketClientOpenGuiOldMan::encode, PacketClientOpenGuiOldMan::decode, PacketClientOpenGuiOldMan.Handler::handle); } public static void sendToServer(Object msg) { HANDLER.sendToServer(msg); } public static void sendTo(Object msg, EntityPlayerMP player) { if (!(player instanceof FakePlayer)) { HANDLER.sendTo(msg, player.connection.netManager, NetworkDirection.PLAY_TO_CLIENT); } } public static void sendToAll(Object msg){ for (EntityPlayerMP player : ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayers()) { sendTo(msg,player); } } } PacketClientOpenGuiOldMan class: Spoiler public class PacketClientOpenGuiOldMan { public PacketClientOpenGuiOldMan(){ } public static void encode(PacketClientOpenGuiOldMan msg, PacketBuffer buf) { } public static PacketClientOpenGuiOldMan decode(PacketBuffer buf) { return new PacketClientOpenGuiOldMan(); } public static class Handler { public static void handle(final PacketClientOpenGuiOldMan message, Supplier<NetworkEvent.Context> ctx) { if(ctx.get().getDirection()== NetworkDirection.PLAY_TO_CLIENT){ Minecraft.getInstance().displayGuiScreen(new GuiOldMan()); } ctx.get().setPacketHandled(true); } } } When trying to use this way, I am getting the same error when trying run the server - attempted to load class for invalid dist Edited June 16, 20196 yr by Krevik
June 16, 20196 yr Author 2 minutes ago, diesieben07 said: Well, yes, you cannot access client-only classes from common code. You have to use the methods in DistExecutor. ohh? ? could you tell me sth more or point to any thing that could help me?
June 16, 20196 yr Author 1 minute ago, diesieben07 said: Have you looked at the methods the class provides? They have some documentation and are in general quite straightforward... Well only one method here contains any documentation. But you're right they seem easy, I should be able to do that now. Thanks a lot!
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.