From 1f589fd9974a991771eca354daf43e156731ca03 Mon Sep 17 00:00:00 2001 From: DaFuqs Date: Sun, 12 Jan 2025 15:45:45 +0100 Subject: [PATCH] wip s2c packets --- .../pastel_network/network/PastelNetwork.java | 6 +- .../BlackHoleChestStatusUpdatePayload.java | 51 +++++++---------- .../ColorTransmissionPayload.java | 29 ++++------ .../CompactingChestStatusUpdatePayload.java | 32 ++++------- .../FabricationChestStatusUpdatePayload.java | 56 ++++++++----------- .../s2c_payloads/InkColorSelectedPayload.java | 51 +++++------------ .../s2c_payloads/MoonstoneBlastPayload.java | 48 +++++----------- ...articleSpawnerConfigurationS2CPayload.java | 1 - .../PastelNodeStatusUpdatePayload.java | 18 +++--- .../PastelTransmissionPayload.java | 39 +++++-------- .../PlayAscensionAppliedEffectsPayload.java | 22 ++------ .../PlayBlockBoundSoundInstancePayload.java | 10 ++-- .../PlayDivinityAppliedEffectsPayload.java | 20 ++----- ...FusionCraftingFinishedParticlePayload.java | 11 ++-- ...sionCraftingInProgressParticlePayload.java | 9 ++- ...PlayMemoryManifestingParticlesPayload.java | 14 ++--- .../PlayParticleAroundBlockSidesPayload.java | 7 +-- .../PlayParticleWithExactVelocityPayload.java | 15 +++-- ...ParticleWithPatternAndVelocityPayload.java | 12 ++-- ...cleWithRandomOffsetAndVelocityPayload.java | 15 +++-- ...destalCraftingFinishedParticlePayload.java | 15 ++--- ...yPedestalStartCraftingParticlePayload.java | 11 ++-- .../PlayPedestalUpgradedParticlePayload.java | 12 ++-- .../PlayPresentOpeningParticlesPayload.java | 12 ++-- .../PlayShootingStarParticlesPayload.java | 11 ++-- .../PlayTakeOffBeltSoundInstancePayload.java | 17 ++---- .../s2c_payloads/StartSkyLerpingPayload.java | 17 +++--- .../SyncArtisansAtlasPayload.java | 20 +++---- .../SyncMentalPresencePayload.java | 27 ++++----- .../TypedTransmissionPayload.java | 37 +++++------- .../UpdateBlockEntityInkPayload.java | 10 ++-- .../particle/effect/ColoredTransmission.java | 7 ++- 32 files changed, 264 insertions(+), 398 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java index e3a8f848e3..53aa3ffdae 100644 --- a/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java +++ b/src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelNetwork.java @@ -304,7 +304,11 @@ public void addTransmission(PastelTransmission transmission, int travelTime) { } public int getColor() { - return ColorHelper.getRandomColor(this.uuid.hashCode()); + return getColor(this.uuid); + } + + public static int getColor(UUID uuid) { + return ColorHelper.getRandomColor(uuid.hashCode()); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java index ebe74e161e..1995a2ecf5 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.api.item.*; import de.dafuqs.spectrum.blocks.chests.*; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.registries.*; import net.fabricmc.api.*; @@ -15,55 +14,47 @@ import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record BlackHoleChestStatusUpdatePayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +import java.util.*; + +public record BlackHoleChestStatusUpdatePayload(BlockPos pos, boolean isFull, boolean canStoreExperience, + long storedExperience, + long maxStoredExperience) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("black_hole_chest_status_update"); public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - BlackHoleChestStatusUpdatePayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - BlackHoleChestStatusUpdatePayload::configuration, + BlockPos.PACKET_CODEC, BlackHoleChestStatusUpdatePayload::pos, + PacketCodecs.BOOL, BlackHoleChestStatusUpdatePayload::isFull, + PacketCodecs.BOOL, BlackHoleChestStatusUpdatePayload::canStoreExperience, + PacketCodecs.VAR_LONG, BlackHoleChestStatusUpdatePayload::storedExperience, + PacketCodecs.VAR_LONG, BlackHoleChestStatusUpdatePayload::maxStoredExperience, BlackHoleChestStatusUpdatePayload::new ); public static void sendBlackHoleChestUpdate(BlackHoleChestBlockEntity chest) { var xpStack = chest.getStack(BlackHoleChestBlockEntity.EXPERIENCE_STORAGE_PROVIDER_ITEM_SLOT); + long storedXP = 0; + long maxStoredXP = 0; - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeBlockPos(chest.getPos()); - buf.writeBoolean(chest.isFullServer()); - buf.writeBoolean(chest.canStoreExperience()); if (xpStack.getItem() instanceof ExperienceStorageItem experienceStorageItem) { - buf.writeLong(ExperienceStorageItem.getStoredExperience(xpStack)); - buf.writeLong(experienceStorageItem.getMaxStoredExperience(xpStack)); - } else { - buf.writeLong(0); - buf.writeLong(0); + storedXP = ExperienceStorageItem.getStoredExperience(xpStack); + maxStoredXP = experienceStorageItem.getMaxStoredExperience(xpStack); } for (ServerPlayerEntity player : PlayerLookup.tracking(chest)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.BLACK_HOLE_CHEST_STATUS_UPDATE, buf); + ServerPlayNetworking.send(player, new BlackHoleChestStatusUpdatePayload(chest.getPos(), chest.isFullServer(), chest.canStoreExperience(), storedXP, maxStoredXP)); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - var pos = buf.readBlockPos(); - var isFull = buf.readBoolean(); - var canStoreXP = buf.readBoolean(); - var xp = buf.readLong(); - var max = buf.readLong(); - - client.execute(() -> { - var entity = client.world.getBlockEntity(pos, SpectrumBlockEntities.BLACK_HOLE_CHEST); - + return (payload, context) -> { + context.client().execute(() -> { + Optional entity = context.client().world.getBlockEntity(payload.pos, SpectrumBlockEntities.BLACK_HOLE_CHEST); entity.ifPresent(chest -> { - chest.setFull(isFull); - chest.setHasXPStorage(canStoreXP); - chest.setXPData(xp, max); + chest.setFull(payload.isFull); + chest.setHasXPStorage(payload.canStoreExperience); + chest.setXPData(payload.storedExperience, payload.maxStoredExperience); }); }); }; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java index 32f8334404..bf54bae588 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.particle.effect.*; import net.fabricmc.api.*; @@ -14,36 +13,32 @@ import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record ColorTransmissionPayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record ColorTransmissionPayload(BlockPos pos, ColoredTransmission transmission) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("color_transmission"); public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - ColorTransmissionPayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - ColorTransmissionPayload::configuration, + BlockPos.PACKET_CODEC, ColorTransmissionPayload::pos, + ColoredTransmission.PACKET_CODEC, ColorTransmissionPayload::transmission, ColorTransmissionPayload::new ); - public static void playColorTransmissionParticle(ServerWorld world, @NotNull ColoredTransmission transfer) { - BlockPos blockPos = BlockPos.ofFloored(transfer.getOrigin()); + public static void playColorTransmissionParticle(ServerWorld world, @NotNull ColoredTransmission transmission) { + BlockPos pos = BlockPos.ofFloored(transmission.getOrigin()); PacketByteBuf buf = PacketByteBufs.create(); - ColoredTransmission.writeToBuf(buf, transfer); + ColoredTransmission.writeToBuf(buf, transmission); - for (ServerPlayerEntity player : PlayerLookup.tracking(world, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.COLOR_TRANSMISSION, buf); + for (ServerPlayerEntity player : PlayerLookup.tracking(world, pos)) { + ServerPlayNetworking.send(player, new ColorTransmissionPayload(pos, transmission)); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - ColoredTransmission transmission = ColoredTransmission.readFromBuf(buf); - client.execute(() -> { - // Everything in this lambda is running on the render thread - client.world.addImportantParticle(new ColoredTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks(), transmission.getDyeColor()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); + return (payload, context) -> { + context.client().execute(() -> { + ColoredTransmission transmission = payload.transmission; + context.client().world.addImportantParticle(new ColoredTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks(), transmission.getDyeColor()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java index f5405f0ad1..061afcfacc 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.networking.s2c_payloads; import de.dafuqs.spectrum.blocks.chests.*; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.registries.*; import net.fabricmc.api.*; @@ -14,41 +13,30 @@ import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record CompactingChestStatusUpdatePayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record CompactingChestStatusUpdatePayload(BlockPos pos, boolean hasToCraft) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("compacting_chest_status_update"); public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - CompactingChestStatusUpdatePayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - CompactingChestStatusUpdatePayload::configuration, + BlockPos.PACKET_CODEC, CompactingChestStatusUpdatePayload::pos, + PacketCodecs.BOOL, CompactingChestStatusUpdatePayload::hasToCraft, CompactingChestStatusUpdatePayload::new ); public static void sendCompactingChestStatusUpdate(CompactingChestBlockEntity chest) { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeBlockPos(chest.getPos()); - buf.writeBoolean(chest.hasToCraft()); - for (ServerPlayerEntity player : PlayerLookup.tracking(chest)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.COMPACTING_CHEST_STATUS_UPDATE, buf); + ServerPlayNetworking.send(player, new CompactingChestStatusUpdatePayload(chest.getPos(), chest.hasToCraft())); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - var pos = buf.readBlockPos(); - var hasToCraft = buf.readBoolean(); + return (payload, context) -> { + var pos = payload.pos; + var hasToCraft = payload.hasToCraft; - client.execute(() -> { - var entity = client.world.getBlockEntity(pos, SpectrumBlockEntities.COMPACTING_CHEST); - - if (entity.isEmpty()) - return; - - entity.get().shouldCraft(hasToCraft); + context.client().execute(() -> { + var entity = context.client().world.getBlockEntity(pos, SpectrumBlockEntities.COMPACTING_CHEST); + entity.ifPresent(compactingChestBlockEntity -> compactingChestBlockEntity.shouldCraft(hasToCraft)); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java index 3e09a56e8c..bbd28aee63 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.networking.s2c_payloads; import de.dafuqs.spectrum.blocks.chests.*; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.registries.*; import net.fabricmc.api.*; @@ -17,52 +16,43 @@ import java.util.*; -public record FabricationChestStatusUpdatePayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record FabricationChestStatusUpdatePayload(BlockPos pos, boolean isFull, boolean hasValidRecipes, + List stacks) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("fabrication_chest_status_update"); - public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - FabricationChestStatusUpdatePayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - FabricationChestStatusUpdatePayload::configuration, + public static final PacketCodec CODEC = PacketCodec.tuple( + BlockPos.PACKET_CODEC, FabricationChestStatusUpdatePayload::pos, + PacketCodecs.BOOL, FabricationChestStatusUpdatePayload::isFull, + PacketCodecs.BOOL, FabricationChestStatusUpdatePayload::hasValidRecipes, + ItemStack.LIST_PACKET_CODEC, FabricationChestStatusUpdatePayload::stacks, FabricationChestStatusUpdatePayload::new ); public static void sendFabricationChestStatusUpdate(FabricationChestBlockEntity chest) { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeBlockPos(chest.getPos()); - buf.writeBoolean(chest.isFullServer()); - buf.writeBoolean(chest.hasValidRecipes()); - buf.writeInt(chest.getRecipeOutputs().size()); - for (ItemStack recipeOutput : chest.getRecipeOutputs()) { - buf.writeItemStack(recipeOutput); - } + BlockPos pos = chest.getPos(); + boolean isFull = chest.isFullServer(); + boolean hasValidRecipes = chest.hasValidRecipes(); + List stacks = new ArrayList<>(); + stacks.addAll(chest.getRecipeOutputs()); for (ServerPlayerEntity player : PlayerLookup.tracking(chest)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.FABRICATION_CHEST_STATUS_UPDATE, buf); + ServerPlayNetworking.send(player, new FabricationChestStatusUpdatePayload(pos, isFull, hasValidRecipes, stacks)); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - var pos = buf.readBlockPos(); - var isFull = buf.readBoolean(); - var hasValidRecipes = buf.readBoolean(); - var outputCount = buf.readInt(); - final var cachedOutputs = new ArrayList(4); - for (int i = 0; i < outputCount; i++) { - cachedOutputs.add(buf.readItemStack()); - } + return (payload, context) -> { + var pos = payload.pos; + var isFull = payload.isFull; + var hasValidRecipes = payload.hasValidRecipes; + List outputs = payload.stacks; - client.execute(() -> { - var entity = client.world.getBlockEntity(pos, SpectrumBlockEntities.FABRICATION_CHEST); - - if (entity.isEmpty()) - return; - - entity.get().updateState(isFull, hasValidRecipes, cachedOutputs); + context.client().execute(() -> { + Optional entity = context.client().world.getBlockEntity(pos, SpectrumBlockEntities.FABRICATION_CHEST); + if (entity.isPresent()) { + entity.get().updateState(isFull, hasValidRecipes, outputs); + } }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedPayload.java index e155dd6a3b..5eaac60f39 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/InkColorSelectedPayload.java @@ -2,66 +2,45 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.api.energy.color.*; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; +import de.dafuqs.spectrum.registries.*; import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.networking.v1.*; import net.fabricmc.fabric.api.networking.v1.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.network.packet.*; +import net.minecraft.registry.entry.*; import net.minecraft.screen.*; import net.minecraft.server.network.*; -import net.minecraft.util.math.*; -import org.jetbrains.annotations.*; import java.util.*; -public record InkColorSelectedPayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record InkColorSelectedPayload(Optional> color) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("ink_color_selected"); - public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - InkColorSelectedPayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - InkColorSelectedPayload::configuration, + public static final PacketCodec CODEC = PacketCodec.tuple( + PacketCodecs.optional(PacketCodecs.registryEntry(SpectrumRegistries.INK_COLORS_KEY)), InkColorSelectedPayload::color, InkColorSelectedPayload::new ); - public static void sendInkColorSelected(@Nullable InkColor color, ServerPlayerEntity player) { - PacketByteBuf packetByteBuf = PacketByteBufs.create(); - if (color == null) { - packetByteBuf.writeBoolean(false); - } else { - packetByteBuf.writeBoolean(true); - packetByteBuf.writeIdentifier(color.getID()); - } - ServerPlayNetworking.send(player, SpectrumS2CPackets.INK_COLOR_SELECTED, packetByteBuf); - } - - @Override - public Id getId() { - return ID; + public static void sendInkColorSelected(Optional> color, ServerPlayerEntity player) { + ServerPlayNetworking.send(player, new InkColorSelectedPayload(color)); } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - ScreenHandler screenHandler = client.player.currentScreenHandler; + return (payload, context) -> { + ScreenHandler screenHandler = context.player().currentScreenHandler; if (screenHandler instanceof InkColorSelectedPacketReceiver inkColorSelectedPacketReceiver) { - boolean isSelection = buf.readBoolean(); - - InkColor color = null; - if (isSelection) { - Optional optionalInkColor = InkColor.ofId(buf.readIdentifier()); - if (optionalInkColor.isPresent()) { - color = optionalInkColor.get(); - } - } - inkColorSelectedPacketReceiver.onInkColorSelectedPacket(color); + inkColorSelectedPacketReceiver.onInkColorSelectedPacket(payload.color); } }; } + @Override + public Id getId() { + return ID; + } + } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneBlastPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneBlastPayload.java index 42513a6d88..0aaea17ca4 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneBlastPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneBlastPayload.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.spells.*; import net.fabricmc.api.*; @@ -15,53 +14,36 @@ import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record MoonstoneBlastPayload(BlockPos pos, ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record MoonstoneBlastPayload(double x, double y, double z, float power, float knockbackMod, + Vec3d playerVelocity) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("moonstone_blast"); public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - MoonstoneBlastPayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - MoonstoneBlastPayload::configuration, + PacketCodecs.DOUBLE, MoonstoneBlastPayload::x, + PacketCodecs.DOUBLE, MoonstoneBlastPayload::y, + PacketCodecs.DOUBLE, MoonstoneBlastPayload::z, + PacketCodecs.FLOAT, MoonstoneBlastPayload::power, + PacketCodecs.FLOAT, MoonstoneBlastPayload::knockbackMod, + Vec3d.PACKET_CODEC, MoonstoneBlastPayload::playerVelocity, MoonstoneBlastPayload::new ); public static void sendMoonstoneBlast(ServerWorld serverWorld, MoonstoneStrike moonstoneStrike) { - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(serverWorld, BlockPos.ofFloored(moonstoneStrike.getX(), moonstoneStrike.getY(), moonstoneStrike.getZ()))) { Vec3d playerVelocity = moonstoneStrike.getAffectedPlayers().getOrDefault(player, Vec3d.ZERO); - - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeDouble(moonstoneStrike.getX()); - buf.writeDouble(moonstoneStrike.getY()); - buf.writeDouble(moonstoneStrike.getZ()); - buf.writeFloat(moonstoneStrike.getPower()); - buf.writeFloat(moonstoneStrike.getKnockbackMod()); - buf.writeDouble(playerVelocity.x); - buf.writeDouble(playerVelocity.y); - buf.writeDouble(playerVelocity.z); - - ServerPlayNetworking.send(player, SpectrumS2CPackets.MOONSTONE_BLAST, buf); + ServerPlayNetworking.send(player, new MoonstoneBlastPayload(moonstoneStrike.getX(), moonstoneStrike.getY(), moonstoneStrike.getZ(), moonstoneStrike.getPower(), moonstoneStrike.getKnockbackMod(), playerVelocity)); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - PlayerEntity player = client.player; - - double x = buf.readDouble(); - double y = buf.readDouble(); - double z = buf.readDouble(); - float power = buf.readFloat(); - float knockback = buf.readFloat(); - double playerVelocityX = buf.readDouble(); - double playerVelocityY = buf.readDouble(); - double playerVelocityZ = buf.readDouble(); + return (payload, context) -> { + PlayerEntity player = context.player(); + Vec3d playerVelocity = payload.playerVelocity(); - client.execute(() -> { - MoonstoneStrike.create(client.world, null, null, x, y, z, power, knockback); - player.setVelocity(player.getVelocity().add(playerVelocityX, playerVelocityY, playerVelocityZ)); + context.client().execute(() -> { + MoonstoneStrike.create(context.client().world, null, null, payload.x, payload.y, payload.z, payload.power, payload.knockbackMod); + player.setVelocity(player.getVelocity().add(playerVelocity.x, playerVelocity.y, playerVelocity.z)); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java index 62a299390c..9f8787d2cc 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java @@ -23,7 +23,6 @@ public record ParticleSpawnerConfigurationS2CPayload(BlockPos pos, public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { return (packet, context) -> context.client().execute(() -> { - // Everything in this lambda is running on the render thread if (context.client().world.getBlockEntity(packet.pos()) instanceof ParticleSpawnerBlockEntity particleSpawnerBlockEntity) { particleSpawnerBlockEntity.applySettings(packet.configuration()); } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNodeStatusUpdatePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNodeStatusUpdatePayload.java index e85278f8c9..481b5118e8 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNodeStatusUpdatePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelNodeStatusUpdatePayload.java @@ -43,18 +43,13 @@ public static void sendPastelNodeStatusUpdate(List nodes, } for (ServerPlayerEntity player : PlayerLookup.tracking(nodes.get(0))) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PASTEL_NODE_STATUS_UPDATE, buf); + ServerPlayNetworking.send(player, new PastelNodeStatusUpdatePayload()); } } - @Override - public Id getId() { - return ID; - } - @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { var trigger = buf.readBoolean(); var nodeCount = buf.readInt(); var positions = new ArrayList(nodeCount); @@ -65,9 +60,9 @@ public Id getId() { times.add(buf.readInt()); } - client.execute(() -> { + context.client().execute(() -> { for (int index = 0; index < positions.size(); index++) { - var entity = client.world.getBlockEntity(positions.get(index)); + var entity = context.client().world.getBlockEntity(positions.get(index)); if (!(entity instanceof PastelNodeBlockEntity node)) continue; @@ -80,4 +75,9 @@ public Id getId() { }); }; } + + @Override + public Id getId() { + return ID; + } } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java index 8f89d65f9c..ffaaed06a9 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PastelTransmissionPayload.java @@ -1,8 +1,6 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.blocks.pastel_network.network.*; -import de.dafuqs.spectrum.helpers.ColorHelper; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.particle.effect.*; import net.fabricmc.api.*; @@ -16,43 +14,34 @@ import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -import java.util.*; - -public record PastelTransmissionPayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record PastelTransmissionPayload(int networkColor, int travelTime, + PastelTransmission transmission) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("pastel_transmission"); - public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - PastelTransmissionPayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - PastelTransmissionPayload::configuration, + public static final PacketCodec CODEC = PacketCodec.tuple( + PacketCodecs.INTEGER, PastelTransmissionPayload::networkColor, + PacketCodecs.INTEGER, PastelTransmissionPayload::travelTime, + PastelTransmission.PACKET_CODEC, PastelTransmissionPayload::transmission, PastelTransmissionPayload::new ); + // TODO: we should probably also send the transmission to players that track the destination pos public static void sendPastelTransmissionParticle(ServerPastelNetwork network, int travelTime, @NotNull PastelTransmission transmission) { - PacketByteBuf buf = PacketByteBufs.create(); - buf.writeUuid(network.getUUID()); - buf.writeInt(travelTime); - PastelTransmission.write(buf, transmission); - for (ServerPlayerEntity player : PlayerLookup.tracking((ServerWorld) network.getWorld(), transmission.getStartPos())) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PASTEL_TRANSMISSION, buf); + ServerPlayNetworking.send(player, new PastelTransmissionPayload(travelTime, network.getColor(), transmission)); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - UUID networkUUID = buf.readUuid(); - int travelTime = buf.readInt(); - PastelTransmission transmission = PastelTransmission.fromPacket(buf); + return (payload, context) -> { + int color = payload.networkColor(); + int travelTime = payload.travelTime(); + PastelTransmission transmission = payload.transmission; BlockPos spawnPos = transmission.getStartPos(); - int color = ColorHelper.getRandomColor(networkUUID.hashCode()); - client.execute(() -> { - // Everything in this lambda is running on the render thread - client.world.addParticle(new PastelTransmissionParticleEffect(transmission.getNodePositions(), transmission.getVariant().toStack(), travelTime, color), spawnPos.getX() + 0.5, spawnPos.getY() + 0.5, spawnPos.getZ() + 0.5, 0, 0, 0); + context.client().execute(() -> { + context.client().world.addParticle(new PastelTransmissionParticleEffect(transmission.getNodePositions(), transmission.getVariant().toStack(), travelTime, color), spawnPos.getX() + 0.5, spawnPos.getY() + 0.5, spawnPos.getZ() + 0.5, 0, 0, 0); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayAscensionAppliedEffectsPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayAscensionAppliedEffectsPayload.java index 6453be934e..1ee931b7fc 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayAscensionAppliedEffectsPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayAscensionAppliedEffectsPayload.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.registries.*; import de.dafuqs.spectrum.sound.*; @@ -12,31 +11,22 @@ import net.minecraft.network.packet.*; import net.minecraft.server.network.*; import net.minecraft.sound.*; -import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record PlayAscensionAppliedEffectsPayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record PlayAscensionAppliedEffectsPayload() implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("play_ascension_applied_effects"); - public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - PlayAscensionAppliedEffectsPayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - PlayAscensionAppliedEffectsPayload::configuration, - PlayAscensionAppliedEffectsPayload::new - ); + public static final PacketCodec CODEC = PacketCodec.tuple(PlayAscensionAppliedEffectsPayload::new); public static void playAscensionAppliedEffects(ServerPlayerEntity player) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_ASCENSION_APPLIED_EFFECTS, PacketByteBufs.create()); + ServerPlayNetworking.send(player, new PlayAscensionAppliedEffectsPayload()); } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - // Everything in this lambda is running on the render thread - client.world.playSound(null, client.player.getBlockPos(), SpectrumSoundEvents.FADING_PLACED, SoundCategory.PLAYERS, 1.0F, 1.0F); - client.getSoundManager().play(new DivinitySoundInstance()); + return (payload, context) -> { + context.client().world.playSound(null, context.client().player.getBlockPos(), SpectrumSoundEvents.FADING_PLACED, SoundCategory.PLAYERS, 1.0F, 1.0F); + context.client().getSoundManager().play(new DivinitySoundInstance()); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayBlockBoundSoundInstancePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayBlockBoundSoundInstancePayload.java index 365a68fcd3..f4f838057c 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayBlockBoundSoundInstancePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayBlockBoundSoundInstancePayload.java @@ -38,9 +38,8 @@ public static void sendPlayBlockBoundSoundInstance(SoundEvent soundEvent, @NotNu buf.writeBlockPos(blockPos); buf.writeInt(maxDurationTicks); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(world, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_BLOCK_BOUND_SOUND_INSTANCE, buf); + ServerPlayNetworking.send(player, new PlayBlockBoundSoundInstancePayload()); } } @@ -51,22 +50,21 @@ public static void sendCancelBlockBoundSoundInstance(@NotNull ServerWorld world, buf.writeBlockPos(blockPos); buf.writeInt(1); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(world, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_BLOCK_BOUND_SOUND_INSTANCE, buf); + ServerPlayNetworking.send(player, new PlayBlockBoundSoundInstancePayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { if (SpectrumCommon.CONFIG.BlockSoundVolume > 0) { Identifier soundEffectIdentifier = buf.readIdentifier(); Identifier blockIdentifier = buf.readIdentifier(); BlockPos blockPos = buf.readBlockPos(); int maxDurationTicks = buf.readInt(); - client.execute(() -> { + context.client().execute(() -> { if (soundEffectIdentifier.getPath().equals("stop")) { CraftingBlockSoundInstance.stopPlayingOnPos(blockPos); } else { diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayDivinityAppliedEffectsPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayDivinityAppliedEffectsPayload.java index 8cecd747f1..be7ab9f5d6 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayDivinityAppliedEffectsPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayDivinityAppliedEffectsPayload.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.particle.*; @@ -8,37 +7,30 @@ import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.networking.v1.*; import net.fabricmc.fabric.api.networking.v1.*; +import net.minecraft.client.*; import net.minecraft.entity.player.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.network.packet.*; import net.minecraft.server.network.*; import net.minecraft.sound.*; -import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record PlayDivinityAppliedEffectsPayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record PlayDivinityAppliedEffectsPayload() implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("play_divinity_applied_effects"); - public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - PlayDivinityAppliedEffectsPayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - PlayDivinityAppliedEffectsPayload::configuration, - PlayDivinityAppliedEffectsPayload::new - ); + public static final PacketCodec CODEC = PacketCodec.tuple(PlayDivinityAppliedEffectsPayload::new); public static void playDivinityAppliedEffects(ServerPlayerEntity player) { PacketByteBuf buf = PacketByteBufs.create(); buf.writeInt(player.getId()); - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_DIVINITY_APPLIED_EFFECTS, buf); + ServerPlayNetworking.send(player, new PlayDivinityAppliedEffectsPayload()); } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - // Everything in this lambda is running on the render thread + return (payload, context) -> { + MinecraftClient client = context.client(); PlayerEntity player = client.player; client.particleManager.addEmitter(player, SpectrumParticleTypes.DIVINITY, 30); client.gameRenderer.showFloatingItem(SpectrumItems.DIVINATION_HEART.getDefaultStack()); diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java index 88b618ebc0..d34471a2dd 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingFinishedParticlePayload.java @@ -46,25 +46,24 @@ public static void sendPlayFusionCraftingFinishedParticles(World world, BlockPos } else { buf.writeInt(DyeColor.LIGHT_GRAY.ordinal()); } - -// Iterate over all players tracking a position in the world and send the packet to each player + for (ServerPlayerEntity player : PlayerLookup.tracking((ServerWorld) world, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_FUSION_CRAFTING_FINISHED_PARTICLE_PACKET_ID, buf); + ServerPlayNetworking.send(player, new PlayFusionCraftingFinishedParticlePayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { BlockPos position = buf.readBlockPos(); DyeColor dyeColor = DyeColor.values()[buf.readInt()]; - client.execute(() -> { + context.client().execute(() -> { Vec3d sourcePos = new Vec3d(position.getX() + 0.5, position.getY() + 1, position.getZ() + 0.5); Vector3f color = ColorHelper.getRGBVec(dyeColor); float velocityModifier = 0.25F; for (Vec3d velocity : VectorPattern.SIXTEEN.getVectors()) { - client.world.addParticle( + context.client().world.addParticle( new DynamicParticleEffect(SpectrumParticleTypes.WHITE_CRAFTING, 0.0F, color, 1.5F, 40, false, true), sourcePos.x, sourcePos.y, sourcePos.z, velocity.x * velocityModifier, 0.0F, velocity.z * velocityModifier diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingInProgressParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingInProgressParticlePayload.java index 127dd9b419..0692290d04 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingInProgressParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayFusionCraftingInProgressParticlePayload.java @@ -32,18 +32,17 @@ public static void sendPlayFusionCraftingInProgressParticles(World world, BlockP PacketByteBuf buf = PacketByteBufs.create(); buf.writeBlockPos(blockPos); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking((ServerWorld) world, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_FUSION_CRAFTING_IN_PROGRESS_PARTICLE_PACKET_ID, buf); + ServerPlayNetworking.send(player, new PlayFusionCraftingInProgressParticlePayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { BlockPos position = buf.readBlockPos(); - client.execute(() -> { - BlockEntity blockEntity = client.world.getBlockEntity(position); + context.client().execute(() -> { + BlockEntity blockEntity = context.client().world.getBlockEntity(position); if (blockEntity instanceof FusionShrineBlockEntity fusionShrineBlockEntity) { fusionShrineBlockEntity.spawnCraftingParticles(); } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayMemoryManifestingParticlesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayMemoryManifestingParticlesPayload.java index 313fb1a58c..4c2ebe14cf 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayMemoryManifestingParticlesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayMemoryManifestingParticlesPayload.java @@ -17,7 +17,6 @@ import net.minecraft.server.world.*; import net.minecraft.util.*; import net.minecraft.util.math.*; -import net.minecraft.util.math.random.*; import net.minecraft.util.math.random.Random; import org.jetbrains.annotations.*; import org.joml.*; @@ -43,22 +42,21 @@ public static void playMemoryManifestingParticles(ServerWorld serverWorld, @NotN buf.writeInt(eggColors.getRight()); buf.writeInt(amount); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(serverWorld, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_MEMORY_MANIFESTING_PARTICLES, buf); + ServerPlayNetworking.send(player, new PlayMemoryManifestingParticlesPayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { BlockPos position = buf.readBlockPos(); int color1 = buf.readInt(); int color2 = buf.readInt(); int amount = buf.readInt(); - client.execute(() -> { - Random random = client.world.random; + context.client().execute(() -> { + Random random = context.client().world.random; Vector3f colorVec1 = de.dafuqs.spectrum.helpers.ColorHelper.colorIntToVec(color1); Vector3f colorVec2 = ColorHelper.colorIntToVec(color2); @@ -67,14 +65,14 @@ public static void playMemoryManifestingParticles(ServerWorld serverWorld, @NotN int randomLifetime = 30 + random.nextInt(20); // color1 - client.world.addParticle( + context.client().world.addParticle( new DynamicParticleEffect(SpectrumParticleTypes.WHITE_CRAFTING, 0.5F, colorVec1, 1.0F, randomLifetime, false, true), position.getX() + 0.5, position.getY() + 0.5, position.getZ(), 0.15 - random.nextFloat() * 0.3, random.nextFloat() * 0.15 + 0.1, 0.15 - random.nextFloat() * 0.3 ); // color2 - client.world.addParticle( + context.client().world.addParticle( new DynamicParticleEffect(SpectrumParticleTypes.WHITE_CRAFTING, 0.5F, colorVec2, 1.0F, randomLifetime, false, true), position.getX() + 0.5, position.getY(), position.getZ() + 0.5, 0.15 - random.nextFloat() * 0.3, random.nextFloat() * 0.15 + 0.1, 0.15 - random.nextFloat() * 0.3 diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java index 58b919a7a3..0420158adf 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleAroundBlockSidesPayload.java @@ -45,18 +45,17 @@ public static void playParticleAroundBlockSides(ServerWorld world, int quantity, buf.writeInt(side.ordinal()); } - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(world, BlockPos.ofFloored(position))) { if (!sendCheck.test(player)) continue; - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_PARTICLE_AROUND_BLOCK_SIDES, buf); + ServerPlayNetworking.send(player, new PlayParticleAroundBlockSidesPayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { int quantity = buf.readInt(); Vec3d position = new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble()); Vec3d velocity = new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble()); @@ -68,7 +67,7 @@ public static ClientPlayNetworking.PlayPayloadHandler { + context.client().execute(() -> { ParticleHelper.playParticleAroundBlockSides(client.world, particleEffect, position, sides, quantity, velocity); }); } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithExactVelocityPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithExactVelocityPayload.java index 7aa421498b..58bb4a748f 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithExactVelocityPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithExactVelocityPayload.java @@ -5,6 +5,7 @@ import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.networking.v1.*; import net.fabricmc.fabric.api.networking.v1.*; +import net.minecraft.client.world.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.network.packet.*; @@ -56,15 +57,14 @@ public static void playParticleWithExactVelocity(ServerWorld world, @NotNull Vec buf.writeDouble(velocity.y); buf.writeDouble(velocity.z); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(world, BlockPos.ofFloored(position))) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_PARTICLE_WITH_EXACT_VELOCITY, buf); + ServerPlayNetworking.send(player, new PlayParticleWithExactVelocityPayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { double posX = buf.readDouble(); double posY = buf.readDouble(); double posZ = buf.readDouble(); @@ -74,12 +74,11 @@ public static void playParticleWithExactVelocity(ServerWorld world, @NotNull Vec double velocityY = buf.readDouble(); double velocityZ = buf.readDouble(); if (particleType instanceof ParticleEffect particleEffect) { - client.execute(() -> { - // Everything in this lambda is running on the render thread + context.client().execute(() -> { + ClientWorld world = context.client().world; + for (int i = 0; i < amount; i++) { - client.world.addParticle(particleEffect, - posX, posY, posZ, - velocityX, velocityY, velocityZ); + world.addParticle(particleEffect, posX, posY, posZ, velocityX, velocityY, velocityZ); } }); } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithPatternAndVelocityPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithPatternAndVelocityPayload.java index 882818445e..31316650e5 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithPatternAndVelocityPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithPatternAndVelocityPayload.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.networking.s2c_payloads; import de.dafuqs.spectrum.blocks.particle_spawner.*; -import de.dafuqs.spectrum.helpers.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.particle.*; import net.fabricmc.api.*; @@ -46,25 +45,24 @@ public static void playParticleWithPatternAndVelocity(@Nullable PlayerEntity not buf.writeInt(pattern.ordinal()); buf.writeDouble(velocity); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(world, BlockPos.ofFloored(position))) { if (!player.equals(notThisPlayerEntity)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_PARTICLE_PACKET_WITH_PATTERN_AND_VELOCITY_ID, buf); + ServerPlayNetworking.send(player, new PlayParticleWithPatternAndVelocityPayload()); } } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { Vec3d position = new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble()); ParticleType particleType = Registries.PARTICLE_TYPE.get(buf.readIdentifier()); VectorPattern pattern = VectorPattern.values()[buf.readInt()]; double velocity = buf.readDouble(); if (particleType instanceof ParticleEffect particleEffect) { - client.execute(() -> { - // Everything in this lambda is running on the render thread - ParticleHelper.playParticleWithPatternAndVelocityClient(client.world, position, particleEffect, pattern, velocity); + context.client().execute(() -> { + context.client().world. + ParticleHelper.playParticleWithPatternAndVelocityClient(client.world, position, particleEffect, pattern, velocity); }); } }; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithRandomOffsetAndVelocityPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithRandomOffsetAndVelocityPayload.java index 6128b6a961..e45c508975 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithRandomOffsetAndVelocityPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayParticleWithRandomOffsetAndVelocityPayload.java @@ -5,6 +5,7 @@ import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.networking.v1.*; import net.fabricmc.fabric.api.networking.v1.*; +import net.minecraft.client.world.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.network.packet.*; @@ -49,25 +50,23 @@ public static void playParticleWithRandomOffsetAndVelocity(ServerWorld world, Ve buf.writeDouble(randomVelocity.y); buf.writeDouble(randomVelocity.z); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(world, BlockPos.ofFloored(position))) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_PARTICLE_WITH_RANDOM_OFFSET_AND_VELOCITY, buf); + ServerPlayNetworking.send(player, new PlayParticleWithRandomOffsetAndVelocityPayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { Vec3d position = new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble()); ParticleType particleType = Registries.PARTICLE_TYPE.get(buf.readIdentifier()); int amount = buf.readInt(); Vec3d randomOffset = new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble()); Vec3d randomVelocity = new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble()); if (particleType instanceof ParticleEffect particleEffect) { - client.execute(() -> { - // Everything in this lambda is running on the render thread - - Random random = client.world.random; + context.client().execute(() -> { + ClientWorld world = context.client().world; + Random random = world.getRandom(); for (int i = 0; i < amount; i++) { double randomOffsetX = randomOffset.x - random.nextDouble() * randomOffset.x * 2; @@ -77,7 +76,7 @@ public static void playParticleWithRandomOffsetAndVelocity(ServerWorld world, Ve double randomVelocityY = randomVelocity.y - random.nextDouble() * randomVelocity.y * 2; double randomVelocityZ = randomVelocity.z - random.nextDouble() * randomVelocity.z * 2; - client.world.addParticle(particleEffect, + world.addParticle(particleEffect, position.getX() + randomOffsetX, position.getY() + randomOffsetY, position.getZ() + randomOffsetZ, randomVelocityX, randomVelocityY, randomVelocityZ); } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalCraftingFinishedParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalCraftingFinishedParticlePayload.java index 046928b338..5dc9782f8e 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalCraftingFinishedParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalCraftingFinishedParticlePayload.java @@ -5,6 +5,7 @@ import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.networking.v1.*; import net.fabricmc.fabric.api.networking.v1.*; +import net.minecraft.client.world.*; import net.minecraft.item.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; @@ -38,22 +39,22 @@ public static void sendPlayPedestalCraftingFinishedParticle(World world, BlockPo PacketByteBuf buf = PacketByteBufs.create(); buf.writeBlockPos(blockPos); buf.writeItemStack(itemStack); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking((ServerWorld) world, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_PEDESTAL_CRAFTING_FINISHED_PARTICLE_PACKET_ID, buf); + ServerPlayNetworking.send(player, new PlayPedestalCraftingFinishedParticlePayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { BlockPos position = buf.readBlockPos(); // the block pos of the pedestal ItemStack itemStack = buf.readItemStack(); // the item stack that was crafted - client.execute(() -> { - Random random = client.world.random; - // Everything in this lambda is running on the render thread + context.client().execute(() -> { + ClientWorld world = context.client().world; + Random random = world.random; + for (int i = 0; i < 10; i++) { - client.world.addParticle(new ItemStackParticleEffect(ParticleTypes.ITEM, itemStack), position.getX() + 0.5, position.getY() + 1, position.getZ() + 0.5, 0.15 - random.nextFloat() * 0.3, random.nextFloat() * 0.15 + 0.1, 0.15 - random.nextFloat() * 0.3); + context.client().world.addParticle(new ItemStackParticleEffect(ParticleTypes.ITEM, itemStack), position.getX() + 0.5, position.getY() + 1, position.getZ() + 0.5, 0.15 - random.nextFloat() * 0.3, random.nextFloat() * 0.15 + 0.1, 0.15 - random.nextFloat() * 0.3); } }); }; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalStartCraftingParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalStartCraftingParticlePayload.java index 881aac4d45..653f8f5432 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalStartCraftingParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalStartCraftingParticlePayload.java @@ -29,20 +29,19 @@ public record PlayPedestalStartCraftingParticlePayload(BlockPos pos, public static void spawnPedestalStartCraftingParticles(PedestalBlockEntity pedestalBlockEntity) { PacketByteBuf buf = PacketByteBufs.create(); buf.writeBlockPos(pedestalBlockEntity.getPos()); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking((ServerWorld) pedestalBlockEntity.getWorld(), pedestalBlockEntity.getPos())) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_PEDESTAL_START_CRAFTING_PARTICLE_PACKET_ID, buf); + ServerPlayNetworking.send(player, new PlayPedestalStartCraftingParticlePayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { BlockPos position = buf.readBlockPos(); // the block pos of the pedestal - client.execute(() -> { - // Everything in this lambda is running on the render thread - PedestalBlockEntity.spawnCraftingStartParticles(client.world, position); + context.client().execute(() -> { + context.client().world. + PedestalBlockEntity.spawnCraftingStartParticles(client.world, position); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalUpgradedParticlePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalUpgradedParticlePayload.java index c5205ab522..de1be04c10 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalUpgradedParticlePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPedestalUpgradedParticlePayload.java @@ -2,7 +2,6 @@ import de.dafuqs.spectrum.api.block.*; import de.dafuqs.spectrum.blocks.particle_spawner.*; -import de.dafuqs.spectrum.blocks.pedestal.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.recipe.pedestal.*; import net.fabricmc.api.*; @@ -33,20 +32,19 @@ public static void spawnPedestalUpgradeParticles(World world, BlockPos blockPos, PacketByteBuf buf = PacketByteBufs.create(); buf.writeBlockPos(blockPos); buf.writeInt(newPedestalVariant.getRecipeTier().ordinal()); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking((ServerWorld) world, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_PEDESTAL_UPGRADED_PARTICLE_PACKET_ID, buf); + ServerPlayNetworking.send(player, new PlayPedestalUpgradedParticlePayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { BlockPos position = buf.readBlockPos(); // the block pos of the pedestal PedestalRecipeTier tier = PedestalRecipeTier.values()[buf.readInt()]; // the item stack that was crafted - client.execute(() -> { - // Everything in this lambda is running on the render thread - PedestalBlock.spawnUpgradeParticleEffectsForTier(position, tier); + context.client().execute(() -> { + context.client().world. + PedestalBlock.spawnUpgradeParticleEffectsForTier(position, tier); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java index 2a99311dfc..2f724d1621 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayPresentOpeningParticlesPayload.java @@ -1,7 +1,6 @@ package de.dafuqs.spectrum.networking.s2c_payloads; import de.dafuqs.spectrum.blocks.particle_spawner.*; -import de.dafuqs.spectrum.blocks.present.*; import de.dafuqs.spectrum.networking.*; import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.networking.v1.*; @@ -38,15 +37,14 @@ public static void playPresentOpeningParticles(ServerWorld serverWorld, BlockPos packetByteBuf.writeByte(color.getValue()); } - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking(serverWorld, pos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_PRESENT_OPENING_PARTICLES, packetByteBuf); + ServerPlayNetworking.send(player, new PlayPresentOpeningParticlesPayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { BlockPos pos = buf.readBlockPos(); int colorCount = buf.readInt(); @@ -57,9 +55,9 @@ public static void playPresentOpeningParticles(ServerWorld serverWorld, BlockPos colors.put(dyeColor, amount); } - client.execute(() -> { - // Everything in this lambda is running on the render thread - PresentBlock.spawnParticles(client.world, pos, colors); + context.client().execute(() -> { + context.client().world. + PresentBlock.spawnParticles(client.world, pos, colors); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayShootingStarParticlesPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayShootingStarParticlesPayload.java index 997027b72d..d581bb87f0 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayShootingStarParticlesPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayShootingStarParticlesPayload.java @@ -33,23 +33,22 @@ public static void sendPlayShootingStarParticles(@NotNull ShootingStarEntity sho buf.writeDouble(shootingStarEntity.getPos().getY()); buf.writeDouble(shootingStarEntity.getPos().getZ()); buf.writeInt(shootingStarEntity.getShootingStarType().ordinal()); - // Iterate over all players tracking a position in the world and send the packet to each player for (ServerPlayerEntity player : PlayerLookup.tracking((ServerWorld) shootingStarEntity.getWorld(), shootingStarEntity.getBlockPos())) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.PLAY_SHOOTING_STAR_PARTICLES, buf); + ServerPlayNetworking.send(player, new PlayShootingStarParticlesPayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { double x = buf.readDouble(); double y = buf.readDouble(); double z = buf.readDouble(); ShootingStar.Type shootingStarType = ShootingStar.Type.getType(buf.readInt()); - client.execute(() -> { - // Everything in this lambda is running on the render thread - ShootingStarEntity.playHitParticles(client.world, x, y, z, shootingStarType, 25); + context.client().execute(() -> { + context.client().world. + ShootingStarEntity.playHitParticles(client.world, x, y, z, shootingStarType, 25); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayTakeOffBeltSoundInstancePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayTakeOffBeltSoundInstancePayload.java index ee09d5f5d1..257e0dae72 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayTakeOffBeltSoundInstancePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/PlayTakeOffBeltSoundInstancePayload.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.sound.*; import net.fabricmc.api.*; @@ -10,29 +9,21 @@ import net.minecraft.network.codec.*; import net.minecraft.network.packet.*; import net.minecraft.server.network.*; -import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record PlayTakeOffBeltSoundInstancePayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record PlayTakeOffBeltSoundInstancePayload() implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("play_take_off_belt_sound_instance"); - public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - PlayTakeOffBeltSoundInstancePayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - PlayTakeOffBeltSoundInstancePayload::configuration, - PlayTakeOffBeltSoundInstancePayload::new - ); + public static final PacketCodec CODEC = PacketCodec.tuple(PlayTakeOffBeltSoundInstancePayload::new); public static void sendPlayTakeOffBeltSoundInstance(ServerPlayerEntity playerEntity) { PacketByteBuf buf = PacketByteBufs.create(); - ServerPlayNetworking.send(playerEntity, SpectrumS2CPackets.PLAY_TAKE_OFF_BELT_SOUND_INSTANCE, buf); + ServerPlayNetworking.send(playerEntity, new PlayTakeOffBeltSoundInstancePayload()); } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> client.execute(TakeOffBeltSoundInstance::startSoundInstance); + return (playTakeOffBeltSoundInstancePayload, context) -> context.client().execute(TakeOffBeltSoundInstance::startSoundInstance); } @Override diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/StartSkyLerpingPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/StartSkyLerpingPayload.java index 382c026182..255da7c5ee 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/StartSkyLerpingPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/StartSkyLerpingPayload.java @@ -1,6 +1,5 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.*; import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.registries.*; @@ -36,22 +35,22 @@ public static void startSkyLerping(@NotNull ServerWorld serverWorld, int additio buf.writeLong(timeOfDay + additionalTime); for (ServerPlayerEntity player : serverWorld.getPlayers()) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.START_SKY_LERPING, buf); + ServerPlayNetworking.send(player, new StartSkyLerpingPayload()); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - DimensionType dimensionType = client.world.getDimension(); + return (payload, context) -> { + DimensionType dimensionType = context.client().world.getDimension(); long sourceTime = buf.readLong(); long targetTime = buf.readLong(); - client.execute(() -> { - // Everything in this lambda is running on the render thread - SpectrumClient.skyLerper.trigger(dimensionType, sourceTime, client.getRenderTickCounter().getTickDelta(false), targetTime); - if (client.world.isSkyVisible(client.player.getBlockPos())) { - client.world.playSound(null, client.player.getBlockPos(), SpectrumSoundEvents.CELESTIAL_POCKET_WATCH_FLY_BY, SoundCategory.NEUTRAL, 0.15F, 1.0F); + context.client().execute(() -> { + context.client().world. + SpectrumClient.skyLerper.trigger(dimensionType, sourceTime, client.getRenderTickCounter().getTickDelta(false), targetTime); + if (context.client().world.isSkyVisible(client.player.getBlockPos())) { + context.client().world.playSound(null, client.player.getBlockPos(), SpectrumSoundEvents.CELESTIAL_POCKET_WATCH_FLY_BY, SoundCategory.NEUTRAL, 0.15F, 1.0F); } }); diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncArtisansAtlasPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncArtisansAtlasPayload.java index 92bc6b00ab..bd58bf1a6c 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncArtisansAtlasPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncArtisansAtlasPayload.java @@ -27,31 +27,26 @@ public record SyncArtisansAtlasPayload(BlockPos pos, SyncArtisansAtlasPayload::new ); - @Override - public Id getId() { - return ID; - } - @Environment(EnvType.CLIENT) public static ClientPlayNetworking.PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { String targetIdStr = buf.readString(); Identifier targetId = targetIdStr.length() == 0 ? null : Identifier.of(targetIdStr); MapUpdateS2CPacket packet = new MapUpdateS2CPacket(buf); - client.execute(() -> { + context.client().execute(() -> { NetworkThreadUtils.forceMainThread(packet, handler, client); MapRenderer mapRenderer = client.gameRenderer.getMapRenderer(); int i = packet.getId(); String string = FilledMapItem.getMapName(i); if (client.world != null) { - MapState mapState = client.world.getMapState(string); + MapState mapState = context.client().world.getMapState(string); if (mapState == null) { - mapState = new ArtisansAtlasState(packet.getScale(), packet.isLocked(), client.world.getRegistryKey()); - client.world.putClientsideMapState(string, mapState); + mapState = new ArtisansAtlasState(packet.getScale(), packet.isLocked(), context.client().world.getRegistryKey()); + context.client().world.putClientsideMapState(string, mapState); } if (mapState instanceof ArtisansAtlasState artisansAtlasState) { @@ -64,4 +59,9 @@ public static ClientPlayNetworking.PlayPayloadHandler }; } + @Override + public Id getId() { + return ID; + } + } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java index 9d1f21c728..7fa5b15741 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/SyncMentalPresencePayload.java @@ -1,47 +1,40 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.cca.*; import de.dafuqs.spectrum.deeper_down.*; import de.dafuqs.spectrum.networking.*; import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.networking.v1.*; import net.fabricmc.fabric.api.networking.v1.*; +import net.minecraft.client.network.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.network.packet.*; import net.minecraft.server.network.*; -import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record SyncMentalPresencePayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +// TODO: Why is that a packet and not handled in the synced component instead? +public record SyncMentalPresencePayload(double value) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("sync_mental_presence"); public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - SyncMentalPresencePayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - SyncMentalPresencePayload::configuration, + PacketCodecs.DOUBLE, SyncMentalPresencePayload::value, SyncMentalPresencePayload::new ); public static void sendMentalPresenceSync(ServerPlayerEntity player, double value) { PacketByteBuf buf = PacketByteBufs.create(); buf.writeDouble(value); - ServerPlayNetworking.send(player, SpectrumS2CPackets.SYNC_MENTAL_PRESENCE, buf); + ServerPlayNetworking.send(player, new SyncMentalPresencePayload(value)); } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - double value = buf.readDouble(); - - client.execute(() -> { - if (client.player != null) { - MiscPlayerDataComponent.get(client.player).setLastSyncedSleepPotency(value); - DarknessEffects.markForEffectUpdate(); - } + return (payload, context) -> { + context.client().execute(() -> { + ClientPlayerEntity player = context.player(); + MiscPlayerDataComponent.get(player).setLastSyncedSleepPotency(payload.value); + DarknessEffects.markForEffectUpdate(); }); }; } diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/TypedTransmissionPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/TypedTransmissionPayload.java index 254a3cab79..12120d722e 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/TypedTransmissionPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/TypedTransmissionPayload.java @@ -1,11 +1,11 @@ package de.dafuqs.spectrum.networking.s2c_payloads; -import de.dafuqs.spectrum.blocks.particle_spawner.*; import de.dafuqs.spectrum.networking.*; import de.dafuqs.spectrum.particle.effect.*; import net.fabricmc.api.*; import net.fabricmc.fabric.api.client.networking.v1.*; import net.fabricmc.fabric.api.networking.v1.*; +import net.minecraft.client.world.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.network.packet.*; @@ -14,47 +14,40 @@ import net.minecraft.util.math.*; import org.jetbrains.annotations.*; -public record TypedTransmissionPayload(BlockPos pos, - ParticleSpawnerConfiguration configuration) implements CustomPayload { +public record TypedTransmissionPayload(TypedTransmission transmission) implements CustomPayload { public static final Id ID = SpectrumC2SPackets.makeId("typed_transmission"); public static final PacketCodec CODEC = PacketCodec.tuple( - BlockPos.PACKET_CODEC, - TypedTransmissionPayload::pos, - ParticleSpawnerConfiguration.PACKET_CODEC, - TypedTransmissionPayload::configuration, + TypedTransmission.PACKET_CODEC, TypedTransmissionPayload::transmission, TypedTransmissionPayload::new ); public static void playTransmissionParticle(ServerWorld world, @NotNull TypedTransmission transmission) { - BlockPos blockPos = BlockPos.ofFloored(transmission.getOrigin()); + BlockPos pos = BlockPos.ofFloored(transmission.getOrigin()); - PacketByteBuf buf = PacketByteBufs.create(); - TypedTransmission.writeToBuf(buf, transmission); - - for (ServerPlayerEntity player : PlayerLookup.tracking(world, blockPos)) { - ServerPlayNetworking.send(player, SpectrumS2CPackets.TYPED_TRANSMISSION, buf); + for (ServerPlayerEntity player : PlayerLookup.tracking(world, pos)) { + ServerPlayNetworking.send(player, new TypedTransmissionPayload(transmission)); } } @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { - TypedTransmission transmission = TypedTransmission.readFromBuf(buf); + return (payload, context) -> { + TypedTransmission transmission = payload.transmission(); - client.execute(() -> { - // Everything in this lambda is running on the render thread + context.client().execute(() -> { + ClientWorld world = context.client().world; switch (transmission.getVariant()) { case BLOCK_POS -> - client.world.addImportantParticle(new BlockPosEventTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); + world.addImportantParticle(new BlockPosEventTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); case ITEM -> - client.world.addImportantParticle(new ItemTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); + world.addImportantParticle(new ItemTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); case EXPERIENCE -> - client.world.addImportantParticle(new ExperienceTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); + world.addImportantParticle(new ExperienceTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); case HUMMINGSTONE -> - client.world.addImportantParticle(new HummingstoneTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); + world.addImportantParticle(new HummingstoneTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); case REDSTONE -> - client.world.addImportantParticle(new WirelessRedstoneTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); + world.addImportantParticle(new WirelessRedstoneTransmissionParticleEffect(transmission.getDestination(), transmission.getArrivalInTicks()), true, transmission.getOrigin().getX(), transmission.getOrigin().getY(), transmission.getOrigin().getZ(), 0.0D, 0.0D, 0.0D); } }); }; diff --git a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java index 973d8b64e7..294e8624b2 100644 --- a/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java +++ b/src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/UpdateBlockEntityInkPayload.java @@ -8,6 +8,7 @@ import net.fabricmc.fabric.api.client.networking.v1.*; import net.fabricmc.fabric.api.networking.v1.*; import net.minecraft.block.entity.*; +import net.minecraft.client.world.*; import net.minecraft.network.*; import net.minecraft.network.codec.*; import net.minecraft.network.packet.*; @@ -47,7 +48,7 @@ public static void updateBlockEntityInk(BlockPos pos, InkStorage inkStorage, Ser @Environment(EnvType.CLIENT) public static ClientPlayNetworking.@NotNull PlayPayloadHandler getPayloadHandler() { - return (client, handler, buf, responseSender) -> { + return (payload, context) -> { BlockPos blockPos = buf.readBlockPos(); long colorTotal = buf.readLong(); @@ -60,9 +61,10 @@ public static void updateBlockEntityInk(BlockPos pos, InkStorage inkStorage, Ser } } - client.execute(() -> { - // Everything in this lambda is running on the render thread - BlockEntity blockEntity = client.world.getBlockEntity(blockPos); + context.client().execute(() -> { + ClientWorld world = context.client().world; + BlockEntity blockEntity = world.getBlockEntity(blockPos); + if (blockEntity instanceof InkStorageBlockEntity inkStorageBlockEntity) { inkStorageBlockEntity.getEnergyStorage().setEnergy(colors, colorTotal); } diff --git a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredTransmission.java b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredTransmission.java index 28691144b4..d13ffb0420 100644 --- a/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredTransmission.java +++ b/src/main/java/de/dafuqs/spectrum/particle/effect/ColoredTransmission.java @@ -9,7 +9,12 @@ public class ColoredTransmission extends SimpleTransmission { - public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group(Vec3d.CODEC.fieldOf("origin").forGetter((coloredTransmission) -> coloredTransmission.origin), PositionSource.CODEC.fieldOf("destination").forGetter((coloredTransmission) -> coloredTransmission.destination), Codec.INT.fieldOf("dye_color").forGetter((coloredTransmission) -> coloredTransmission.dyeColor.getId()), Codec.INT.fieldOf("arrival_in_ticks").forGetter((coloredTransmission) -> coloredTransmission.arrivalInTicks)).apply(instance, ColoredTransmission::new)); + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + Vec3d.CODEC.fieldOf("origin").forGetter((coloredTransmission) -> coloredTransmission.origin), + PositionSource.CODEC.fieldOf("destination").forGetter((coloredTransmission) -> coloredTransmission.destination), + Codec.INT.fieldOf("dye_color").forGetter((coloredTransmission) -> coloredTransmission.dyeColor.getId()), + Codec.INT.fieldOf("arrival_in_ticks").forGetter((coloredTransmission) -> coloredTransmission.arrivalInTicks) + ).apply(instance, ColoredTransmission::new)); protected final DyeColor dyeColor;