添加服务端同步方法,完善武器初始化方法

This commit is contained in:
17146 2024-05-10 14:32:43 +08:00
parent eaad11c7f8
commit f2cdca4131
10 changed files with 97 additions and 18 deletions

View file

@ -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 <T> void addNetworkMessage(Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, BiConsumer<T, Supplier<NetworkEvent.Context>> messageConsumer, Optional<NetworkDirection> direction) {
PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer, direction);
messageID++;
}
private static final Collection<AbstractMap.SimpleEntry<Runnable, Integer>> 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));
}
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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<NetworkEvent.Context> ctx) {
if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) {
GunsTool.gunsData = message.gunsData;
}
}
}

View file

@ -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<String, HashMap<String, Double>> gunsData;
public GunsDataMessage(HashMap<String, HashMap<String, Double>> 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<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientPacketHandler.handleGunsDataMessage(message, ctx)));
ctx.get().setPacketHandled(true);
}
}

View file

@ -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<String, HashMap<String, Double>> gunsData = new HashMap<>();
public static HashMap<String, HashMap<String, Double>> 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));
}
}
}