CustomDropsPlugin —— 自定义实体掉落物 icon

CustomDropsPlugin —— 自定义实体掉落物 -----

自定义实体的掉落物,如猪可以掉落圆石



这是我用DeepSeek的插件
功能:自定义实体的掉落物,如猪可以掉落圆石
指令配置重载/reloaddrops
Code (Text):
package MyPlugin.customDropsPlugin;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.*;

public class CustomDropsPlugin extends JavaPlugin implements Listener {

    private Map<EntityType, List<ItemStack>> dropMap = new HashMap<>();

    @Override
    public void onEnable() {
        saveDefaultConfig();
        loadConfig();
        getServer().getPluginManager().registerEvents(this, this);
        getCommand("reloaddrops").setExecutor(this); // 注册指令
        getLogger().info("插件已加载 - 使用 /reloaddrops 重载配置");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("reloaddrops")) {
            if (!sender.hasPermission("customdrops.reload")) {
                sender.sendMessage("§c你没有权限执行此命令!");
                return true;
            }

            reloadConfig();
            loadConfig();
            sender.sendMessage("§a配置已成功重载!");
            return true;
        }
        return false;
    }

    private void loadConfig() {
        dropMap.clear();
        FileConfiguration config = getConfig();
        ConfigurationSection entities = config.getConfigurationSection("entities");

        if (entities == null) {
            getLogger().warning("配置错误:缺少 'entities' 主节点!");
            return;
        }

        for (String entityKey : entities.getKeys(false)) {
            try {
                EntityType type = EntityType.valueOf(entityKey.toUpperCase());
                List<ItemStack> drops = new ArrayList<>();

                List<Map<?, ?>> dropList = entities.getMapList(entityKey + ".drops");
                for (Map<?, ?> entry : dropList) {
                    Material material = Material.matchMaterial(entry.get("material").toString());
                    int amount = Integer.parseInt(entry.get("amount").toString());

                    if (material != null) {
                        drops.add(new ItemStack(material, amount));
                    }
                }

                if (!drops.isEmpty()) {
                    dropMap.put(type, drops);
                    getLogger().info("已加载 " + type + " 的掉落配置");
                }
            } catch (Exception e) {
                getLogger().warning("配置错误:实体 " + entityKey + " - " + e.getMessage());
            }
        }
    }

    @EventHandler
    public void onEntityDeath(EntityDeathEvent event) {
        EntityType type = event.getEntityType();
        if (dropMap.containsKey(type)) {
            event.getDrops().clear();
            event.getDrops().addAll(dropMap.get(type));
        }
    }

    @Override
    public void onDisable() {
        dropMap.clear();
    }
}
config.yml:
entities:
PIG:
drops:
- material: COBBLESTONE
amount: 1

plugin.yml:
name: CustomDrops
main: MyPlugin.customDropsPlugin.CustomDropsPlugin
version: 1.0
commands:
reloaddrops:
description: 重载掉落配置
usage: /reloaddrops
permission: customdrops.reload
permissions:
customdrops.reload:
description: 允许重载配置
default: op
Resource Information
Author:
----------
Total Downloads: 11
First Release: Feb 10, 2025
Last Update: Feb 10, 2025
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings