99 lines
3.6 KiB
Java
99 lines
3.6 KiB
Java
package com.atsuishio.superbwarfare.tools;
|
||
|
||
import com.atsuishio.superbwarfare.Mod;
|
||
import com.atsuishio.superbwarfare.item.gun.data.DefaultGunData;
|
||
import com.atsuishio.superbwarfare.network.message.receive.GunsDataMessage;
|
||
import com.google.gson.Gson;
|
||
import net.minecraft.nbt.CompoundTag;
|
||
import net.minecraft.server.level.ServerPlayer;
|
||
import net.minecraft.server.packs.resources.ResourceManager;
|
||
import net.neoforged.bus.api.SubscribeEvent;
|
||
import net.neoforged.fml.common.EventBusSubscriber;
|
||
import net.neoforged.neoforge.event.OnDatapackSyncEvent;
|
||
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
|
||
import net.neoforged.neoforge.event.server.ServerStartedEvent;
|
||
import net.neoforged.neoforge.network.PacketDistributor;
|
||
|
||
import javax.annotation.Nullable;
|
||
import java.io.InputStreamReader;
|
||
import java.util.HashMap;
|
||
import java.util.UUID;
|
||
|
||
@EventBusSubscriber(modid = Mod.MODID)
|
||
public class GunsTool {
|
||
|
||
public static HashMap<String, DefaultGunData> gunsData = new HashMap<>();
|
||
|
||
/**
|
||
* 初始化数据,从data中读取数据json文件
|
||
*/
|
||
public static void initJsonData(ResourceManager manager) {
|
||
for (var entry : manager.listResources("guns", file -> file.getPath().endsWith(".json")).entrySet()) {
|
||
var id = entry.getKey();
|
||
var attribute = entry.getValue();
|
||
try {
|
||
Gson gson = new Gson();
|
||
var data = gson.fromJson(new InputStreamReader(attribute.open()), DefaultGunData.class);
|
||
var path = id.getPath();
|
||
|
||
gunsData.put(path.substring(5, path.length() - 5), data);
|
||
} catch (Exception e) {
|
||
Mod.LOGGER.error(e.getMessage());
|
||
}
|
||
}
|
||
}
|
||
|
||
@SubscribeEvent
|
||
public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
|
||
if (event.getEntity() instanceof ServerPlayer player) {
|
||
PacketDistributor.sendToPlayer(player, GunsDataMessage.create());
|
||
}
|
||
}
|
||
|
||
@SubscribeEvent
|
||
public static void serverStarted(ServerStartedEvent event) {
|
||
initJsonData(event.getServer().getResourceManager());
|
||
}
|
||
|
||
@SubscribeEvent
|
||
public static void onDataPackSync(OnDatapackSyncEvent event) {
|
||
initJsonData(event.getPlayerList().getServer().getResourceManager());
|
||
|
||
event.getRelevantPlayers().forEach(player -> PacketDistributor.sendToPlayer(player, GunsDataMessage.create()));
|
||
}
|
||
|
||
public static void setGunIntTag(final CompoundTag tag, String name, int num) {
|
||
var data = tag.getCompound("GunData");
|
||
data.putInt(name, num);
|
||
tag.put("GunData", data);
|
||
}
|
||
|
||
public static int getGunIntTag(final CompoundTag tag, String name) {
|
||
return getGunIntTag(tag, name, 0);
|
||
}
|
||
|
||
public static int getGunIntTag(final CompoundTag tag, String name, int defaultValue) {
|
||
var data = tag.getCompound("GunData");
|
||
if (!data.contains(name)) return defaultValue;
|
||
return data.getInt(name);
|
||
}
|
||
|
||
public static double getGunDoubleTag(final CompoundTag tag, String name) {
|
||
return getGunDoubleTag(tag, name, 0);
|
||
}
|
||
|
||
public static double getGunDoubleTag(final CompoundTag tag, String name, double defaultValue) {
|
||
var data = tag.getCompound("GunData");
|
||
if (!data.contains(name)) return defaultValue;
|
||
return data.getDouble(name);
|
||
}
|
||
|
||
@Nullable
|
||
public static UUID getGunUUID(final CompoundTag tag) {
|
||
if (!tag.contains("GunData")) return null;
|
||
|
||
CompoundTag data = tag.getCompound("GunData");
|
||
if (!data.hasUUID("UUID")) return null;
|
||
return data.getUUID("UUID");
|
||
}
|
||
}
|