Chest GUI API now completed

This commit is contained in:
zontreck 2024-01-02 17:59:10 -07:00
parent 01a6f1ddc7
commit 0fb37b1633
19 changed files with 436 additions and 239 deletions

View file

@ -2,8 +2,9 @@ package dev.zontreck.libzontreck.networking;
import dev.zontreck.libzontreck.LibZontreck;
import dev.zontreck.libzontreck.events.RegisterPacketsEvent;
import dev.zontreck.libzontreck.networking.packets.ChestGUIOpenC2S;
import dev.zontreck.libzontreck.networking.packets.IPacket;
import dev.zontreck.libzontreck.networking.packets.S2CCloseChestGUI;
import dev.zontreck.libzontreck.networking.packets.S2CPlaySoundPacket;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.common.MinecraftForge;
@ -45,11 +46,17 @@ public class ModMessages {
packet.register(net);
}
net.messageBuilder(ChestGUIOpenC2S.class, PACKET_ID.getAndIncrement(), NetworkDirection.PLAY_TO_SERVER)
.decoder(ChestGUIOpenC2S::new)
.encoder(ChestGUIOpenC2S::toBytes)
.consumerMainThread(ChestGUIOpenC2S::handle)
.add();
net.messageBuilder(S2CPlaySoundPacket.class, PACKET_ID.getAndIncrement(), NetworkDirection.PLAY_TO_CLIENT)
.decoder(S2CPlaySoundPacket::new)
.encoder(S2CPlaySoundPacket::toBytes)
.consumerMainThread(S2CPlaySoundPacket::handle)
.add();
net.messageBuilder(S2CCloseChestGUI.class, PACKET_ID.getAndIncrement(), NetworkDirection.PLAY_TO_CLIENT)
.decoder(S2CCloseChestGUI::new)
.encoder(S2CCloseChestGUI::toBytes)
.consumerMainThread(S2CCloseChestGUI::handle)
.add();
}

View file

@ -12,7 +12,6 @@ public class NetworkEvents
public void onRegisterPackets(RegisterPacketsEvent ev)
{
ev.packets.add(new S2CWalletUpdatedPacket());
ev.packets.add(new S2CPlaySoundPacket());
ev.packets.add(new S2CWalletInitialSyncPacket());
}
}

View file

@ -1,47 +0,0 @@
package dev.zontreck.libzontreck.networking.packets;
import java.util.function.Supplier;
import dev.zontreck.libzontreck.events.OpenGUIEvent;
import dev.zontreck.libzontreck.networking.structures.OpenGUIRequest;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.network.NetworkEvent;
/**
* To be used by first-party and third-party mods to assemble a menu
* NOTE: Without the server, only the credits menu will be able to be opened, which is the only built-in menu utilizing this system.
*/
public class ChestGUIOpenC2S {
private CompoundTag data;
public ChestGUIOpenC2S(OpenGUIRequest request)
{
data = request.serialize();
}
public ChestGUIOpenC2S(FriendlyByteBuf buf)
{
data = buf.readAnySizeNbt();
}
public void toBytes(FriendlyByteBuf buf)
{
buf.writeNbt(data);
}
public boolean handle(Supplier<NetworkEvent.Context> supplier)
{
NetworkEvent.Context ctx = supplier.get();
ctx.enqueueWork(()->{
// We are on the server!
OpenGUIRequest req = new OpenGUIRequest(data);
MinecraftForge.EVENT_BUS.post(new OpenGUIEvent(req.ID, req.playerID));
});
return true;
}
}

View file

@ -0,0 +1,39 @@
package dev.zontreck.libzontreck.networking.packets;
import dev.zontreck.libzontreck.chestgui.ChestGUI;
import dev.zontreck.libzontreck.menus.ChestGUIScreen;
import net.minecraft.client.Minecraft;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class S2CCloseChestGUI
{
public S2CCloseChestGUI()
{
}
public S2CCloseChestGUI(FriendlyByteBuf buf)
{
}
public void toBytes(FriendlyByteBuf buf)
{
}
public void handle(Supplier<NetworkEvent.Context> supplier)
{
NetworkEvent.Context ctx = supplier.get();
ctx.enqueueWork(()->{
// Close the GUI
if(Minecraft.getInstance().screen instanceof ChestGUIScreen)
Minecraft.getInstance().setScreen(null);
});
}
}