ScriptsLab
WikiDownloadsSourcesSupport
ScriptsLab
DocumentationDownloadsGitHubDiscord

© 2026 ScriptsLab

Back to scripts
JS

custom_sword.js

JavaScript · 203 lines · 8.6 KB

scripts/custom_sword.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
/**
 * ⚔️ ЛЕГЕНДАРНЫЙ МЕЧ МОЛНИЙ ⚔️
 * 
 * Особенности:
 * - Вызывает молнию при ударе
 * - +10 к урону (атрибут)
 * - +20% к скорости атаки
 * - Даёт эффект Силы II при держании
 * - Светится (enchant glow)
 * - Неразрушимый
 */

// Импорты Java классов
var Material = Java.type('org.bukkit.Material');
var ItemStack = Java.type('org.bukkit.inventory.ItemStack');
var Enchantment = Java.type('org.bukkit.enchantments.Enchantment');
var ItemFlag = Java.type('org.bukkit.inventory.ItemFlag');
var Attribute = Java.type('org.bukkit.attribute.Attribute');
var AttributeModifier = Java.type('org.bukkit.attribute.AttributeModifier');
var EquipmentSlot = Java.type('org.bukkit.inventory.EquipmentSlot');
var UUID = Java.type('java.util.UUID');
var ArrayList = Java.type('java.util.ArrayList');
var PotionEffect = Java.type('org.bukkit.potion.PotionEffect');
var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
var EntityDamageByEntityEvent = Java.type('org.bukkit.event.entity.EntityDamageByEntityEvent');
var PlayerItemHeldEvent = Java.type('org.bukkit.event.player.PlayerItemHeldEvent');

Console.log('=== Инициализация Меча Молний ===');

// Команда для получения меча
Commands.register('getlightningsword', function(sender, args) {
    if (!sender.isPlayer()) {
        sender.sendMessage('§cЭта команда только для игроков!');
        return;
    }
    
    var player = org.bukkit.Bukkit.getPlayer(sender.getName());
    if (!player) {
        sender.sendMessage('§cОшибка: игрок не найден!');
        return;
    }
    
    // Создаём алмазный меч
    var sword = new ItemStack(Material.DIAMOND_SWORD);
    var meta = sword.getItemMeta();
    
    if (meta) {
        // Название
        meta.setDisplayName('§6§l⚡ МЕЧ МОЛНИЙ ⚡');
        
        // Описание (lore)
        var lore = new ArrayList();
        lore.add('§7');
        lore.add('§e▸ Способности:');
        lore.add('§7  • Вызывает молнию при ударе');
        lore.add('§7  • Даёт эффект §cСилы II§7 при держании');
        lore.add('§7  • Дополнительный урон: §c+5 ❤');
        lore.add('§7');
        lore.add('§e▸ Характеристики:');
        lore.add('§7  • Урон: §c+10 ❤');
        lore.add('§7  • Скорость атаки: §a+20%');
        lore.add('§7  • Прочность: §6Неразрушимый');
        lore.add('§7');
        lore.add('§6§l✦ ЛЕГЕНДАРНЫЙ ПРЕДМЕТ ✦');
        meta.setLore(lore);
        
        // Неразрушимость
        meta.setUnbreakable(true);
        
        // Скрываем флаги (чтобы не показывать "Unbreakable" и атрибуты в описании)
        meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE);
        meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
        meta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
        
        // Добавляем зачарование для свечения (можно любое, оно будет скрыто)
        meta.addEnchant(Enchantment.LUCK_OF_THE_SEA, 1, true);
        
        // === АТРИБУТЫ через API helper ===
        // Используем Java helper метод для добавления атрибутов
        
        // +10 к урону
        API.addAttribute(meta, 'GENERIC_ATTACK_DAMAGE', 'lightning_sword_damage', 10.0, 'ADD_NUMBER', 'HAND');
        
        // +20% к скорости атаки (+0.8)
        API.addAttribute(meta, 'GENERIC_ATTACK_SPEED', 'lightning_sword_speed', 0.8, 'ADD_NUMBER', 'HAND');
        
        Console.log('Атрибуты добавлены к мечу');
        
        sword.setItemMeta(meta);
    }
    
    // Даём меч игроку
    player.getInventory().addItem(sword);
    player.sendMessage('§6§l⚡ §aВы получили §6§lМЕЧ МОЛНИЙ§a!');
    player.sendMessage('§7Ударьте моба, чтобы увидеть его силу...');
    
    Console.log(player.getName() + ' получил Меч Молний');
}, 'scriptslab.getlightningsword');

Console.log('✓ Команда /getlightningsword зарегистрирована');

// === СПОСОБНОСТЬ 1: Молния при ударе ===
API.registerEvent('EntityDamageByEntityEvent', function(event) {
    try {
        // Проверяем, что атакующий - игрок
        var Player = Java.type('org.bukkit.entity.Player');
        if (!(event.getDamager() instanceof Player)) {
            return;
        }
        
        var attacker = event.getDamager();
        var victim = event.getEntity();
        var item = attacker.getInventory().getItemInMainHand();
        
        // Проверяем, что в руке наш меч
        if (!item || item.getType() !== Material.DIAMOND_SWORD) {
            return;
        }
        
        var meta = item.getItemMeta();
        if (!meta || !meta.hasDisplayName()) {
            return;
        }
        
        var displayName = meta.getDisplayName();
        if (displayName.indexOf('МЕЧ МОЛНИЙ') === -1) {
            return;
        }
        
        // ⚡ ВЫЗЫВАЕМ МОЛНИЮ! ⚡
        var location = victim.getLocation();
        API.strikeLightningSync(location);
        
        // Дополнительный урон
        event.setDamage(event.getDamage() + 5.0);
        
        // Эффекты
        attacker.sendMessage('§6⚡ §eМолния поражает врага!');
        
        Console.log(attacker.getName() + ' использовал Меч Молний');
        
    } catch (e) {
        Console.error('Ошибка в обработчике Меча Молний: ' + e);
    }
});

Console.log('✓ Способность "Молния при ударе" активирована');

// === СПОСОБНОСТЬ 2: Эффект Силы при держании ===
API.registerEvent('PlayerItemHeldEvent', function(event) {
    try {
        var player = event.getPlayer();
        var newSlot = event.getNewSlot();
        var item = player.getInventory().getItem(newSlot);
        
        // Проверяем, что взяли наш меч
        if (item && item.getType() === Material.DIAMOND_SWORD) {
            var meta = item.getItemMeta();
            if (meta && meta.hasDisplayName()) {
                var displayName = meta.getDisplayName();
                if (displayName.indexOf('МЕЧ МОЛНИЙ') !== -1) {
                    // Даём эффект Силы II на 999999 тиков (бесконечно)
                    var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
                    API.addPotionEffectSync(
                        player,
                        PotionEffectType.STRENGTH,
                        999999,
                        1, // Уровень 1 = Сила II
                        false, // ambient
                        false  // particles (скрываем частицы)
                    );
                    
                    player.sendMessage('§6⚡ §eВы чувствуете силу молнии!');
                    Console.log(player.getName() + ' получил эффект Силы от Меча Молний');
                }
            }
        }
        
        // Убираем эффект, если убрали меч
        var oldSlot = event.getPreviousSlot();
        var oldItem = player.getInventory().getItem(oldSlot);
        if (oldItem && oldItem.getType() === Material.DIAMOND_SWORD) {
            var oldMeta = oldItem.getItemMeta();
            if (oldMeta && oldMeta.hasDisplayName()) {
                var oldDisplayName = oldMeta.getDisplayName();
                if (oldDisplayName.indexOf('МЕЧ МОЛНИЙ') !== -1) {
                    var PotionEffectType = Java.type('org.bukkit.potion.PotionEffectType');
                    API.removePotionEffectSync(player, PotionEffectType.STRENGTH);
                    player.sendMessage('§7Сила молнии покидает вас...');
                }
            }
        }
        
    } catch (e) {
        Console.error('Ошибка в обработчике смены предмета: ' + e);
    }
});

Console.log('✓ Способность "Эффект Силы" активирована');

Console.log('=== Меч Молний полностью активирован! ===');