Skip to content

Commit b370dee

Browse files
committed
wip s2c packets
1 parent 72aa6ff commit b370dee

30 files changed

+208
-185
lines changed

src/main/java/de/dafuqs/spectrum/blocks/item_bowl/ItemBowlBlockEntity.java

+25-27
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import net.minecraft.item.*;
1717
import net.minecraft.nbt.*;
1818
import net.minecraft.particle.*;
19-
import net.minecraft.registry.RegistryWrapper;
19+
import net.minecraft.registry.*;
2020
import net.minecraft.server.world.*;
2121
import net.minecraft.sound.*;
2222
import net.minecraft.util.*;
@@ -120,37 +120,35 @@ public int decrementBowlStack(Vec3d orbTargetPos, int amount, boolean doEffects)
120120
public void spawnOrbParticles(Vec3d orbTargetPos) {
121121
ItemStack storedStack = this.getStack(0);
122122
if (!storedStack.isEmpty()) {
123-
Optional<DyeColor> optionalItemColor = ColorRegistry.ITEM_COLORS.getMapping(storedStack.getItem(), DyeColor.PURPLE);
124-
if (optionalItemColor.isPresent()) {
125-
ParticleEffect sparkleRisingParticleEffect = SpectrumParticleTypes.getSparkleRisingParticle(optionalItemColor.get());
123+
DyeColor itemColor = ColorRegistry.ITEM_COLORS.getMapping(storedStack.getItem(), DyeColor.PURPLE);
124+
ParticleEffect sparkleRisingParticleEffect = SpectrumParticleTypes.getSparkleRisingParticle(itemColor);
125+
126+
if (this.getWorld() instanceof ServerWorld serverWorld) {
127+
PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerWorld) world,
128+
new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5),
129+
sparkleRisingParticleEffect, 50,
130+
new Vec3d(0.4, 0.2, 0.4), new Vec3d(0.06, 0.16, 0.06));
126131

127-
if (this.getWorld() instanceof ServerWorld serverWorld) {
128-
PlayParticleWithRandomOffsetAndVelocityPayload.playParticleWithRandomOffsetAndVelocity((ServerWorld) world,
129-
new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5),
130-
sparkleRisingParticleEffect, 50,
131-
new Vec3d(0.4, 0.2, 0.4), new Vec3d(0.06, 0.16, 0.06));
132-
133-
ColorTransmissionPayload.playColorTransmissionParticle(serverWorld, new ColoredTransmission(new Vec3d(this.pos.getX() + 0.5D, this.pos.getY() + 1.0D, this.pos.getZ() + 0.5D), new ExactPositionSource(orbTargetPos), 20, optionalItemColor.get()));
134-
} else if (this.getWorld() instanceof ClientWorld clientWorld) {
135-
for (int i = 0; i < 50; i++) {
136-
float randomOffsetX = pos.getX() + 0.3F + world.random.nextFloat() * 0.6F;
137-
float randomOffsetY = pos.getY() + 0.3F + world.random.nextFloat() * 0.6F;
138-
float randomOffsetZ = pos.getZ() + 0.3F + world.random.nextFloat() * 0.6F;
139-
float randomVelocityX = 0.03F - world.random.nextFloat() * 0.06F;
140-
float randomVelocityY = world.random.nextFloat() * 0.16F;
141-
float randomVelocityZ = 0.03F - world.random.nextFloat() * 0.06F;
142-
143-
clientWorld.addParticle(sparkleRisingParticleEffect,
144-
randomOffsetX, randomOffsetY, randomOffsetZ,
145-
randomVelocityX, randomVelocityY, randomVelocityZ);
146-
}
132+
ColorTransmissionPayload.playColorTransmissionParticle(serverWorld, new ColoredTransmission(new Vec3d(this.pos.getX() + 0.5D, this.pos.getY() + 1.0D, this.pos.getZ() + 0.5D), new ExactPositionSource(orbTargetPos), 20, itemColor));
133+
} else if (this.getWorld() instanceof ClientWorld clientWorld) {
134+
for (int i = 0; i < 50; i++) {
135+
float randomOffsetX = pos.getX() + 0.3F + world.random.nextFloat() * 0.6F;
136+
float randomOffsetY = pos.getY() + 0.3F + world.random.nextFloat() * 0.6F;
137+
float randomOffsetZ = pos.getZ() + 0.3F + world.random.nextFloat() * 0.6F;
138+
float randomVelocityX = 0.03F - world.random.nextFloat() * 0.06F;
139+
float randomVelocityY = world.random.nextFloat() * 0.16F;
140+
float randomVelocityZ = 0.03F - world.random.nextFloat() * 0.06F;
147141

148-
ParticleEffect sphereParticleEffect = new ColoredTransmissionParticleEffect(new ExactPositionSource(orbTargetPos), 20, optionalItemColor.get());
149-
clientWorld.addParticle(sphereParticleEffect, this.pos.getX() + 0.5D, this.pos.getY() + 1.0D, this.pos.getZ() + 0.5D, (orbTargetPos.getX() - this.pos.getX()) * 0.045, 0, (orbTargetPos.getZ() - this.pos.getZ()) * 0.045);
142+
clientWorld.addParticle(sparkleRisingParticleEffect,
143+
randomOffsetX, randomOffsetY, randomOffsetZ,
144+
randomVelocityX, randomVelocityY, randomVelocityZ);
150145
}
151146

152-
world.playSound(null, this.pos, SpectrumSoundEvents.ENCHANTER_DING, SoundCategory.BLOCKS, SpectrumCommon.CONFIG.BlockSoundVolume, 0.7F + world.random.nextFloat() * 0.6F);
147+
ParticleEffect sphereParticleEffect = new ColoredTransmissionParticleEffect(new ExactPositionSource(orbTargetPos), 20, itemColor);
148+
clientWorld.addParticle(sphereParticleEffect, this.pos.getX() + 0.5D, this.pos.getY() + 1.0D, this.pos.getZ() + 0.5D, (orbTargetPos.getX() - this.pos.getX()) * 0.045, 0, (orbTargetPos.getZ() - this.pos.getZ()) * 0.045);
153149
}
150+
151+
world.playSound(null, this.pos, SpectrumSoundEvents.ENCHANTER_DING, SoundCategory.BLOCKS, SpectrumCommon.CONFIG.BlockSoundVolume, 0.7F + world.random.nextFloat() * 0.6F);
154152
}
155153
}
156154

src/main/java/de/dafuqs/spectrum/events/ExactPositionSource.java

+2-13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mojang.serialization.*;
44
import com.mojang.serialization.codecs.*;
5+
import de.dafuqs.spectrum.networking.*;
56
import io.netty.buffer.*;
67
import net.minecraft.network.codec.*;
78
import net.minecraft.util.math.*;
@@ -16,19 +17,7 @@ public class ExactPositionSource implements PositionSource {
1617
Vec3d.CODEC.fieldOf("pos").forGetter((blockPositionSource) -> blockPositionSource.pos)
1718
).apply(instance, ExactPositionSource::new));
1819

19-
public static final PacketCodec<ByteBuf, Vec3d> VEC_PACKET_CODEC = new PacketCodec<>() {
20-
public Vec3d decode(ByteBuf byteBuf) {
21-
return new Vec3d(byteBuf.readDouble(), byteBuf.readDouble(), byteBuf.readDouble());
22-
}
23-
24-
public void encode(ByteBuf byteBuf, Vec3d blockPos) {
25-
byteBuf.writeDouble(blockPos.getX());
26-
byteBuf.writeDouble(blockPos.getY());
27-
byteBuf.writeDouble(blockPos.getZ());
28-
}
29-
};
30-
31-
public static final PacketCodec<ByteBuf, ExactPositionSource> PACKET_CODEC = PacketCodec.tuple(VEC_PACKET_CODEC, (source) -> source.pos, ExactPositionSource::new);
20+
public static final PacketCodec<ByteBuf, ExactPositionSource> PACKET_CODEC = PacketCodec.tuple(SpectrumPacketCodecs.VEC_3D, (source) -> source.pos, ExactPositionSource::new);
3221

3322
final Vec3d pos;
3423

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package de.dafuqs.spectrum.networking;
2+
3+
import io.netty.buffer.*;
4+
import net.minecraft.network.codec.*;
5+
import net.minecraft.util.math.*;
6+
7+
public class SpectrumPacketCodecs {
8+
9+
public static final PacketCodec<ByteBuf, Vec3d> VEC_3D = new PacketCodec<>() {
10+
public Vec3d decode(ByteBuf byteBuf) {
11+
return new Vec3d(byteBuf.readDouble(), byteBuf.readDouble(), byteBuf.readDouble());
12+
}
13+
14+
public void encode(ByteBuf byteBuf, Vec3d blockPos) {
15+
byteBuf.writeDouble(blockPos.getX());
16+
byteBuf.writeDouble(blockPos.getY());
17+
byteBuf.writeDouble(blockPos.getZ());
18+
}
19+
};
20+
}

src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/BlackHoleChestStatusUpdatePayload.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import net.fabricmc.api.*;
88
import net.fabricmc.fabric.api.client.networking.v1.*;
99
import net.fabricmc.fabric.api.networking.v1.*;
10+
import net.minecraft.client.*;
1011
import net.minecraft.network.*;
1112
import net.minecraft.network.codec.*;
1213
import net.minecraft.network.packet.*;
@@ -16,9 +17,7 @@
1617

1718
import java.util.*;
1819

19-
public record BlackHoleChestStatusUpdatePayload(BlockPos pos, boolean isFull, boolean canStoreExperience,
20-
long storedExperience,
21-
long maxStoredExperience) implements CustomPayload {
20+
public record BlackHoleChestStatusUpdatePayload(BlockPos pos, boolean isFull, boolean canStoreExperience, long storedExperience, long maxStoredExperience) implements CustomPayload {
2221

2322
public static final Id<BlackHoleChestStatusUpdatePayload> ID = SpectrumC2SPackets.makeId("black_hole_chest_status_update");
2423
public static final PacketCodec<PacketByteBuf, BlackHoleChestStatusUpdatePayload> CODEC = PacketCodec.tuple(
@@ -49,8 +48,9 @@ public static void sendBlackHoleChestUpdate(BlackHoleChestBlockEntity chest) {
4948
@Environment(EnvType.CLIENT)
5049
public static ClientPlayNetworking.@NotNull PlayPayloadHandler<BlackHoleChestStatusUpdatePayload> getPayloadHandler() {
5150
return (payload, context) -> {
52-
context.client().execute(() -> {
53-
Optional<BlackHoleChestBlockEntity> entity = context.client().world.getBlockEntity(payload.pos, SpectrumBlockEntities.BLACK_HOLE_CHEST);
51+
MinecraftClient client = context.client();
52+
client.execute(() -> {
53+
Optional<BlackHoleChestBlockEntity> entity = client.world.getBlockEntity(payload.pos, SpectrumBlockEntities.BLACK_HOLE_CHEST);
5454
entity.ifPresent(chest -> {
5555
chest.setFull(payload.isFull);
5656
chest.setHasXPStorage(payload.canStoreExperience);

src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ColorTransmissionPayload.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.fabricmc.api.*;
66
import net.fabricmc.fabric.api.client.networking.v1.*;
77
import net.fabricmc.fabric.api.networking.v1.*;
8+
import net.minecraft.client.*;
89
import net.minecraft.network.*;
910
import net.minecraft.network.codec.*;
1011
import net.minecraft.network.packet.*;
@@ -36,9 +37,10 @@ public static void playColorTransmissionParticle(ServerWorld world, @NotNull Col
3637
@Environment(EnvType.CLIENT)
3738
public static ClientPlayNetworking.@NotNull PlayPayloadHandler<ColorTransmissionPayload> getPayloadHandler() {
3839
return (payload, context) -> {
39-
context.client().execute(() -> {
40+
MinecraftClient client = context.client();
41+
client.execute(() -> {
4042
ColoredTransmission transmission = payload.transmission;
41-
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);
43+
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);
4244
});
4345
};
4446
}

src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/CompactingChestStatusUpdatePayload.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.fabricmc.api.*;
77
import net.fabricmc.fabric.api.client.networking.v1.*;
88
import net.fabricmc.fabric.api.networking.v1.*;
9+
import net.minecraft.client.*;
910
import net.minecraft.network.*;
1011
import net.minecraft.network.codec.*;
1112
import net.minecraft.network.packet.*;
@@ -31,12 +32,10 @@ public static void sendCompactingChestStatusUpdate(CompactingChestBlockEntity ch
3132
@Environment(EnvType.CLIENT)
3233
public static ClientPlayNetworking.@NotNull PlayPayloadHandler<CompactingChestStatusUpdatePayload> getPayloadHandler() {
3334
return (payload, context) -> {
34-
var pos = payload.pos;
35-
var hasToCraft = payload.hasToCraft;
36-
37-
context.client().execute(() -> {
38-
var entity = context.client().world.getBlockEntity(pos, SpectrumBlockEntities.COMPACTING_CHEST);
39-
entity.ifPresent(compactingChestBlockEntity -> compactingChestBlockEntity.shouldCraft(hasToCraft));
35+
MinecraftClient client = context.client();
36+
client.execute(() -> {
37+
var entity = client.world.getBlockEntity(payload.pos, SpectrumBlockEntities.COMPACTING_CHEST);
38+
entity.ifPresent(compactingChestBlockEntity -> compactingChestBlockEntity.shouldCraft(payload.hasToCraft));
4039
});
4140
};
4241
}

src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/FabricationChestStatusUpdatePayload.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.fabricmc.api.*;
77
import net.fabricmc.fabric.api.client.networking.v1.*;
88
import net.fabricmc.fabric.api.networking.v1.*;
9+
import net.minecraft.client.*;
910
import net.minecraft.item.*;
1011
import net.minecraft.network.*;
1112
import net.minecraft.network.codec.*;
@@ -16,8 +17,7 @@
1617

1718
import java.util.*;
1819

19-
public record FabricationChestStatusUpdatePayload(BlockPos pos, boolean isFull, boolean hasValidRecipes,
20-
List<ItemStack> stacks) implements CustomPayload {
20+
public record FabricationChestStatusUpdatePayload(BlockPos pos, boolean isFull, boolean hasValidRecipes, List<ItemStack> stacks) implements CustomPayload {
2121

2222
public static final Id<FabricationChestStatusUpdatePayload> ID = SpectrumC2SPackets.makeId("fabrication_chest_status_update");
2323
public static final PacketCodec<RegistryByteBuf, FabricationChestStatusUpdatePayload> CODEC = PacketCodec.tuple(
@@ -32,8 +32,7 @@ public static void sendFabricationChestStatusUpdate(FabricationChestBlockEntity
3232
BlockPos pos = chest.getPos();
3333
boolean isFull = chest.isFullServer();
3434
boolean hasValidRecipes = chest.hasValidRecipes();
35-
List<ItemStack> stacks = new ArrayList<>();
36-
stacks.addAll(chest.getRecipeOutputs());
35+
List<ItemStack> stacks = new ArrayList<>(chest.getRecipeOutputs());
3736

3837
for (ServerPlayerEntity player : PlayerLookup.tracking(chest)) {
3938
ServerPlayNetworking.send(player, new FabricationChestStatusUpdatePayload(pos, isFull, hasValidRecipes, stacks));
@@ -43,13 +42,14 @@ public static void sendFabricationChestStatusUpdate(FabricationChestBlockEntity
4342
@Environment(EnvType.CLIENT)
4443
public static ClientPlayNetworking.@NotNull PlayPayloadHandler<FabricationChestStatusUpdatePayload> getPayloadHandler() {
4544
return (payload, context) -> {
45+
MinecraftClient client = context.client();
4646
var pos = payload.pos;
4747
var isFull = payload.isFull;
4848
var hasValidRecipes = payload.hasValidRecipes;
4949
List<ItemStack> outputs = payload.stacks;
5050

51-
context.client().execute(() -> {
52-
Optional<FabricationChestBlockEntity> entity = context.client().world.getBlockEntity(pos, SpectrumBlockEntities.FABRICATION_CHEST);
51+
client.execute(() -> {
52+
Optional<FabricationChestBlockEntity> entity = client.world.getBlockEntity(pos, SpectrumBlockEntities.FABRICATION_CHEST);
5353
if (entity.isPresent()) {
5454
entity.get().updateState(isFull, hasValidRecipes, outputs);
5555
}

src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/MoonstoneBlastPayload.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import net.fabricmc.api.*;
66
import net.fabricmc.fabric.api.client.networking.v1.*;
77
import net.fabricmc.fabric.api.networking.v1.*;
8+
import net.minecraft.client.*;
9+
import net.minecraft.client.world.*;
810
import net.minecraft.entity.player.*;
911
import net.minecraft.network.*;
1012
import net.minecraft.network.codec.*;
@@ -14,8 +16,7 @@
1416
import net.minecraft.util.math.*;
1517
import org.jetbrains.annotations.*;
1618

17-
public record MoonstoneBlastPayload(double x, double y, double z, float power, float knockbackMod,
18-
Vec3d playerVelocity) implements CustomPayload {
19+
public record MoonstoneBlastPayload(double x, double y, double z, float power, float knockbackMod, Vec3d playerVelocity) implements CustomPayload {
1920

2021
public static final Id<MoonstoneBlastPayload> ID = SpectrumC2SPackets.makeId("moonstone_blast");
2122
public static final PacketCodec<PacketByteBuf, MoonstoneBlastPayload> CODEC = PacketCodec.tuple(
@@ -24,7 +25,7 @@ public record MoonstoneBlastPayload(double x, double y, double z, float power, f
2425
PacketCodecs.DOUBLE, MoonstoneBlastPayload::z,
2526
PacketCodecs.FLOAT, MoonstoneBlastPayload::power,
2627
PacketCodecs.FLOAT, MoonstoneBlastPayload::knockbackMod,
27-
Vec3d.PACKET_CODEC, MoonstoneBlastPayload::playerVelocity,
28+
SpectrumPacketCodecs.VEC_3D, MoonstoneBlastPayload::playerVelocity,
2829
MoonstoneBlastPayload::new
2930
);
3031

@@ -38,11 +39,13 @@ public static void sendMoonstoneBlast(ServerWorld serverWorld, MoonstoneStrike m
3839
@Environment(EnvType.CLIENT)
3940
public static ClientPlayNetworking.@NotNull PlayPayloadHandler<MoonstoneBlastPayload> getPayloadHandler() {
4041
return (payload, context) -> {
42+
MinecraftClient client = context.client();
43+
ClientWorld world = client.world;
4144
PlayerEntity player = context.player();
4245
Vec3d playerVelocity = payload.playerVelocity();
4346

44-
context.client().execute(() -> {
45-
MoonstoneStrike.create(context.client().world, null, null, payload.x, payload.y, payload.z, payload.power, payload.knockbackMod);
47+
client.execute(() -> {
48+
MoonstoneStrike.create(world, null, null, payload.x, payload.y, payload.z, payload.power, payload.knockbackMod);
4649
player.setVelocity(player.getVelocity().add(playerVelocity.x, playerVelocity.y, playerVelocity.z));
4750
});
4851
};

src/main/java/de/dafuqs/spectrum/networking/s2c_payloads/ParticleSpawnerConfigurationS2CPayload.java

+10-7
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
import de.dafuqs.spectrum.blocks.particle_spawner.*;
44
import de.dafuqs.spectrum.networking.*;
55
import net.fabricmc.fabric.api.client.networking.v1.*;
6+
import net.minecraft.client.*;
67
import net.minecraft.network.*;
78
import net.minecraft.network.codec.*;
89
import net.minecraft.network.packet.*;
910
import net.minecraft.util.math.*;
1011
import org.jetbrains.annotations.*;
1112

12-
public record ParticleSpawnerConfigurationS2CPayload(BlockPos pos,
13-
ParticleSpawnerConfiguration configuration) implements CustomPayload {
13+
public record ParticleSpawnerConfigurationS2CPayload(BlockPos pos, ParticleSpawnerConfiguration configuration) implements CustomPayload {
1414

1515
public static final Id<ParticleSpawnerConfigurationS2CPayload> ID = SpectrumC2SPackets.makeId("change_particle_spawner_settings_client");
1616
public static final PacketCodec<PacketByteBuf, ParticleSpawnerConfigurationS2CPayload> CODEC = PacketCodec.tuple(
@@ -22,11 +22,14 @@ public record ParticleSpawnerConfigurationS2CPayload(BlockPos pos,
2222
);
2323

2424
public static ClientPlayNetworking.@NotNull PlayPayloadHandler<ParticleSpawnerConfigurationS2CPayload> getPayloadHandler() {
25-
return (packet, context) -> context.client().execute(() -> {
26-
if (context.client().world.getBlockEntity(packet.pos()) instanceof ParticleSpawnerBlockEntity particleSpawnerBlockEntity) {
27-
particleSpawnerBlockEntity.applySettings(packet.configuration());
28-
}
29-
});
25+
return (payload, context) -> {
26+
MinecraftClient client = context.client();
27+
client.execute(() -> {
28+
if (client.world.getBlockEntity(payload.pos()) instanceof ParticleSpawnerBlockEntity particleSpawnerBlockEntity) {
29+
particleSpawnerBlockEntity.applySettings(payload.configuration());
30+
}
31+
});
32+
};
3033
}
3134

3235
@Override

0 commit comments

Comments
 (0)