Jump to content

Silktouch Spawner Plugin


diordrip
 Share

Recommended Posts

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 to comment
Share on other sites

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 to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B
B