sodex
Новичок
- Баллы
- 16
Код:
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>