83 lines
3.3 KiB
Java
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());
|
|
}
|
|
}
|