superb-warfare/src/main/java/net/mcreator/target/tools/GunsTool.java
2024-05-10 18:25:13 +08:00

83 lines
3.3 KiB
Java

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.server.packs.resources.ResourceManager;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.server.ServerStartedEvent;
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 HashMap<String, HashMap<String, Double>> gunsData = new HashMap<>();
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 {
JsonReader reader = new JsonReader(new InputStreamReader(attribute.open()));
reader.beginObject();
var map = new HashMap<String, Double>();
while (reader.hasNext()) {
map.put(reader.nextName(), reader.nextDouble());
}
var path = id.getPath();
gunsData.put(path.substring(5, path.length() - 5), map);
reader.endObject();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void initGun(Level level, ItemStack stack, String location) {
if (level.getServer() == null) return;
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) {
stack.getOrCreateTag().putDouble("damageadd", 1 + 0.05 * (stack.getOrCreateTag().getDouble("level") - 10));
} else {
stack.getOrCreateTag().putDouble("damageadd", 1);
}
} else {
stack.getOrCreateTag().putDouble("damageadd", 1);
}
}
@SubscribeEvent
public static void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new GunsDataMessage(GunsTool.gunsData));
}
}
@SubscribeEvent
public static void serverStarted(ServerStartedEvent event) {
initJsonData(event.getServer().getResourceManager());
}
}