1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Помогите пожалуйста ошибка при регистрации зачарования

Тема в разделе "Разработка плагинов для новичков", создана пользователем sodex, 15 фев 2025.

  1. Автор темы
    sodex

    sodex Новичок

    Баллы:
    6
    Код:
    package LIKGER.moreEnhants;
    
    import LIKGER.moreEnhants.Enchats.BurEnchantment;
    import org.bukkit.NamespacedKey;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public final class MoreEnhants extends JavaPlugin {
    
        private BurEnchantment burEnchantment;
    
        @Override
        public void onEnable() {
            getLogger().info("Activating MoreEnhants..."); // Отладочное сообщение
            registerEnchantment();
            getCommand("moreenchants").setExecutor(new CommandGive(this));
            getLogger().info("MoreEnhants activated successfully!");
        }
    
        @Override
        public void onDisable() {
            // Логика завершения работы плагина
        }
    
        private void registerEnchantment() {
            NamespacedKey key = new NamespacedKey(this, "bur"); // Используем this для получения имени плагина
            burEnchantment = new BurEnchantment(key); // Сохраняем экземпляр в поле класса
    
            // Регистрация зачарования
            try {
                // Проверка, существует ли уже зачарование
                if (Enchantment.getByKey(key) == null) {
                    // Регистрация через рефлексию
                    java.lang.reflect.Field byNameField = Enchantment.class.getDeclaredField("byName");
                    byNameField.setAccessible(true);
                    java.util.Map<String, Enchantment> byNameMap = (java.util.Map<String, Enchantment>) byNameField.get(null);
                    byNameMap.put(burEnchantment.getName().toLowerCase(), burEnchantment);
    
                    java.lang.reflect.Field byKeyField = Enchantment.class.getDeclaredField("byKey");
                    byKeyField.setAccessible(true);
                    java.util.Map<NamespacedKey, Enchantment> byKeyMap = (java.util.Map<NamespacedKey, Enchantment>) byKeyField.get(null);
                    byKeyMap.put(key, burEnchantment);
                }
            } catch (Exception ex) {
                ex.printStackTrace(); // Логируем исключение
            }
        }
    
        public BurEnchantment getBurEnchantment() {
            return burEnchantment;
        }
    }
    
    Код:
    package LIKGER.moreEnhants;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.EnchantmentStorageMeta;
    
    public class CommandGive implements CommandExecutor {
        private final MoreEnhants plugin;
    
        public CommandGive(MoreEnhants plugin) {
            this.plugin = plugin;
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if (args.length != 4 || !args[0].equals("give") || !args[2].equals("bur")) {
                sender.sendMessage("Неправильная команда. Используйте /moreenchants give <игрок> bur <уровень>");
                return true;
            }
    
            Player player = Bukkit.getPlayer(args[1]);
            if (player == null) {
                sender.sendMessage("Игрок не найден");
                return true;
            }
    
            int level;
            try {
                level = Integer.parseInt(args[3]);
            } catch (NumberFormatException e) {
                sender.sendMessage("Неправильный уровень");
                return true;
            }
    
            if (level < 1 || level > plugin.getBurEnchantment().getMaxLevel()) {
                sender.sendMessage("Неправильный уровень");
                return true;
            }
    
            ItemStack book = new ItemStack(org.bukkit.Material.ENCHANTED_BOOK);
            EnchantmentStorageMeta meta = (EnchantmentStorageMeta) book.getItemMeta();
            if (meta != null) {
                // Используем непосредственно burEnchantment
                meta.addStoredEnchant(plugin.getBurEnchantment(), level, true);
                book.setItemMeta(meta);
    
                player.getInventory().addItem(book);
                sender.sendMessage("Книга с зачарованием выдана игроку " + player.getName());
            } else {
                sender.sendMessage("Ошибка при создании зачарованной книги");
            }
    
            return true;
        }
    }
    
    
    Код:
    package LIKGER.moreEnhants.Enchats;
    
    import org.bukkit.NamespacedKey;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.enchantments.EnchantmentTarget;
    import org.*********ventory.ItemStack;
    
    public class BurEnchantment extends Enchantment {
    
        private final NamespacedKey key;
    
        public BurEnchantment(NamespacedKey key) {
            super(key);
            this.key = key; // Сохраняем ключ
        }
    
        @Override
        public String getName() {
            return "Bur Enchantment"; // Название вашего зачарования
        }
    
        @Override
        public int getMaxLevel() {
            return 1; // Максимальный уровень
        }
    
        @Override
        public int getStartLevel() {
            return 1; // Начальный уровень
        }
    
        @Override
        public EnchantmentTarget getItemTarget() {
            return EnchantmentTarget.ALL; // Целевой предмет
        }
    
        @Override
        public boolean isTreasure() {
            return false; // Не является сокровищем
        }
    
        @Override
        public boolean isCursed() {
            return false; // Не является проклятым
        }
    
        @Override
        public boolean conflictsWith(Enchantment other) {
            return false; // Не конфликтует с другими зачарованиями
        }
    
        @Override
        public boolean canEnchantItem(ItemStack item) {
            return true; // Может быть наложено на любой предмет
        }
    
        @Override
        public String getTranslationKey() {
            return "enchantment." + key.getKey(); // Добавляем перевод
        }
    
        @Override
        public NamespacedKey getKey() {
            return key; // Возвращаем ключ зачарования
        }
    }
    
    Код:
    package LIKGER.moreEnhants.Enchats;
    
    import org.bukkit.enchantments.Enchantment;
    
    public class BurEnchantmentHandle {
    
        private final BurEnchantment enchantment;
    
        public BurEnchantmentHandle(BurEnchantment enchantment) {
            this.enchantment = enchantment;
        }
    
        public Enchantment getHandle() {
            return enchantment; // Возвращаем сам экземпляр зачарования
        }
    }
    
    Код:
    <?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>LIKGER</groupId>
        <artifactId>moreenhants</artifactId>
        <version>1.0</version>
        <packaging>jar</packaging>
    
        <name>moreenhants</name>
    
        <properties>
            <java.version>21</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <build>
            <defaultGoal>clean package</defaultGoal>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.13.0</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.5.3</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    
        <repositories>
            <repository>
                <id>spigotmc-repo</id>
                <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
            </repository>
            <repository>
                <id>sonatype</id>
                <url>https://oss.sonatype.org/content/groups/public/</url>
            </repository>
        </repositories>
    
        <dependencies>
            <dependency>
                <groupId>org.spigotmc</groupId>
                <artifactId>spigot-api</artifactId>
                <version>1.21-R0.1-SNAPSHOT</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </project>
    
    Screenshot_34.png Screenshot_35.png
     
  2. BetterLex

    BetterLex Активный участник Пользователь

    Баллы:
    76
    Сам писал? :lol:
     
  3. Автор темы
    sodex

    sodex Новичок

    Баллы:
    6
    не всё где-то GPT спрашивал но даже он не смог помочь, можешь подсказать что не так и почему не работает метод super
     

Поделиться этой страницей