Обсудим Не выпадают никакие спавнеры, кроме спавнера свиней

XlAlbertlX

Пользователь
Сообщения
10
Столкнулся с проблемой, которую никак исправить не могу. Написал плагин на выпадение спавнеров. Для опки в творческом режиме все хорошо работает. Но если перейти в режим выживания (даже оставив опку), то всегда выпадает спавнер свиней. Тестирую на почти пустой сборке. В чем может быть проблема?
 
Так покажи код, который создает этот предмет
 
Java:
public class BlockBreaked implements Listener {
    private double chanceShogun = 0.3;
    private double chanceSamurai = 0.6;
    private Random random = new Random();

    @EventHandler
    public void onBlockBreakEvent(BlockBreakEvent event) {
        Block block = event.getBlock();
        if (block.getType() != Material.SPAWNER) return;

        Player player = event.getPlayer();
        ItemStack itemInMainHand = player.getInventory().getItemInMainHand();

        boolean validItem = itemInMainHand.getType() == Material.DIAMOND_PICKAXE
                || itemInMainHand.getType() == Material.NETHERITE_PICKAXE;

        boolean validEnchant = itemInMainHand.containsEnchantment(Enchantment.SILK_TOUCH);

        if (!validItem || !validEnchant) {
            player.sendMessage("§c§lЧтобы получить спавнер, у вас должна быть алмазная или незеритовая кирка с шелковым касанием!");
            return;
        }

        boolean dropItem = false;
        if (player.hasPermission("blockBreaked.shogun")) {
            if ((random.nextDouble() < chanceShogun)) {
                dropItem = true;
            }
        } else if (player.hasPermission("blockBreaked.samurai")) {
            if ((random.nextDouble() < chanceSamurai)) {
                dropItem = true;
            }
        } else {
            player.sendMessage("§c§lУ вас должна быть как минимум привилегия §fꑴ §c§l для выпадения спавнеров!");
            return;
        }

        if (!dropItem) {
            player.sendMessage("§c§lНе повезло, блок не выпал :(");
            return;
        }

        ItemStack spawner = new ItemStack(block.getType());
        ItemMeta meta = spawner.getItemMeta();
        if (meta instanceof BlockStateMeta) {
            ((BlockStateMeta) meta).setBlockState(block.getState());
            spawner.setItemMeta(meta);
        }
        Location blockLocation = block.getLocation();
        block.getWorld().dropItemNaturally(blockLocation, spawner);
    }

}
 
Java:
CreatureSpawner spawner = (CreatureSpawner) block.getState();
EntityType spawnedType = spawner.getSpawnedType();
ItemStack droppedItem = new ItemStack(Material.MOB_SPAWNER, 1);
BlockStateMeta bsm = (BlockStateMeta) droppedItem.getItemMeta();
CreatureSpawner cs = (CreatureSpawner) bsm.getBlockState();
cs.setSpawnedType(spawnedType);
bsm.setBlockState(cs);
droppedItem.setItemMeta(bsm);

Location blockLocation = block.getLocation();
block.breakNaturally();
blockLocation.getWorld().dropItemNaturally(blockLocation, droppedItem);
 
Java:
CreatureSpawner spawner = (CreatureSpawner) block.getState();
EntityType spawnedType = spawner.getSpawnedType();
ItemStack droppedItem = new ItemStack(Material.MOB_SPAWNER, 1);
BlockStateMeta bsm = (BlockStateMeta) droppedItem.getItemMeta();
CreatureSpawner cs = (CreatureSpawner) bsm.getBlockState();
cs.setSpawnedType(spawnedType);
bsm.setBlockState(cs);
droppedItem.setItemMeta(bsm);

Location blockLocation = block.getLocation();
block.breakNaturally();
blockLocation.getWorld().dropItemNaturally(blockLocation, droppedItem);
Не получилось. Все равно выпадает спавнер свиньи
 
Мой код точно работает, ибо он гоняется на сервере, и там игроки с выживанием
 
Вот весь мой код:
Java:
public void onBlockBreakEvent(BlockBreakEvent event) {
        Block block = event.getBlock();
        if (block.getType() != Material.SPAWNER) return;

        Player player = event.getPlayer();
        ItemStack itemInMainHand = player.getInventory().getItemInMainHand();

        boolean validItem = itemInMainHand.getType() == Material.DIAMOND_PICKAXE
                || itemInMainHand.getType() == Material.NETHERITE_PICKAXE;

        boolean validEnchant = itemInMainHand.containsEnchantment(Enchantment.SILK_TOUCH);

        if (!validItem || !validEnchant) {
            player.sendMessage("§c§lЧтобы получить спавнер, у вас должна быть алмазная или незеритовая кирка с шелковым касанием!");
            return;
        }

        boolean dropItem = false;
        if (player.hasPermission("blockBreaked.shogun")) {
            if ((random.nextDouble() < chanceShogun)) {
                dropItem = true;
            }
        } else if (player.hasPermission("blockBreaked.samurai")) {
            if ((random.nextDouble() < chanceSamurai)) {
                dropItem = true;
            }
        } else {
            player.sendMessage("§c§lУ вас должна быть как минимум привилегия §fꑴ §c§l для выпадения спавнеров!");
            return;
        }

        if (!dropItem) {
            player.sendMessage("§c§lНе повезло, блок не выпал :(");
            return;
        }

        CreatureSpawner spawner = (CreatureSpawner) block.getState();
        EntityType spawnedType = spawner.getSpawnedType();
        ItemStack droppedItem = new ItemStack(Material.SPAWNER, 1);
        BlockStateMeta bsm = (BlockStateMeta) droppedItem.getItemMeta();
        CreatureSpawner cs = (CreatureSpawner) bsm.getBlockState();
        cs.setSpawnedType(spawnedType);
        bsm.setBlockState(cs);
        droppedItem.setItemMeta(bsm);

        Location blockLocation = block.getLocation();
        block.breakNaturally();
        blockLocation.getWorld().dropItemNaturally(blockLocation, droppedItem);
    }
Несколько раз перепроверил. Он вроде выпадает как спавнер зомби (не стакается со спавнером свиней), но ставится все равно как спавнер свиней. Я из плагинов оставил только luckPerms, хотя, у меня спавнер нормальный даже с опкой не ставится. Может это вовсе не в коде дело? Может что-то указать в файлах сервера надо?
 
не проще юзать плагин SilkSpawners?
 
spawn-protect на 0 поставь, может в этом дело.
У меня стоит 16, но в нем разве может быть дело? Я тестировал далеко от спавна. Тем более, все ломается/ставится нормально, только с типом спавнера проблема
 
Назад
Сверху Снизу