添加服务端同步方法,完善武器初始化方法
This commit is contained in:
parent
eaad11c7f8
commit
f2cdca4131
10 changed files with 97 additions and 18 deletions
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue