Skip to content

Commit

Permalink
packet codec fixes for all types
Browse files Browse the repository at this point in the history
  • Loading branch information
Khazoda committed Jun 20, 2024
1 parent 21e5fc5 commit 61a3572
Show file tree
Hide file tree
Showing 22 changed files with 245 additions and 380 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G
org.gradle.parallel=true

# Mod Properties
mod_version=1.1.10
mod_version=1.1.11
maven_group=com.seacroak.plushables
archives_base_name=plushables

Expand Down
53 changes: 26 additions & 27 deletions src/main/java/com/seacroak/plushables/PlushablesMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,30 @@

public class PlushablesMod implements ModInitializer {

public static final String MOD_ID = "plushables";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
public static final ItemGroup PLUSHABLES_GROUP = ItemGroupRegistry.createItemGroup();

@Override
public void onInitialize() {
Registry.register(Registries.ITEM_GROUP, GenericUtils.ID("plushables"), PLUSHABLES_GROUP);
MidnightConfig.init(MOD_ID, PlushablesConfig.class);
PlushablesNetworking.registerServersideClientJoinListener();

MainRegistry.init();
SoundRegistry.init();
/* Keep this in */
new TileRegistry();


PayloadTypeRegistry.playS2C().register(ConfigSyncPayload.ID, ConfigSyncPayload.CODEC);
PayloadTypeRegistry.playC2S().register(ParticlePayload.ID, ParticlePayload.CODEC);
PayloadTypeRegistry.playC2S().register(SoundPayload.ID, SoundPayload.CODEC);
PayloadTypeRegistry.playC2S().register(SoundPayloadPlayerless.ID, SoundPayloadPlayerless.CODEC);

PlushablesNetworking.registerGlobalSoundPacketReceiverWithPlayer();
PlushablesNetworking.registerGlobalSoundPacketReceiverWithoutPlayer();
PlushablesNetworking.registerGlobalParticlePacketReceiver();

LOGGER.info("[Plushables] Finished loading!");
}
public static final String MOD_ID = "plushables";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
public static final ItemGroup PLUSHABLES_GROUP = ItemGroupRegistry.createItemGroup();

@Override
public void onInitialize() {
Registry.register(Registries.ITEM_GROUP, GenericUtils.ID("plushables"), PLUSHABLES_GROUP);
MidnightConfig.init(MOD_ID, PlushablesConfig.class);

MainRegistry.init();
SoundRegistry.init();
/* Keep this in */
new TileRegistry();

PlushablesNetworking.registerServersideClientJoinListener();
PayloadTypeRegistry.playS2C().register(ConfigSyncPayload.ID, ConfigSyncPayload.CODEC);
PayloadTypeRegistry.playS2C().register(ParticlePayload.ID, ParticlePayload.CODEC);
PayloadTypeRegistry.playS2C().register(SoundPayload.ID, SoundPayload.CODEC);
PayloadTypeRegistry.playS2C().register(SoundPayloadPlayerless.ID, SoundPayloadPlayerless.CODEC);

// PlushablesNetworking.registerGlobalSoundPacketReceiverWithPlayer();
// PlushablesNetworking.registerGlobalSoundPacketReceiverWithoutPlayer();
// PlushablesNetworking.registerGlobalParticlePacketReceiver();

LOGGER.info("[Plushables] Finished loading!");
}
}
192 changes: 93 additions & 99 deletions src/main/java/com/seacroak/plushables/PlushablesModClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,119 +12,113 @@
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.sound.SoundEvent;
import net.minecraft.text.ClickEvent;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Position;

public final class PlushablesModClient implements ClientModInitializer {
public static boolean onServer = false;
public static boolean onServer = false;

@Override
@Environment(EnvType.CLIENT)
public void onInitializeClient() {
PayloadTypeRegistry.playC2S().register(ConfigSyncPayload.ID, ConfigSyncPayload.CODEC);
PayloadTypeRegistry.playS2C().register(ParticlePayload.ID, ParticlePayload.CODEC);
PayloadTypeRegistry.playS2C().register(SoundPayload.ID, SoundPayload.CODEC);
PayloadTypeRegistry.playS2C().register(SoundPayloadPlayerless.ID, SoundPayloadPlayerless.CODEC);
EntityRendererRegistry.initClient();
@Override
@Environment(EnvType.CLIENT)
public void onInitializeClient() {
PayloadTypeRegistry.playC2S().register(ConfigSyncPayload.ID, ConfigSyncPayload.CODEC);
PayloadTypeRegistry.playC2S().register(ParticlePayload.ID, ParticlePayload.CODEC);
PayloadTypeRegistry.playC2S().register(SoundPayload.ID, SoundPayload.CODEC);
PayloadTypeRegistry.playC2S().register(SoundPayloadPlayerless.ID, SoundPayloadPlayerless.CODEC);
EntityRendererRegistry.initClient();

/* Functional Transparency*/
/* Blocks */
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BASKET_BLOCK, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BUILDER_BLOCK, RenderLayer.getCutout());
/* Functional Transparency*/
/* Blocks */
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BASKET_BLOCK, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BUILDER_BLOCK, RenderLayer.getCutout());

/* Simple Plushables */
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.PIG_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.TRUFFLES_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.WHELPLING_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.RAPTOR_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BIG_TATER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BIG_IRRITATER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.OTTER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.SHRUMP_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.WHALE_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.GOLDFISH_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.TRATER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.FROGE_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.MAMMOTH_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.TIGER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BLAHAJ_PLUSHABLE, RenderLayer.getCutout());
/* Simple Plushables */
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.PIG_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.TRUFFLES_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.WHELPLING_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.RAPTOR_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BIG_TATER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BIG_IRRITATER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.OTTER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.SHRUMP_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.WHALE_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.GOLDFISH_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.TRATER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.FROGE_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.MAMMOTH_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.TIGER_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.BLAHAJ_PLUSHABLE, RenderLayer.getCutout());

/* Complex Plushables */
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.RUPERT_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.OWL_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.STATUETTE_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.CLUCKY_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.DRAGON_PLUSHABLE, RenderLayer.getCutout());
/* Complex Plushables */
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.RUPERT_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.OWL_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.STATUETTE_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.CLUCKY_PLUSHABLE, RenderLayer.getCutout());
BlockRenderLayerMap.INSTANCE.putBlock(MainRegistry.DRAGON_PLUSHABLE, RenderLayer.getCutout());

/* Clientside Commands */
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess)
-> dispatcher.register(ClientCommandManager.literal("plushables")
.executes(context -> {
context.getSource().sendFeedback(Text.translatable("command.plushables.root"));
return 1;
}
)
.then(ClientCommandManager.literal("wiki")
.executes(context -> {
context.getSource().sendFeedback(Text.translatable("command.plushables.wiki").setStyle(Style.EMPTY.withColor(Formatting.BLUE).withUnderline(true).withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://plushables.khazoda.com"))));
return 1;
})
)
)
);
/* Clientside Commands */
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess)
-> dispatcher.register(ClientCommandManager.literal("plushables")
.executes(context -> {
context.getSource().sendFeedback(Text.translatable("command.plushables.root"));
return 1;
}
)
.then(ClientCommandManager.literal("wiki")
.executes(context -> {
context.getSource().sendFeedback(Text.translatable("command.plushables.wiki").setStyle(Style.EMPTY.withColor(Formatting.BLUE).withUnderline(true).withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://plushables.khazoda.com"))));
return 1;
})
)
)
);

/* Config Sync Networking Packet Client Receipt */
ClientPlayNetworking.registerGlobalReceiver(ConfigSyncPayload.ID, (payload, context) -> {
if (context.client().world == null) return;
context.client().execute(() -> {
PlushablesNetworking.priorityConfig(payload.enableBasket(), payload.allowAllBlockItems());
});
});
/* Config Sync Networking Packet Client Receipt */
ClientPlayNetworking.registerGlobalReceiver(ConfigSyncPayload.ID, (payload, context) -> {
if (context.client() == null) return;
context.client().execute(() -> {
PlushablesNetworking.priorityConfig(payload.enableBasket(), payload.allowAllBlockItems());
});
});

/* Sound Event Networking Packet Client Receipt */
ClientPlayNetworking.registerGlobalReceiver(SoundPayload.ID, (payload, context) -> {
SoundEvent decodedSoundEvent = PacketDecoder.decodeSoundEvent(payload.soundIdentifier());
if (context.client() == null) return;

assert context.client().player != null;
if (payload.playerUUID() == context.client().player.getUuid())
return;
context.client().execute(() -> {
if (context.client().world == null)
return;
PlushablesNetworking.playSoundOnClient(decodedSoundEvent, context.client().world, BlockPos.ofFloored(payload.pos()), 1f, payload.pitch());
});
});
/* Sound Event Networking Packet Client Receipt */
ClientPlayNetworking.registerGlobalReceiver(SoundPayload.ID, (payload, context) -> {
if (context.client() == null) return;

/* Sound Event Networking Packet Client Receipt */
ClientPlayNetworking.registerGlobalReceiver(SoundPayloadPlayerless.ID, (payload, context) -> {
SoundEvent decodedSoundEvent = PacketDecoder.decodeSoundEvent(payload.soundIdentifier());
if (context.client() == null) return;
context.client().execute(() -> {
if (context.client().world == null)
return;
PlushablesNetworking.playSoundOnClient(decodedSoundEvent, context.client().world, BlockPos.ofFloored((Position) payload.pos()), 1f, payload.pitch());
});
});
assert context.client().player != null;
if (payload.playerUUID() == context.client().player.getUuid())
return;
context.client().execute(() -> {
if (context.client().world == null)
return;
PlushablesNetworking.playSoundOnClient(payload.soundEvent(), context.client().world, payload.pos(), 1f, payload.pitch());
});
});

/* Particle Networking Packet Client Receipt */
ClientPlayNetworking.registerGlobalReceiver(ParticlePayload.ID, (payload, context) -> {
ParticleEffect decodedParticles = PacketDecoder.decodeParticle(payload.particleIdentifier());
if (context.client() == null) return;
assert context.client().player != null;
if (payload.playerUUID() == context.client().player.getUuid())
return;
context.client().execute(() -> {
if (context.client().world == null)
return;
PlushablesNetworking.spawnParticlesOnClient(decodedParticles, context.client().world, BlockPos.ofFloored(payload.pos()), payload.particleCount(), payload.offset(), payload.spread());
});
});
}
/* Sound Event Networking Packet Client Receipt */
ClientPlayNetworking.registerGlobalReceiver(SoundPayloadPlayerless.ID, (payload, context) -> {
if (context.client() == null) return;
context.client().execute(() -> {
if (context.client().world == null)
return;
PlushablesNetworking.playSoundOnClient(payload.soundEvent(), context.client().world, payload.pos(), 1f, payload.pitch());
});
});

/* Particle Networking Packet Client Receipt */
ClientPlayNetworking.registerGlobalReceiver(ParticlePayload.ID, (payload, context) -> {
if (context.client() == null) return;
assert context.client().player != null;
if (payload.playerUUID() == context.client().player.getUuid())
return;
context.client().execute(() -> {
if (context.client().world == null)
return;
PlushablesNetworking.spawnParticlesOnClient(payload.particle(), context.client().world, payload.pos(), payload.particleCount(), payload.offset(), payload.spread());
});
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt
/* Serverside */
if (!player.canModifyBlocks()) return ActionResult.CONSUME;
if (world instanceof ServerWorld serverWorld) {
SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player, pos, SoundRegistry.PLUSHABLE_POP, 1f));
SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player, pos, SoundEvents.BLOCK_WOOL_HIT, 1f));
ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(player, pos, "minecraft:poof", 5, new Vec3d(0, 0, 0), 0.05f));
ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(player, pos, "minecraft:glow", 5, new Vec3d(0, 0, 0), 0.05f));
SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player.getUuid(), pos, SoundRegistry.PLUSHABLE_POP, 1f));
SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player.getUuid(), pos, SoundEvents.BLOCK_WOOL_HIT, 1f));
ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(player.getUuid(), pos, ParticleTypes.POOF, 5, new Vec3d(0, 0, 0), 0.05f));
ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(player.getUuid(), pos, ParticleTypes.POOF, 5, new Vec3d(0, 0, 0), 0.05f));

ItemScatterer.spawn(world, pos, DefaultedList.ofSize(1, new ItemStack(this)));
world.updateComparators(pos, this);
Expand Down Expand Up @@ -96,7 +96,7 @@ private void updateNeighbors(BlockState state, World world, BlockPos pos) {
/* Override these two methods to send specific sound and particle packets */
/* Every sound/particle used needs to be mirrored to each method */
protected ActionResult serverSendEffectPackets(ServerWorld serverWorld, PlayerEntity player, BlockPos pos) {
// SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(playerUUID, pos, SoundRegistry.BUILDER_DING, 1f));
// SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player.getUuid()UUID, pos, SoundRegistry.BUILDER_DING, 1f));
// ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(playerUUID, pos, "minecraft:poof", 10, new Vec3d(0, 0.5, 0), 0f));
return ActionResult.CONSUME;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEnt
if (!player.canModifyBlocks()) return ActionResult.CONSUME;
/* Serverside */
if (world instanceof ServerWorld serverWorld) {
SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player, pos, SoundRegistry.PLUSHABLE_POP, 1f));
SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player, pos, SoundEvents.BLOCK_WOOL_HIT, 1f));
ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(player.getUuid(), pos.toCenterPos(), "minecraft:poof", 5, new Vec3d(0, 0, 0), 0.05f));
ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(player.getUuid(), pos.toCenterPos(), "minecraft:glow", 5, new Vec3d(0, 0, 0), 0.05f));
SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player.getUuid(), pos, SoundRegistry.PLUSHABLE_POP, 1f));
SoundPayload.sendPlayerPacketToClients(serverWorld, new SoundPayload(player.getUuid(), pos, SoundEvents.BLOCK_WOOL_HIT, 1f));
ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(player.getUuid(), pos, ParticleTypes.POOF, 5, new Vec3d(0, 0, 0), 0.05f));
ParticlePayload.sendParticlePacketToClients(serverWorld, new ParticlePayload(player.getUuid(), pos, ParticleTypes.POOF, 5, new Vec3d(0, 0, 0), 0.05f));

ItemScatterer.spawn(world, pos, DefaultedList.ofSize(1, new ItemStack(this)));
world.updateComparators(pos, this);
Expand Down
Loading

0 comments on commit 61a3572

Please sign in to comment.