From 2b2829c7445cac9a2a5bf21908c3a7f3def55f54 Mon Sep 17 00:00:00 2001 From: tartaric_acid Date: Thu, 19 Oct 2023 17:36:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A3=B0=E9=9F=B3=E7=B3=BB=E7=BB=9F=E7=9A=84?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/sound/CustomSoundLoader.java | 2 +- .../client/sound/data/SoundCache.java | 6 ++- .../client/sound/pojo/SoundPackInfo.java | 6 +++ .../network/NetworkHandler.java | 2 + .../message/SetMaidSoundIdMessage.java | 45 +++++++++++++++++++ 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/github/tartaricacid/touhoulittlemaid/network/message/SetMaidSoundIdMessage.java diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/CustomSoundLoader.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/CustomSoundLoader.java index 51194c08f..9d2b48fe6 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/CustomSoundLoader.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/CustomSoundLoader.java @@ -34,10 +34,10 @@ import static com.github.tartaricacid.touhoulittlemaid.TouhouLittleMaid.LOGGER; public class CustomSoundLoader { + public static final Map CACHE = Maps.newHashMap(); private static final Pattern FILENAME_REG = Pattern.compile("^\\d+\\.ogg$"); private static final Marker MARKER = MarkerManager.getMarker("CustomSoundLoader"); private static final String JSON_FILE_NAME = "maid_sound.json"; - private static final Map CACHE = Maps.newHashMap(); public static void clear() { CACHE.clear(); diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/data/SoundCache.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/data/SoundCache.java index 4b0484357..36a0677bb 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/data/SoundCache.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/data/SoundCache.java @@ -25,9 +25,13 @@ public SoundPackInfo getInfo() { public SoundBuffer getBuffer(ResourceLocation soundEvent) { List soundBuffers = buffers.get(soundEvent); - if (soundBuffers != null && soundBuffers.size() > 0) { + if (soundBuffers != null && !soundBuffers.isEmpty()) { return soundBuffers.get(RANDOM.nextInt(soundBuffers.size())); } return null; } + + public Map> getBuffers() { + return buffers; + } } diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/pojo/SoundPackInfo.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/pojo/SoundPackInfo.java index b32b3a2dd..d91233e20 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/pojo/SoundPackInfo.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/sound/pojo/SoundPackInfo.java @@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName; import net.minecraft.resources.ResourceLocation; +import javax.annotation.Nullable; import java.util.Collections; import java.util.List; @@ -29,6 +30,7 @@ public class SoundPackInfo { @SerializedName("url") private String url; + @Nullable public String getDate() { return date; } @@ -41,18 +43,22 @@ public List getAuthor() { return author; } + @Nullable public String getDescription() { return description; } + @Nullable public String getVersion() { return version; } + @Nullable public ResourceLocation getIcon() { return icon; } + @Nullable public String getUrl() { return url; } diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/network/NetworkHandler.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/network/NetworkHandler.java index e8930e0c4..a55a79d4e 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/network/NetworkHandler.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/network/NetworkHandler.java @@ -68,6 +68,8 @@ public static void init() { Optional.of(NetworkDirection.PLAY_TO_CLIENT)); CHANNEL.registerMessage(21, PlayMaidSoundMessage.class, PlayMaidSoundMessage::encode, PlayMaidSoundMessage::decode, PlayMaidSoundMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); + CHANNEL.registerMessage(22, SetMaidSoundIdMessage.class, SetMaidSoundIdMessage::encode, SetMaidSoundIdMessage::decode, SetMaidSoundIdMessage::handle, + Optional.of(NetworkDirection.PLAY_TO_SERVER)); } public static void sendToClientPlayer(Object message, Player player) { diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/network/message/SetMaidSoundIdMessage.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/network/message/SetMaidSoundIdMessage.java new file mode 100644 index 000000000..05bc1f2d6 --- /dev/null +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/network/message/SetMaidSoundIdMessage.java @@ -0,0 +1,45 @@ +package com.github.tartaricacid.touhoulittlemaid.network.message; + +import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class SetMaidSoundIdMessage { + private final int entityId; + private final String soundId; + + public SetMaidSoundIdMessage(int entityId, String soundId) { + this.entityId = entityId; + this.soundId = soundId; + } + + public static void encode(SetMaidSoundIdMessage message, FriendlyByteBuf buf) { + buf.writeInt(message.entityId); + buf.writeUtf(message.soundId); + } + + public static SetMaidSoundIdMessage decode(FriendlyByteBuf buf) { + return new SetMaidSoundIdMessage(buf.readInt(), buf.readUtf()); + } + + public static void handle(SetMaidSoundIdMessage message, Supplier contextSupplier) { + NetworkEvent.Context context = contextSupplier.get(); + if (context.getDirection().getReceptionSide().isServer()) { + context.enqueueWork(() -> { + ServerPlayer sender = context.getSender(); + if (sender == null) { + return; + } + Entity entity = sender.level.getEntity(message.entityId); + if (entity instanceof EntityMaid maid && maid.isOwnedBy(sender)) { + maid.setSoundPackId(message.soundId); + } + }); + } + context.setPacketHandled(true); + } +}