|
4 | 4 |
|
5 | 5 | import org.bukkit.Material; |
6 | 6 | import org.bukkit.entity.Player; |
| 7 | +import org.bukkit.potion.PotionType; |
7 | 8 | import org.bukkit.inventory.Inventory; |
8 | 9 | import org.bukkit.inventory.ItemStack; |
9 | 10 | import org.bukkit.inventory.PlayerInventory; |
@@ -248,7 +249,14 @@ else if (index1 != -1 && index2 == -1) { |
248 | 249 | } |
249 | 250 | // Если оба не в порядке или порядок одинаковый - сравниваем дальше |
250 | 251 |
|
251 | | - // Если тип одинаковый, то по названию эффекта |
| 252 | + // Сначала по наличию эффекта (с эффектами выше, без эффектов - ниже) |
| 253 | + boolean hasEffect1 = hasPotionEffect(item1); |
| 254 | + boolean hasEffect2 = hasPotionEffect(item2); |
| 255 | + if (hasEffect1 != hasEffect2) { |
| 256 | + return Boolean.compare(hasEffect2, hasEffect1); // true идет первым |
| 257 | + } |
| 258 | + |
| 259 | + // Если оба с эффектами или оба без эффектов, то по названию эффекта |
252 | 260 | String effect1 = getPotionEffectName(item1); |
253 | 261 | String effect2 = getPotionEffectName(item2); |
254 | 262 | int effectCompare = effect1.compareTo(effect2); |
@@ -277,6 +285,36 @@ else if (index1 != -1 && index2 == -1) { |
277 | 285 | }); |
278 | 286 | } |
279 | 287 |
|
| 288 | + private boolean hasPotionEffect(ItemStack potion) { |
| 289 | + if (!(potion.getItemMeta() instanceof org.bukkit.inventory.meta.PotionMeta meta)) { |
| 290 | + return false; |
| 291 | + } |
| 292 | + |
| 293 | + // Если есть кастомные эффекты — точно есть эффект |
| 294 | + if (meta.hasCustomEffects()) { |
| 295 | + return true; |
| 296 | + } |
| 297 | + |
| 298 | + // Проверяем базовый тип зелья |
| 299 | + if (meta.getBasePotionData() != null) { |
| 300 | + PotionType type = meta.getBasePotionData().getType(); |
| 301 | + if (type == null) return false; |
| 302 | + |
| 303 | + // Безэффектные типы — всегда false |
| 304 | + switch (type) { |
| 305 | + case PotionType.WATER: |
| 306 | + case PotionType.MUNDANE: |
| 307 | + case PotionType.THICK: |
| 308 | + case PotionType.AWKWARD: |
| 309 | + return false; |
| 310 | + default: |
| 311 | + return true; |
| 312 | + } |
| 313 | + } |
| 314 | + |
| 315 | + return false; |
| 316 | + } |
| 317 | + |
280 | 318 | private String getPotionEffectName(ItemStack potion) { |
281 | 319 | if (potion.getItemMeta() instanceof org.bukkit.inventory.meta.PotionMeta) { |
282 | 320 | org.bukkit.inventory.meta.PotionMeta meta = (org.bukkit.inventory.meta.PotionMeta) potion.getItemMeta(); |
|
0 commit comments