TwentiethAutumn
Новичок
- Баллы
- 6
В процессе создания самописных зачарований столкнулся с небольшой проблемой. В основной программе происходит регистрация зачарования, но командой /enchant зачаровать не удается(пишет, что зачарование с таким ID отсутствует). При /reload'е же пишет, что зачарование с таким ID уже зарегистрировано. Обьясните, пожалуйста
Upd1. Ошибок в консоли нет, Listener зачарования работает без ошибок. Так же можно выдать предмет с зачарованием.
Upd2. Команда "/give 2dolboeba minecraft:diamond_sword 1 0 {ench:[{id:70,lvl:2}]}" тоже работает исправно (70 - id моего зачарования)
Upd3. Если выдавать книгу, хранящую в себе зачарование, то стандартные зачарования работают корректно, а моим ничего нельзя зачаровать
Upd4. Версия spigot'a - spigot-1.8.8-R0.1-SNAPSHOT-latest
Upd1. Ошибок в консоли нет, Listener зачарования работает без ошибок. Так же можно выдать предмет с зачарованием.
Upd2. Команда "/give 2dolboeba minecraft:diamond_sword 1 0 {ench:[{id:70,lvl:2}]}" тоже работает исправно (70 - id моего зачарования)
Upd3. Если выдавать книгу, хранящую в себе зачарование, то стандартные зачарования работают корректно, а моим ничего нельзя зачаровать
Upd4. Версия spigot'a - spigot-1.8.8-R0.1-SNAPSHOT-latest
Код:
package ru.Trash.main;
import java.util.ArrayList;
import java.util.logging.Logger;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import ru.Trash.enchantments.BackstabEnchantment;
import ru.Trash.enchantments.EnchantmentTemplate;
public class Main extends JavaPlugin{
public static PluginManager pluginManager;
public static Logger logger;
public static Plugin plugin;
public static BackstabEnchantment BACKSTAB;
public static ArrayList<EnchantmentTemplate> enchantmentList;
@Override
public void onEnable()
{
logger = this.getLogger();
pluginManager = this.getServer().getPluginManager();
enchantmentList = new ArrayList<EnchantmentTemplate>();
plugin = Main.getPlugin(Main.class);
BACKSTAB = new BackstabEnchantment(70);
//type enchantment init here
}
}
Код:
package ru.Trash.enchantments;
import java.lang.reflect.Field;
import java.util.Arrays;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentTarget;
import org.bukkit.event.Listener;
import org.*********ventory.ItemStack;
import ru.Trash.main.Main;
public class EnchantmentTemplate extends Enchantment {
public EnchantmentTemplate(int id) {
super(id);
fix(this);
// TODO Auto-generated constructor stub
}
@Override
public boolean canEnchantItem(ItemStack arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean conflictsWith(Enchantment arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public EnchantmentTarget getItemTarget() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getMaxLevel() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getStartLevel() {
// TODO Auto-generated method stub
return 0;
}
public void setListener(Listener listener) {
Main.pluginManager.registerEvents(listener, Main.plugin);
}
private void fix(EnchantmentTemplate ench) {
try {
Field f = Enchantment.class.getDeclaredField("acceptingNew");
f.setAccessible(true);
f.set(null, true);
if(Arrays.asList(Enchantment.values()).contains(ench) == false){
Enchantment.registerEnchantment(ench);
Main.enchantmentList.add(this);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Код:
package ru.Trash.enchantments;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentTarget;
import org.*********ventory.ItemStack;
import ru.Trash.listeners.BackstabListener;
public class BackstabEnchantment extends EnchantmentTemplate {
public BackstabEnchantment(int id) {
super(id);
setListener(new BackstabListener());
// TODO Auto-generated constructor stub
}
@Override
public boolean canEnchantItem(ItemStack arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean conflictsWith(Enchantment arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public EnchantmentTarget getItemTarget() {
// TODO Auto-generated method stub
return EnchantmentTarget.WEAPON;
}
@Override
public int getMaxLevel() {
// TODO Auto-generated method stub
return 10;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return "Backstab";
}
@Override
public int getStartLevel() {
// TODO Auto-generated method stub
return 0;
}
}
Код:
package ru.Trash.listeners;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.*********ventory.ItemStack;
import ru.Trash.main.Main;
public class BackstabListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Main.logger.info("[BACKSTAB LISTENER] "+event.getPlayer().getName()+" HAS JOINED");
ItemStack item = new ItemStack(Material.WOOD_SWORD);
item.addEnchantment(Main.BACKSTAB, 1);
event.getPlayer().getInventory().addItem(item);
event.getPlayer().updateInventory();
}
@EventHandler
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
if(event.getDamager() instanceof Player) {
Player p = (Player) event.getDamager();
if(p.getItemInHand() != null && p.getItemInHand().getType() != Material.AIR) {
Entity e = event.getEntity();
if(p.getItemInHand().getItemMeta().hasEnchant(Main.BACKSTAB) && p.getLocation().getDirection().dot(e.getLocation().getDirection()) > 0) {
if(Math.random() <= 0.5){
e.sendMessage(ChatColor.RED + "[BACKSTAB LISTENER] Backstabbed");
p.sendMessage(ChatColor.GREEN + "[BACKSTAB LISTENER] Backstab");
event.setDamage(event.getDamage()*1.25);
}
}
}
}
}
}
Вложения
Последнее редактирование: