diff --git a/src/main/java/net/mcreator/target/TargetMod.java b/src/main/java/net/mcreator/target/TargetMod.java index 9068c1eea..63ffd55d9 100644 --- a/src/main/java/net/mcreator/target/TargetMod.java +++ b/src/main/java/net/mcreator/target/TargetMod.java @@ -2,6 +2,7 @@ package net.mcreator.target; import net.mcreator.target.init.*; import net.mcreator.target.network.DoubleJumpMessage; +import net.mcreator.target.network.GunsDataMessage; import net.mcreator.target.network.ZoomMessage; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; @@ -12,14 +13,12 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.network.NetworkDirection; import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.function.BiConsumer; import java.util.function.Function; @@ -57,6 +56,11 @@ public class TargetMod { messageID++; } + public static void addNetworkMessage(Class messageType, BiConsumer encoder, Function decoder, BiConsumer> messageConsumer, Optional direction) { + PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer, direction); + messageID++; + } + private static final Collection> workQueue = new ConcurrentLinkedQueue<>(); public static void queueServerWork(int tick, Runnable action) { @@ -80,6 +84,6 @@ public class TargetMod { public void onCommonSetup(final FMLCommonSetupEvent event) { addNetworkMessage(ZoomMessage.class, ZoomMessage::buffer, ZoomMessage::new, ZoomMessage::handler); addNetworkMessage(DoubleJumpMessage.class, DoubleJumpMessage::buffer, DoubleJumpMessage::new, DoubleJumpMessage::handler); - + addNetworkMessage(GunsDataMessage.class, GunsDataMessage::encode, GunsDataMessage::decode, GunsDataMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); } } diff --git a/src/main/java/net/mcreator/target/item/gun/AK47Item.java b/src/main/java/net/mcreator/target/item/gun/AK47Item.java index 49f711d61..87c94baad 100644 --- a/src/main/java/net/mcreator/target/item/gun/AK47Item.java +++ b/src/main/java/net/mcreator/target/item/gun/AK47Item.java @@ -7,6 +7,7 @@ import net.mcreator.target.client.renderer.item.AK47ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.procedures.AK47WuPinZaiBeiBaoZhongShiMeiKeFaShengProcedure; +import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.TooltipTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; @@ -169,8 +170,7 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem { public static ItemStack getGunInstance() { ItemStack stack = new ItemStack(TargetModItems.AK_47.get()); - //GunsTool.initGun(stack, TargetModItems.AK_47.getId().getPath()); - stack.getOrCreateTag().putDouble("ammo", stack.getOrCreateTag().getDouble("mag")); + GunsTool.initCreativeGun(stack, TargetModItems.AK_47.getId().getPath()); return stack; } diff --git a/src/main/java/net/mcreator/target/item/gun/Aa12Item.java b/src/main/java/net/mcreator/target/item/gun/Aa12Item.java index 3df5cf283..016abf645 100644 --- a/src/main/java/net/mcreator/target/item/gun/Aa12Item.java +++ b/src/main/java/net/mcreator/target/item/gun/Aa12Item.java @@ -7,6 +7,7 @@ import net.mcreator.target.client.renderer.item.Aa12ItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.procedures.Aa12WuPinZaiBeiBaoZhongShiMeiKeFaShengProcedure; +import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.RarityTool; import net.mcreator.target.tools.TooltipTool; import net.minecraft.client.Minecraft; @@ -174,8 +175,7 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem { public static ItemStack getGunInstance() { ItemStack stack = new ItemStack(TargetModItems.AA_12.get()); - //GunsTool.initGun(stack, TargetModItems.AA_12.getId().getPath()); - stack.getOrCreateTag().putDouble("ammo", stack.getOrCreateTag().getDouble("mag")); + GunsTool.initCreativeGun(stack, TargetModItems.AA_12.getId().getPath()); return stack; } diff --git a/src/main/java/net/mcreator/target/item/gun/Abekiri.java b/src/main/java/net/mcreator/target/item/gun/Abekiri.java index 80b958ad2..c74783b83 100644 --- a/src/main/java/net/mcreator/target/item/gun/Abekiri.java +++ b/src/main/java/net/mcreator/target/item/gun/Abekiri.java @@ -7,6 +7,7 @@ import net.mcreator.target.client.renderer.item.AbekiriItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.procedures.AbekiriWuPinZaiBeiBaoZhongShiMeiKeFaShengProcedure; +import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.TooltipTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; @@ -160,8 +161,7 @@ public class Abekiri extends GunItem implements GeoItem, AnimatedItem { public static ItemStack getGunInstance() { ItemStack stack = new ItemStack(TargetModItems.ABEKIRI.get()); - //GunsTool.initGun(stack, TargetModItems.ABEKIRI.getId().getPath()); - stack.getOrCreateTag().putDouble("ammo", stack.getOrCreateTag().getDouble("mag")); + GunsTool.initCreativeGun(stack, TargetModItems.ABEKIRI.getId().getPath()); return stack; } diff --git a/src/main/java/net/mcreator/target/item/gun/BocekItem.java b/src/main/java/net/mcreator/target/item/gun/BocekItem.java index d8776c2f4..179b67ef7 100644 --- a/src/main/java/net/mcreator/target/item/gun/BocekItem.java +++ b/src/main/java/net/mcreator/target/item/gun/BocekItem.java @@ -6,6 +6,7 @@ import net.mcreator.target.client.renderer.item.BocekItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.procedures.BocekreloadProcedure; +import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.RarityTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; @@ -165,8 +166,7 @@ public class BocekItem extends GunItem implements GeoItem, AnimatedItem { public static ItemStack getGunInstance() { ItemStack stack = new ItemStack(TargetModItems.BOCEK.get()); - //GunsTool.initGun(stack, TargetModItems.BOCEK.getId().getPath()); - stack.getOrCreateTag().putDouble("ammo", stack.getOrCreateTag().getDouble("mag")); + GunsTool.initCreativeGun(stack, TargetModItems.BOCEK.getId().getPath()); return stack; } diff --git a/src/main/java/net/mcreator/target/item/gun/Devotion.java b/src/main/java/net/mcreator/target/item/gun/Devotion.java index 5390777fb..a22f74653 100644 --- a/src/main/java/net/mcreator/target/item/gun/Devotion.java +++ b/src/main/java/net/mcreator/target/item/gun/Devotion.java @@ -6,6 +6,7 @@ import net.mcreator.target.client.renderer.item.DevotionItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.procedures.DevotionWuPinZaiBeiBaoZhongShiMeiKeFaShengProcedure; +import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.TooltipTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; @@ -159,8 +160,7 @@ public class Devotion extends GunItem implements GeoItem, AnimatedItem { public static ItemStack getGunInstance() { ItemStack stack = new ItemStack(TargetModItems.DEVOTION.get()); - //GunsTool.initGun(stack, TargetModItems.DEVOTION.getId().getPath()); - stack.getOrCreateTag().putDouble("ammo", stack.getOrCreateTag().getDouble("mag")); + GunsTool.initCreativeGun(stack, TargetModItems.DEVOTION.getId().getPath()); return stack; } diff --git a/src/main/java/net/mcreator/target/item/gun/Trachelium.java b/src/main/java/net/mcreator/target/item/gun/Trachelium.java index 1caa8721c..954f77fdf 100644 --- a/src/main/java/net/mcreator/target/item/gun/Trachelium.java +++ b/src/main/java/net/mcreator/target/item/gun/Trachelium.java @@ -7,6 +7,7 @@ import net.mcreator.target.client.renderer.item.TracheliumItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.item.AnimatedItem; import net.mcreator.target.procedures.ReloadingProcedure; +import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.RarityTool; import net.mcreator.target.tools.TooltipTool; import net.minecraft.ChatFormatting; @@ -165,8 +166,7 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem { public static ItemStack getGunInstance() { ItemStack stack = new ItemStack(TargetModItems.TRACHELIUM.get()); - //GunsTool.initGun(stack, TargetModItems.TRACHELIUM.getId().getPath()); - stack.getOrCreateTag().putDouble("ammo", stack.getOrCreateTag().getDouble("mag")); + GunsTool.initCreativeGun(stack, TargetModItems.TRACHELIUM.getId().getPath()); return stack; } diff --git a/src/main/java/net/mcreator/target/network/ClientPacketHandler.java b/src/main/java/net/mcreator/target/network/ClientPacketHandler.java new file mode 100644 index 000000000..9adac4069 --- /dev/null +++ b/src/main/java/net/mcreator/target/network/ClientPacketHandler.java @@ -0,0 +1,16 @@ +package net.mcreator.target.network; + +import net.mcreator.target.tools.GunsTool; +import net.minecraftforge.fml.LogicalSide; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class ClientPacketHandler { + + public static void handleGunsDataMessage(GunsDataMessage message, Supplier ctx) { + if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) { + GunsTool.gunsData = message.gunsData; + } + } +} diff --git a/src/main/java/net/mcreator/target/network/GunsDataMessage.java b/src/main/java/net/mcreator/target/network/GunsDataMessage.java new file mode 100644 index 000000000..462e08eac --- /dev/null +++ b/src/main/java/net/mcreator/target/network/GunsDataMessage.java @@ -0,0 +1,36 @@ +package net.mcreator.target.network; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.network.NetworkEvent; + +import java.util.HashMap; +import java.util.function.Supplier; + +public class GunsDataMessage { + public final HashMap> gunsData; + + public GunsDataMessage(HashMap> gunsData) { + this.gunsData = gunsData; + } + + public static void encode(GunsDataMessage message, FriendlyByteBuf buffer) { + buffer.writeMap(message.gunsData, FriendlyByteBuf::writeUtf, + (k, v) -> buffer.writeMap(v, FriendlyByteBuf::writeUtf, FriendlyByteBuf::writeDouble)); + } + + public static GunsDataMessage decode(FriendlyByteBuf buffer) { + return new GunsDataMessage( + new HashMap<>( + buffer.readMap(FriendlyByteBuf::readUtf, k -> k.readMap(HashMap::new, FriendlyByteBuf::readUtf, FriendlyByteBuf::readDouble)) + )); + } + + public static void handler(GunsDataMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientPacketHandler.handleGunsDataMessage(message, ctx))); + ctx.get().setPacketHandled(true); + } + + +} diff --git a/src/main/java/net/mcreator/target/tools/GunsTool.java b/src/main/java/net/mcreator/target/tools/GunsTool.java index 1a89e1c19..f4784e902 100644 --- a/src/main/java/net/mcreator/target/tools/GunsTool.java +++ b/src/main/java/net/mcreator/target/tools/GunsTool.java @@ -1,16 +1,24 @@ package net.mcreator.target.tools; import com.google.gson.stream.JsonReader; +import net.mcreator.target.TargetMod; +import net.mcreator.target.network.GunsDataMessage; import net.mcreator.target.network.TargetModVariables; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.network.PacketDistributor; import java.io.InputStreamReader; import java.util.HashMap; +@Mod.EventBusSubscriber(modid = TargetMod.MODID) public class GunsTool { - public static final HashMap> gunsData = new HashMap<>(); + public static HashMap> gunsData = new HashMap<>(); public static void initJsonData(Level level) { var manager = level.getServer().getResourceManager(); @@ -40,6 +48,13 @@ public class GunsTool { gunsData.get(location).forEach((k, v) -> stack.getOrCreateTag().putDouble(k, v)); } + public static void initCreativeGun(ItemStack stack, String location) { + if (gunsData != null && gunsData.get(location) != null) { + gunsData.get(location).forEach((k, v) -> stack.getOrCreateTag().putDouble(k, v)); + stack.getOrCreateTag().putDouble("ammo", stack.getOrCreateTag().getDouble("mag")); + } + } + public static void pvpModeCheck(ItemStack stack, Level level) { if (!TargetModVariables.MapVariables.get(level).pvpmode) { if (stack.getOrCreateTag().getDouble("level") >= 10) { @@ -51,4 +66,12 @@ public class GunsTool { stack.getOrCreateTag().putDouble("damageadd", 1); } } + + @SubscribeEvent + public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) { + if (event.getEntity() instanceof ServerPlayer player) { + GunsTool.initJsonData(player.serverLevel()); + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new GunsDataMessage(GunsTool.gunsData)); + } + } }