Jump to content

Silktouch Spawner Plugin


diordrip

Empfohlene Beiträge

Hey, ich bin gerade dabei mich ins Plugin Programmieren rein zu Arbeiten und jetzt habe ich mit Hilfe von ChatGPT folgenden Code erstellt, das Problem bei dem Code ist jedoch das ich nur einen normalen Spawner gedroppt bekomme statt des Mob-Spezifischen. Wäre echt hilfreich wenn einer weiß warum dies so ist und wie ich das ändern kann.

Mit freundlichen Grüßen

diordrip

package de.diordrip.silkspawner;

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BlockStateMeta;
import org.bukkit.plugin.java.JavaPlugin;

public final class Silkspawner extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
    }
    @EventHandler
    public void onBlockBreak(BlockBreakEvent event){
        Block block = event.getBlock();

        if (block.getType() == Material.SPAWNER && hasSilkTouch(event.getPlayer().getItemInHand())){
            CreatureSpawner spawner = (CreatureSpawner) block.getState();
            EntityType spawnedType = spawner.getSpawnedType();

            ItemStack spawnerItem = new ItemStack(Material.SPAWNER);
            BlockStateMeta meta = (BlockStateMeta) spawnerItem.getItemMeta();
            CreatureSpawner spawnerState = (CreatureSpawner) meta.getBlockState();
            spawnerState.setSpawnedType(spawnedType);
            meta.setBlockState(spawnerState);
            spawnerItem.setItemMeta(meta);

            block.getWorld().dropItem(block.getLocation(), new ItemStack(Material.SPAWNER));
            block.setType(Material.AIR);
        }
    }

    private boolean hasSilkTouch(ItemStack item){
        return item != null && item.containsEnchantment(Enchantment.SILK_TOUCH);
    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}
Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 6.7.2023 um 16:24 schrieb diordrip:
            spawnerItem.setItemMeta(meta);

            block.getWorld().dropItem(block.getLocation(), new ItemStack(Material.SPAWNER));

Das zu droppende Item wird zwar hergerichtet, aber effektiv gedroppt wird ein komplett anderes...

=> block.getWorld().dropItem(block.getLocation(), spawnerItem);

  • Love 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B