测试版

This commit is contained in:
tianyu 2024-07-27 23:08:24 +08:00
commit a924275cdf
14 changed files with 728 additions and 0 deletions

40
.gitignore vendored Normal file
View File

@ -0,0 +1,40 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
/out/
/.idea/

42
pom.xml Normal file
View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>DemonMmKillsDrop</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>public-rpg</id>
<url>https://repo.aurora-pixels.com/repository/public-rpg/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.12.2</version>
</dependency>
<dependency>
<groupId>io.lumine.xikage.mythicmobs</groupId>
<artifactId>MythicMobs</artifactId>
<version>1.12.2</version>
</dependency>
<dependency>
<groupId>me.Demon.DemonPlugin</groupId>
<artifactId>DemonAPI</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,40 @@
package me.Demon.DemonMmKillsDrop.Event;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class KillsMobsDropEvent extends Event {
private static HandlerList handlers = new HandlerList();
private Player player;
private String item_type;
private int item_amount;
@Override
public HandlerList getHandlers(){
return handlers;
}
public static HandlerList getHandlerList(){
return handlers;
}
public KillsMobsDropEvent(Player player, String item_type, int item_amount){
this.player = player;
this.item_type = item_type;
this.item_amount = item_amount;
}
public Player getPlayer(){
return player;
}
public String getItem_type(){
return item_type;
}
public int getItem_amount() {
return item_amount;
}
}

View File

@ -0,0 +1,50 @@
package me.Demon.DemonMmKillsDrop;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.List;
public abstract class KillDropAPI {
public static ItemStack getItems(String key, int amount){
ItemStack item = new ItemStack(Material.DIAMOND,64);
if (Main.ItemsListID.contains(key)) {
item = Main.plugin.getConfig().getItemStack("ItemsData."+key).clone();
item.setAmount(amount);
ItemMeta meta = item.getItemMeta();
List<String> lore = meta.getLore();
meta.setLore(lore);
item.setItemMeta(meta);
}
return item;
}
//获取今日掉落物数量
public static int getDayAmount(String key){
int time = Integer.parseInt(Main.getTime("dd"));
return Main.dropLogG.getInt("DropItems."+time+"."+key);
}
//增加今日掉落物数量
public static void addDayAmount(String key,int amount){
int time = Integer.parseInt(Main.getTime("dd"));
Main.dropLogG.set("DropItems."+time+"."+key,(getDayAmount(key)+amount));
Main.saveDropLogConfig();
}
public static ItemStack getItemData(String key){
ItemStack item = new ItemStack(Material.STONE);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName("§c§l掉落物错误X");
item.setItemMeta(meta);
FileConfiguration yml = Main.plugin.getConfig();
if(yml.getString("ItemsData."+key) != null){
item = yml.getItemStack("ItemsData."+key).clone();
}
return item;
}
}

View File

@ -0,0 +1,252 @@
package me.Demon.DemonMmKillsDrop;
import me.Demon.DemonMmKillsDrop.listener.ItemBaoHu;
import me.Demon.DemonMmKillsDrop.listener.KillMobsDrop;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
public class Main extends JavaPlugin implements Listener {
public static Main plugin;
public static double drop_double = 1.0;
public static HashMap<String,MobsPer> pps = new HashMap<>();
public static HashMap<String,StatsPer> statsMap = new HashMap<>();
public static List<String> ItemsListID = new ArrayList<>();
public static File Datafile = new File("plugins/DemonMmKillsDrop", "MobsData.yml");
public static FileConfiguration DataG = YamlConfiguration.loadConfiguration(Datafile);
public static void saveDataConfig(){ try { DataG.save(Datafile); } catch (IOException e) { e.printStackTrace(); } }
public static File DropLogfile = new File("plugins/DemonMmKillsDrop", "DropItemLog.yml");
public static FileConfiguration dropLogG = YamlConfiguration.loadConfiguration(DropLogfile);
public static void saveDropLogConfig(){ try { dropLogG.save(DropLogfile); } catch (IOException e) { e.printStackTrace(); } }
@Override
public void onEnable() {
plugin = this;
saveDefaultConfig();
if(isRefreshUpdata()){
dropLogG.set("Todaytime",getTime("yyyy/MM/dd"));
int time = Integer.parseInt(getTime("dd"));
Main.dropLogG.set("DropItems."+time,null);
Main.saveDropLogConfig();
Bukkit.getConsoleSender().sendMessage("§d[KillMobDrop] §6已清理今日所有掉落数据~");
}
Bukkit.getConsoleSender().sendMessage("§b[KillMobDrop] §a插件成功载入Server");
Bukkit.getConsoleSender().sendMessage("§b[KillMobDrop] §a妖魂QQ:1763917516");
getServer().getPluginManager().registerEvents(this, this);
Bukkit.getPluginManager().registerEvents(new KillMobsDrop(),this);
Bukkit.getPluginManager().registerEvents(new ItemBaoHu(),this);
if(getConfig().getString("ItemsData") != null) {
ItemsListID.addAll(getConfig().getConfigurationSection("ItemsData").getKeys(false));
}
for (String WorldName : getConfig().getConfigurationSection("MobsDrop").getKeys(false)){
int amount = 0;
for (String Mob_key : getConfig().getConfigurationSection("MobsDrop."+WorldName).getKeys(false)){
Main.pps.put(Mob_key, new MobsPer(Mob_key));
amount++;
}
Bukkit.getConsoleSender().sendMessage("§a- 世界: "+WorldName+" 导入: "+amount+"个怪物");
}
}
public void onDisable() {
for (String WorldName : getConfig().getConfigurationSection("MobsDrop").getKeys(false)){
int amount = 0;
for (String Mob_key : getConfig().getConfigurationSection("MobsDrop."+WorldName).getKeys(false)) {
if (Main.pps.get(Mob_key) != null) {
Main.pps.get(Mob_key).savePlayerData();
amount++;
}
}
Bukkit.getConsoleSender().sendMessage("§a- 世界: "+WorldName+" 已保存: "+amount+"个怪物死亡数据");
}
Bukkit.getConsoleSender().sendMessage("§b[KillMobDrop] §c插件已正常关闭");
}
public boolean onCommand(CommandSender sender, Command cmd, String Command, String[] args) {
if (Command.equalsIgnoreCase("dmmdrop") && sender.isOp()) {
if(args.length == 0){
sender.sendMessage("");
sender.sendMessage("§e------- ======= §6偙国掉落物 §e======= -------");
sender.sendMessage("§2/dmmdrop open §f- §2打开掉落物仓库");
sender.sendMessage("§2/dmmdrop stats §f- §2查看材料掉落统计");
sender.sendMessage("§2/dmmdrop clear §f- §2清理材料掉落统计");
sender.sendMessage("§2/dmmdrop statshh §f- §2查看灵环掉落统计");
sender.sendMessage("§2/dmmdrop dropzf §e[倍率] §f- §2设置掉落物倍率");
sender.sendMessage("§2/dmmdrop give §e[物品] §2<数量> {玩家} §f- §2给予玩家物品");
sender.sendMessage("§e------- ======= §6偙国掉落物 §e======= -------");
}
if(args.length == 1 && args[0].equalsIgnoreCase("save")){
for (String WorldName : getConfig().getConfigurationSection("MobsDrop").getKeys(false)) {
for (String Mob_key : getConfig().getConfigurationSection("MobsDrop." + WorldName).getKeys(false)) {
if (Main.pps.get(Mob_key) != null) {
Main.pps.get(Mob_key).savePlayerData();
}
}
}
sender.sendMessage("§7[§c消息§7] §a成功手动保存数据.");
}
if(args.length == 1 && args[0].equalsIgnoreCase("clear")){
FileConfiguration yml = Main.dropLogG;
yml.set("DropItems",null);
Main.saveDropLogConfig();
sender.sendMessage("§7[§c消息§7] §a成功清理历史掉落数据。");
}
if(args.length == 2 && args[0].equalsIgnoreCase("dropzf")){
drop_double = Double.parseDouble(args[1]);
sender.sendMessage("§7[§c消息§7] §a当前服务器掉落率增幅为: §e"+((drop_double-1)*100)+"%");
}
//dmmdrop give [key] [amount] <player>
if(args.length == 4 && args[0].equalsIgnoreCase("give")){
if (ItemsListID.contains(args[1])) {
ItemStack item = getConfig().getItemStack("ItemsData."+args[1]).clone();
int amount;
try {
amount = Integer.parseInt(args[2]);
} catch (Exception e) {
sender.sendMessage("§7[§6掉落库§7] §c数量参数必须是整数");
return true;
}
Player player = Bukkit.getPlayer(args[3]);
if (player == null) {
sender.sendMessage("§7[§6掉落库§7] §c目标玩家不在线无法给予");
return true;
}
item.setAmount(amount);
player.getInventory().addItem(item);
sender.sendMessage("§7[§6掉落库§7] §f成功给予玩家"+ player.getName()+" "+args[1]+" "+amount+"");
}else{
sender.sendMessage("§7[§6掉落库§7] §c物品不存在.");
}
}
if(args.length == 1 && args[0].equalsIgnoreCase("open")){
OpenItemsGui((Player) sender);
}
if(args.length == 1 && args[0].equalsIgnoreCase("stats")){
FileConfiguration yml = Main.dropLogG;
List<String> keyId_List = new ArrayList<>();
int day = 0;
if(yml.getConfigurationSection("DropItems") != null) {
for (String time : yml.getConfigurationSection("DropItems").getKeys(false)) {
if (yml.getConfigurationSection("DropItems." + time) != null) {
for (String keyId : yml.getConfigurationSection("DropItems." + time).getKeys(false)) {
if (!keyId_List.contains(keyId)) {
keyId_List.add(keyId);
}
int amount = yml.getInt("DropItems." + time + "." + keyId);
if (Main.statsMap.get(keyId) == null) {
Main.statsMap.put(keyId, new StatsPer(keyId));
}
Main.statsMap.get(keyId).addAmount(amount);
}
}
day++;
}
sender.sendMessage("§a战争领域§e[" + day + "天]§a内的掉落物数据统计: ");
for (int i = 0; i < keyId_List.size(); i++) {
String keyId = keyId_List.get(i);
int amount = Main.statsMap.get(keyId).getAmount();
sender.sendMessage("§7[§b" + keyId + "§7] §f§l- §a" + amount + "");
}
sender.sendMessage("§f[§c消息§f] §a目前服务器掉落物总计: §e" + keyId_List.size() + "");
Main.statsMap.clear();
}
}
if(args.length == 1 && args[0].equalsIgnoreCase("reload")){
reloadConfig();
Main.pps.clear();
for (String WorldName : getConfig().getConfigurationSection("MobsDrop").getKeys(false)){
int amount = 0;
for (String Mob_key : getConfig().getConfigurationSection("MobsDrop."+WorldName).getKeys(false)){
Main.pps.put(Mob_key, new MobsPer(Mob_key));
amount++;
}
sender.sendMessage("§a- 世界: "+WorldName+" 导入: "+amount+"个怪物");
}
sender.sendMessage("§7[§c消息§7] §a重载配置完成.");
}
}
return true;
}
public static int getRandomInt(int max, int min) {
return (int) (Math.random() * (max - min + 1) + min);
}
public static boolean itemIsNull(ItemStack item){
return item == null || item.getType() == Material.AIR;
}
public static boolean itemIsLore(ItemStack item){ return item.getItemMeta().getLore()==null; }
public static String getTime(String Format){
Date date = Calendar.getInstance().getTime();
SimpleDateFormat datatime = new SimpleDateFormat(Format);
return datatime.format(date);
}
public void OpenItemsGui(Player p){
Inventory inv = Bukkit.createInventory(null,54,"§i§r§m§i§r掉落物集成库");
for (String key : getConfig().getConfigurationSection("ItemsData").getKeys(false)) {
ItemStack item = getConfig().getItemStack("ItemsData." + key).clone();
item.setAmount(1);
inv.addItem(item);
}
p.openInventory(inv);
p.playSound(p.getLocation(), Sound.BLOCK_COMPARATOR_CLICK,1,2);
}
@EventHandler
public void onclick(InventoryClickEvent e){
Player p = (Player) e.getWhoClicked();
if(e.getInventory() != null && "§i§r§m§i§r掉落物集成库".equalsIgnoreCase(e.getInventory().getTitle())){
e.setCancelled(true);
if(e.getRawSlot() >= 0 && e.getRawSlot() < 54){
ItemStack item = e.getCurrentItem();
if(!itemIsNull(item)) {
if(e.getClick() == ClickType.LEFT) {
item.setAmount(1);
p.getInventory().addItem(item);
}else if(e.getClick() == ClickType.RIGHT){
item.setAmount(10);
p.getInventory().addItem(item);
}else if(e.getClick() == ClickType.MIDDLE){
item.setAmount(64);
p.getInventory().addItem(item);
}
p.playSound(p.getLocation(), Sound.ENTITY_CHICKEN_EGG,1,2);
}
}
}
}
//獲取上次每周數據刷新的時間 //
public static String getTodaytime() {
FileConfiguration yml = Main.dropLogG;
if(yml.getString("Todaytime") != null){
return yml.getString("Todaytime");
}
return "2023/06/24";
}
//判斷是否今天是數據刷新的壹天
public static boolean isRefreshUpdata() {
if(!getTodaytime().equalsIgnoreCase(getTime("yyyy/MM/dd"))) {
return true;
}
return false;
}
}

View File

@ -0,0 +1,32 @@
package me.Demon.DemonMmKillsDrop;
public class MobsPer {
private String Mobkey;
private int killAmount;
public MobsPer(String Mob_key){
this.Mobkey = Mob_key;
this.killAmount = Main.DataG.getInt("Kill_Mobs_Data."+Mobkey);;
}
public void savePlayerData(){
Main.DataG.set("Kill_Mobs_Data."+Mobkey,getKillAmount());
Main.saveDataConfig();
}
//小麦
public int getKillAmount(){
return this.killAmount;
}
public void addKillAmount(int amount){
this.killAmount += amount;
}
public void takeKillAmount(int amount){
this.killAmount -= amount;
}
public void setKillAmount(int amount){
this.killAmount = amount;
}
}

View File

@ -0,0 +1,20 @@
package me.Demon.DemonMmKillsDrop;
public class StatsPer {
private String DropKey;
private int Amount;
public StatsPer(String DropKey){
this.DropKey = DropKey;
this.Amount = 0;
}
public int getAmount(){
return this.Amount;
}
public void addAmount(int amount){
this.Amount += amount;
}
}

View File

@ -0,0 +1,71 @@
package me.Demon.DemonMmKillsDrop.listener;
import io.lumine.xikage.mythicmobs.MythicMobs;
import me.Demon.DemonMmKillsDrop.manager.DamageManager;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.Vector;
import java.util.*;
public class ItemBaoHu implements Listener {
@EventHandler
public void onEntityPickupItem(PlayerPickupItemEvent event) {
Player player = event.getPlayer();
Item item = event.getItem();
if (item.hasMetadata("owner") && item.hasMetadata("time")) {
String u = null;
long time = 0L;
for (MetadataValue metadataValue : item.getMetadata("owner")) {
u = metadataValue.asString();
}
for (MetadataValue metadataValue : item.getMetadata("time")) {
time = metadataValue.asLong();
}
if (u == null || time == 0) {
return;
}
UUID uuid = UUID.fromString(u);
if (time + (1000L * 10) > System.currentTimeMillis()) {
if (!player.getUniqueId().equals(uuid)) {
Vector v = player.getLocation().toVector().subtract(item.getLocation().toVector()).normalize().multiply(1).setY(0.1);
player.setVelocity(v);
player.sendMessage("§7[§6掉落保护§7] §f你无法拾取此物品!!");
event.setCancelled(true);
}
}
}
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void onDamage(EntityDamageByEntityEvent event) {
Entity damager = event.getDamager();
if (!(damager instanceof Player)) {
return;
}
Entity entity = event.getEntity();
if (!MythicMobs.inst().getAPIHelper().isMythicMob(entity) || !(entity instanceof LivingEntity)) {
return;
}
LivingEntity livingEntity = (LivingEntity) entity;
double damage = event.getDamage();
if (damage > livingEntity.getHealth()) {
damage = livingEntity.getHealth();
}
DamageManager.damage(damager.getUniqueId(), entity.getUniqueId(), damage);
}
}

View File

@ -0,0 +1,122 @@
package me.Demon.DemonMmKillsDrop.listener;
import io.lumine.xikage.mythicmobs.adapters.bukkit.BukkitAdapter;
import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicMobDeathEvent;
import me.Demon.DemonMmKillsDrop.Event.KillsMobsDropEvent;
import me.Demon.DemonMmKillsDrop.KillDropAPI;
import me.Demon.DemonMmKillsDrop.Main;
import me.Demon.DemonMmKillsDrop.manager.DamageManager;
import me.Demon.DemonPlugin.DemonAPI;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class KillMobsDrop implements Listener {
@EventHandler
public void onkills(MythicMobDeathEvent e) {
if (e.getKiller() instanceof Player) {
Player p = (Player) e.getKiller();
if (e.getEntity().getCustomName() != null) {
//获取玩家所在世界名
String worldName = p.getWorld().getName();
//获取怪物的MM代号
String mobsKey = e.getMob().getType().getInternalName();
if (Main.pps.get(mobsKey) != null) {
Main.pps.get(mobsKey).addKillAmount(1);
//获取这只魂兽当前被击杀次数
int amount = Main.pps.get(mobsKey).getKillAmount();
int fujia_gailv = 0;
if (amount >= 20) {
fujia_gailv = amount;
}
boolean isdrop = false;
List<ItemStack> itemStacks = new ArrayList<>();
FileConfiguration yml = Main.plugin.getConfig();
for (String DropKey : yml.getConfigurationSection("MobsDrop." + worldName + "." + mobsKey).getKeys(false)) {
int gailv = yml.getInt("MobsDrop." + worldName + "." + mobsKey + "." + DropKey);
double newgailv = (gailv * 0.7) * Main.drop_double;
if (p.hasPermission("vip2.use")) {
newgailv = (gailv * 0.85) * Main.drop_double;
}
int random = Main.getRandomInt(1000, 1);
double addDrop = 1.0;
if (random <= ((newgailv + fujia_gailv) * addDrop)) {
isdrop = true;
if (DropKey.contains("#")) {
String ItemsKey = DropKey.split("#")[0];
ItemStack dropItem = KillDropAPI.getItemData(ItemsKey);
int max = Integer.parseInt(DropKey.split("#")[1]);
int d_amount = Main.getRandomInt(max, 1);
dropItem.setAmount(d_amount);
itemStacks.add(dropItem);
// 事件
KillDropAPI.addDayAmount(ItemsKey, d_amount);
KillsMobsDropEvent event = new KillsMobsDropEvent(p, ItemsKey, d_amount);
Bukkit.getPluginManager().callEvent(event);
} else {
// 将东西发送至队长背包
ItemStack dropItem = KillDropAPI.getItemData(DropKey);
itemStacks.add(dropItem);
// 事件
KillDropAPI.addDayAmount(DropKey, 1);
KillsMobsDropEvent event = new KillsMobsDropEvent(p, DropKey, 1);
Bukkit.getPluginManager().callEvent(event);
}
}
}
if (isdrop) {
if (p.hasPermission("vip2.use")) {
DemonAPI.sendActionBar(p, "§6§l§k|||§r §b副本爆率增幅生效中 §6§l§k|||§r");
}
Main.pps.get(mobsKey).setKillAmount(0);
UUID entityUUID = e.getMob().getUniqueId();
Map<UUID, Double> map = DamageManager.getEntityDamageMap(entityUUID);
List<Map.Entry<UUID, Double>> list = getEntries(map);
Location location = BukkitAdapter.adapt(e.getMob().getLocation());
if (!list.isEmpty()) {
UUID one = list.get(0).getKey();
itemStacks.forEach(i -> {
Item item = location.getWorld().dropItem(location, i);
item.setPickupDelay(0);
item.setMetadata("owner", new FixedMetadataValue(Main.plugin, one.toString()));
item.setMetadata("time", new FixedMetadataValue(Main.plugin, System.currentTimeMillis()));
item.setVelocity(new Vector(getRandomDouble(0.5), getRandomDouble(0.1), getRandomDouble(0.5)));
});
}
}
}
}
}
}
private static List<Map.Entry<UUID, Double>> getEntries(Map<UUID, Double> map) {
List<Map.Entry<UUID, Double>> list = new ArrayList<>(map.entrySet());
list.sort((arg0, arg1) -> {
if (arg0.getValue() > arg1.getValue()) {
return -1;
} else {
return 1;
}
});
return list;
}
private double getRandomDouble(double max) {
int pow = (int) Math.pow(10, 2);
return Math.floor((Math.random() * (max - 0.01) + 0.01) * pow) / pow;
}
}

View File

@ -0,0 +1,46 @@
package me.Demon.DemonMmKillsDrop.manager;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class DamageManager {
private static Map<UUID, Map<UUID, Double>> damageMap = new HashMap<>();
public static Map<UUID, Map<UUID, Double>> getDamageMap() {
return damageMap;
}
public static Map<UUID, Double> getEntityDamageMap(UUID entity) {
Map<UUID, Double> map = new HashMap<>();
damageMap.forEach((p, m) -> {
if (m.containsKey(entity)) {
map.put(p, m.get(entity));
}
});
return map;
}
public static double getDamage(UUID player, UUID entity) {
if (!damageMap.containsKey(player)) {
return 0;
}
return damageMap.get(player).getOrDefault(entity, (double) 0);
}
public static void damage(UUID player, UUID entity, double damage) {
Map<UUID, Double> map = damageMap.getOrDefault(player, new HashMap<>());
map.put(entity, map.getOrDefault(entity, (double) 0) + damage);
damageMap.put(player, map);
}
public static void clearEntity(UUID entity) {
damageMap.forEach((p, map)->{
if (map.containsKey(entity)) {
map.remove(entity);
}
});
}
}

View File

@ -0,0 +1,2 @@
Todaytime: 2021/03/31
DropItems: {}

View File

@ -0,0 +1 @@
Kill_Mobs_Data: {}

View File

@ -0,0 +1,5 @@
# 若全服玩家击杀该 怪物 总次数达到50次 该怪物的战利品掉率增加 击杀次数-50 = 附加概率
# 如果在击杀次数积累过程中有人掉落 则次数重置
# 材料后面的数字为默认掉率 比例为 1000:1
MobsDrop: {}
ItemsData: {}

View File

@ -0,0 +1,5 @@
name: DemonMmKillsDrop
main: me.Demon.DemonMmKillsDrop.Main
version: 1.4.9
commands:
dmmdrop: