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> 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(); 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()); } }