From 9c0cdc82bbee8bd1894ee900e14291d795d199eb Mon Sep 17 00:00:00 2001 From: ktpatient <167013520+ktpatient@users.noreply.github.com> Date: Sun, 8 Sep 2024 17:42:53 +0100 Subject: [PATCH] Augment Network syncing --- .../capabilities/augmentation/Slot.java | 14 +++++++++- .../content/augments/AugmentHelper.java | 15 ++++++++++- .../augments/DisallowBreakingAugment.java | 9 +------ .../content/augments/GiveDiamondAugment.java | 4 +-- .../augments/ThrowSnowballAugment.java | 6 ++--- .../content/items/AugmentDebugItem.java | 5 +++- .../modjam/events/AugmentEvents.java | 10 ++----- .../modjam/network/AugmentDataPayload.java | 26 ------------------- .../{events => network}/NetworkEvents.java | 14 ++++------ .../modjam/network/PayloadActions.java | 11 +++++--- .../modjam/network/SetAugmentDataPayload.java | 26 +++++++++++++++++++ 11 files changed, 78 insertions(+), 62 deletions(-) delete mode 100644 src/main/java/com/portingdeadmods/modjam/network/AugmentDataPayload.java rename src/main/java/com/portingdeadmods/modjam/{events => network}/NetworkEvents.java (61%) create mode 100644 src/main/java/com/portingdeadmods/modjam/network/SetAugmentDataPayload.java diff --git a/src/main/java/com/portingdeadmods/modjam/capabilities/augmentation/Slot.java b/src/main/java/com/portingdeadmods/modjam/capabilities/augmentation/Slot.java index 3b065980..3dc95f0f 100644 --- a/src/main/java/com/portingdeadmods/modjam/capabilities/augmentation/Slot.java +++ b/src/main/java/com/portingdeadmods/modjam/capabilities/augmentation/Slot.java @@ -5,10 +5,22 @@ public enum Slot { BODY(1), ARMS(2), LEGS(3), - HEART(4); + HEART(4), + NONE(-1); public int slotId; Slot(int id){ this.slotId = id; } + public boolean Compare(int i){return slotId == i;} + public static Slot GetValue(int _id) + { + Slot[] Slots = Slot.values(); + for(int i = 0; i < Slots.length; i++) + { + if(Slots[i].Compare(_id)) + return Slots[i]; + } + return Slot.NONE; + } } diff --git a/src/main/java/com/portingdeadmods/modjam/content/augments/AugmentHelper.java b/src/main/java/com/portingdeadmods/modjam/content/augments/AugmentHelper.java index 4d45c14f..787aaebe 100644 --- a/src/main/java/com/portingdeadmods/modjam/content/augments/AugmentHelper.java +++ b/src/main/java/com/portingdeadmods/modjam/content/augments/AugmentHelper.java @@ -2,10 +2,13 @@ import com.portingdeadmods.modjam.ModJam; import com.portingdeadmods.modjam.capabilities.augmentation.Slot; +import com.portingdeadmods.modjam.network.SetAugmentDataPayload; import com.portingdeadmods.modjam.registries.MJDataAttachments; import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.network.PacketDistributor; import java.util.ArrayList; import java.util.HashMap; @@ -43,25 +46,35 @@ private static Supplier> getAttachment(Slot slot){ ModJam.LOGGER.warn("Error parsing slot {} (I thought this was unreachable)", slot.name()); return MJDataAttachments.HEAD_AUGMENTATION; } + public static int getId(Player player, Slot slot){ return player.getData(getAttachment(slot)); // return -2; } + public static void setId(Player player, Slot slot , int id){ - player.setData(getAttachment(slot), id); + if (player.level().isClientSide){ + PacketDistributor.sendToServer(new SetAugmentDataPayload(id , slot.slotId)); + } else { + PacketDistributor.sendToPlayer((ServerPlayer) player, new SetAugmentDataPayload(id, slot.slotId)); + } } + public static void incId(Player player, Slot slot){ setId(player, slot, AugmentHelper.getId(player, slot) + 1); player.sendSystemMessage(Component.literal("Incremented to Id "+getId(player, slot)+" for slot "+slot.name())); } + public static void decId(Player player, Slot slot){ setId(player, slot, AugmentHelper.getId(player, slot) - 1); player.sendSystemMessage(Component.literal("Decremented to Id "+getId(player, slot)+" for slot "+slot.name())); } + public static StaticAugment getAugment(int id){ return augmentHashMap.get(id); } + public static StaticAugment[] getAugments(Player player) { List augments = new ArrayList<>(); augments.add(getAugment(player, Slot.HEAD)); diff --git a/src/main/java/com/portingdeadmods/modjam/content/augments/DisallowBreakingAugment.java b/src/main/java/com/portingdeadmods/modjam/content/augments/DisallowBreakingAugment.java index d1cd3374..2c3d205f 100644 --- a/src/main/java/com/portingdeadmods/modjam/content/augments/DisallowBreakingAugment.java +++ b/src/main/java/com/portingdeadmods/modjam/content/augments/DisallowBreakingAugment.java @@ -1,12 +1,8 @@ package com.portingdeadmods.modjam.content.augments; import com.mojang.blaze3d.platform.InputConstants; -import com.portingdeadmods.modjam.ModJam; -import com.portingdeadmods.modjam.capabilities.MJCapabilities; -import com.portingdeadmods.modjam.events.MJClientEvents; import com.portingdeadmods.modjam.network.KeyPressedPayload; import com.portingdeadmods.modjam.utils.InputUtils; -import net.minecraft.client.Minecraft; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Items; import net.neoforged.neoforge.event.level.BlockEvent; @@ -26,10 +22,7 @@ public void breakBlock(BlockEvent.BreakEvent event) { @Override public void clientTick(PlayerTickEvent.Post event) { - ModJam.LOGGER.info("ClientTick for id {}", getId()); - - if (MJClientEvents.ClientBus.AUGMENT_TEST_KEYMAP.get().consumeClick()){ - ModJam.LOGGER.debug("Key down"); + if (InputUtils.isKeyDown(InputConstants.KEY_Y)){ PacketDistributor.sendToServer(new KeyPressedPayload(getId())); } } diff --git a/src/main/java/com/portingdeadmods/modjam/content/augments/GiveDiamondAugment.java b/src/main/java/com/portingdeadmods/modjam/content/augments/GiveDiamondAugment.java index cc41ace8..9a5f91f8 100644 --- a/src/main/java/com/portingdeadmods/modjam/content/augments/GiveDiamondAugment.java +++ b/src/main/java/com/portingdeadmods/modjam/content/augments/GiveDiamondAugment.java @@ -20,9 +20,9 @@ public int getId() { @Override public void clientTick(PlayerTickEvent.Post event) { - ModJam.LOGGER.info("ClientTick for id {}", getId()); + // ModJam.LOGGER.info("ClientTick for id {}", getId()); if (InputUtils.isKeyDown(InputConstants.KEY_Y)) { - PacketDistributor.sendToAllPlayers(new KeyPressedPayload(getId())); + PacketDistributor.sendToServer(new KeyPressedPayload(getId())); } } diff --git a/src/main/java/com/portingdeadmods/modjam/content/augments/ThrowSnowballAugment.java b/src/main/java/com/portingdeadmods/modjam/content/augments/ThrowSnowballAugment.java index ab50ca72..6fb42f5e 100644 --- a/src/main/java/com/portingdeadmods/modjam/content/augments/ThrowSnowballAugment.java +++ b/src/main/java/com/portingdeadmods/modjam/content/augments/ThrowSnowballAugment.java @@ -19,11 +19,11 @@ public int getId() { @Override public void clientTick(PlayerTickEvent.Post event) { - ModJam.LOGGER.info("ClientTick for id {}", getId()); + // ModJam.LOGGER.info("ClientTick for id {}", getId()); if (InputUtils.isKeyDown(InputConstants.KEY_Y)) { - ModJam.LOGGER.info("Snow"); - PacketDistributor.sendToAllPlayers(new KeyPressedPayload(getId())); + // ModJam.LOGGER.info("Snow"); + PacketDistributor.sendToServer(new KeyPressedPayload(getId())); } } diff --git a/src/main/java/com/portingdeadmods/modjam/content/items/AugmentDebugItem.java b/src/main/java/com/portingdeadmods/modjam/content/items/AugmentDebugItem.java index b3cecbe7..c4428d04 100644 --- a/src/main/java/com/portingdeadmods/modjam/content/items/AugmentDebugItem.java +++ b/src/main/java/com/portingdeadmods/modjam/content/items/AugmentDebugItem.java @@ -3,9 +3,11 @@ import com.mojang.blaze3d.platform.InputConstants; import com.portingdeadmods.modjam.capabilities.augmentation.Slot; import com.portingdeadmods.modjam.content.augments.AugmentHelper; +import com.portingdeadmods.modjam.network.SetAugmentDataPayload; import com.portingdeadmods.modjam.utils.InputUtils; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; @@ -16,6 +18,7 @@ import net.minecraft.world.level.block.Blocks; import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.network.PacketDistributor; import org.jetbrains.annotations.NotNull; public class AugmentDebugItem extends Item { @@ -44,7 +47,7 @@ public boolean onDroppedByPlayer(@NotNull ItemStack item, Player player) { AugmentHelper.incId(player, Slot.BODY); } - return InteractionResult.SUCCESS; + return super.useOn(context); } diff --git a/src/main/java/com/portingdeadmods/modjam/events/AugmentEvents.java b/src/main/java/com/portingdeadmods/modjam/events/AugmentEvents.java index 289ad8d4..6f0f5a50 100644 --- a/src/main/java/com/portingdeadmods/modjam/events/AugmentEvents.java +++ b/src/main/java/com/portingdeadmods/modjam/events/AugmentEvents.java @@ -1,11 +1,9 @@ package com.portingdeadmods.modjam.events; import com.portingdeadmods.modjam.ModJam; -import com.portingdeadmods.modjam.capabilities.augmentation.Slot; import com.portingdeadmods.modjam.content.augments.AugmentHelper; import com.portingdeadmods.modjam.content.augments.StaticAugment; -import com.portingdeadmods.modjam.network.AugmentDataPayload; -import com.portingdeadmods.modjam.network.KeyPressedPayload; +import com.portingdeadmods.modjam.network.SetAugmentDataPayload; import net.minecraft.server.level.ServerPlayer; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; @@ -17,10 +15,6 @@ @SuppressWarnings("unused") @EventBusSubscriber(modid = ModJam.MODID) public class AugmentEvents { - public static void logInEvent(PlayerEvent.PlayerLoggedInEvent event){ - if (event.getEntity().level().isClientSide) return; - PacketDistributor.sendToPlayer((ServerPlayer) event.getEntity(), new AugmentDataPayload(1,1)); - } @SubscribeEvent public static void breakEvent(BlockEvent.BreakEvent event){ @@ -40,7 +34,7 @@ public static void playerTick(PlayerTickEvent.Post event){ if (augment != null) { if (event.getEntity().level().isClientSide) { augment.clientTick(event); - ModJam.LOGGER.debug("AAAA"); + // ModJam.LOGGER.debug("AAAA"); } else { augment.serverTick(event); } diff --git a/src/main/java/com/portingdeadmods/modjam/network/AugmentDataPayload.java b/src/main/java/com/portingdeadmods/modjam/network/AugmentDataPayload.java deleted file mode 100644 index 1a1b2334..00000000 --- a/src/main/java/com/portingdeadmods/modjam/network/AugmentDataPayload.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.portingdeadmods.modjam.network; - -import com.portingdeadmods.modjam.ModJam; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; -import org.jetbrains.annotations.NotNull; - -public record AugmentDataPayload(int augmentId, int slot) implements CustomPacketPayload { - - public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(ModJam.MODID, "augment_data_payload")); - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.VAR_INT, - AugmentDataPayload::augmentId, - ByteBufCodecs.VAR_INT, - AugmentDataPayload::slot, - AugmentDataPayload::new - ); - - @Override - public @NotNull Type type() { - return TYPE; - } -} diff --git a/src/main/java/com/portingdeadmods/modjam/events/NetworkEvents.java b/src/main/java/com/portingdeadmods/modjam/network/NetworkEvents.java similarity index 61% rename from src/main/java/com/portingdeadmods/modjam/events/NetworkEvents.java rename to src/main/java/com/portingdeadmods/modjam/network/NetworkEvents.java index 632f2059..97c35123 100644 --- a/src/main/java/com/portingdeadmods/modjam/events/NetworkEvents.java +++ b/src/main/java/com/portingdeadmods/modjam/network/NetworkEvents.java @@ -1,13 +1,9 @@ -package com.portingdeadmods.modjam.events; +package com.portingdeadmods.modjam.network; import com.portingdeadmods.modjam.ModJam; -import com.portingdeadmods.modjam.network.AugmentDataPayload; -import com.portingdeadmods.modjam.network.KeyPressedPayload; -import com.portingdeadmods.modjam.network.PayloadActions; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; -import net.neoforged.neoforge.network.handling.DirectionalPayloadHandler; import net.neoforged.neoforge.network.registration.PayloadRegistrar; @EventBusSubscriber(modid = ModJam.MODID, bus = EventBusSubscriber.Bus.MOD) @@ -20,10 +16,10 @@ public static void registerPayloads(final RegisterPayloadHandlersEvent event) { KeyPressedPayload.STREAM_CODEC, PayloadActions::keyPressedAction ); - registrar.playToServer( - AugmentDataPayload.TYPE, - AugmentDataPayload.STREAM_CODEC, - PayloadActions::augmentDataAction + registrar.playBidirectional( + SetAugmentDataPayload.TYPE, + SetAugmentDataPayload.STREAM_CODEC, + PayloadActions::setAugmentDataAction ); } } diff --git a/src/main/java/com/portingdeadmods/modjam/network/PayloadActions.java b/src/main/java/com/portingdeadmods/modjam/network/PayloadActions.java index b419661d..66743127 100644 --- a/src/main/java/com/portingdeadmods/modjam/network/PayloadActions.java +++ b/src/main/java/com/portingdeadmods/modjam/network/PayloadActions.java @@ -3,23 +3,28 @@ import com.portingdeadmods.modjam.ModJam; import com.portingdeadmods.modjam.capabilities.augmentation.Slot; import com.portingdeadmods.modjam.content.augments.AugmentHelper; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; import net.neoforged.neoforge.network.handling.IPayloadContext; public class PayloadActions { + public static void keyPressedAction(KeyPressedPayload payload, IPayloadContext context){ - ModJam.LOGGER.debug("Key pressed"); context.enqueueWork(()->{ Player player = context.player(); int augmentId = payload.augmentId(); ModJam.LOGGER.info("Sent with packetId: {}", augmentId); AugmentHelper.getAugment(augmentId).handleKeybindPress(player); + }).exceptionally(e->{ + context.disconnect(Component.literal("action failed: "+ e.getMessage())); + return null; }); + } - public static void augmentDataAction(AugmentDataPayload payload, IPayloadContext context){ + public static void setAugmentDataAction(SetAugmentDataPayload payload, IPayloadContext context){ context.enqueueWork(()->{ + AugmentHelper.setId(context.player(), Slot.GetValue(payload.slot()), payload.augmentId()); ModJam.LOGGER.info("Syncing data {}", payload.slot()); }); - } } diff --git a/src/main/java/com/portingdeadmods/modjam/network/SetAugmentDataPayload.java b/src/main/java/com/portingdeadmods/modjam/network/SetAugmentDataPayload.java new file mode 100644 index 00000000..7b11fe36 --- /dev/null +++ b/src/main/java/com/portingdeadmods/modjam/network/SetAugmentDataPayload.java @@ -0,0 +1,26 @@ +package com.portingdeadmods.modjam.network; + +import com.portingdeadmods.modjam.ModJam; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; + +public record SetAugmentDataPayload(int augmentId, int slot) implements CustomPacketPayload { + + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(ModJam.MODID, "augment_data_payload")); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.INT, + SetAugmentDataPayload::augmentId, + ByteBufCodecs.INT, + SetAugmentDataPayload::slot, + SetAugmentDataPayload::new + ); + + @Override + public @NotNull Type type() { + return TYPE; + } +}