Résolu Dont stack items and save mob ?

Frithy

Bucheron
30 Septembre 2018
18
0
11
23
Bonjour,

Je début dans la création de plugin pour minecraft et je pense que je suis en train de dev de façon jettable...

Mon plugin c'est une genre de pokeball, on peut capturer et relancer les mobs.

Souci j'aimerai faire en sorte que les "pokeball" ne soit pas stakable, je ne sais pas si c'est possible.
Ainsi que lier un mob a un item, pour le moment je le fait de façon brouillons mais le mob spawn est ramdom...

Je sais qu'on peut optimiser si vous pouviez m'aider ?

Merci

Code:
package fr.frithy.pokeball;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.Vector;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;


public class MainListener implements Listener {

    private boolean aLance = false;
    private Player player;
    private List<Integer> projectiles = new ArrayList<>();
    String lore = "";
    //private HashMap<Player,Integer> listALance;

    ItemStack item = new ItemStack(Material.HEART_OF_THE_SEA);

    @EventHandler
    public void onInteract(PlayerInteractEvent event){

        Action action = event.getAction();
        ItemStack it = event.getItem();
        assert it != null;
        ItemMeta modif = it.getItemMeta();
        it.setItemMeta(modif);

        if( it == null ) return;

        if(projectiles.size() > 100){
            projectiles.remove(0);
            projectiles.remove(1);
            projectiles.remove(2);
            projectiles.remove(3);
            projectiles.remove(4);
        }



        for( String e : it.getItemMeta().getLore()){
            lore=e;
        }
        if( it.getItemMeta().getDisplayName().equals("§2Lien Faible") && lore.contains("§7Contient")){
            if(action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK){
                Snowball ball = event.getPlayer().launchProjectile(Snowball.class);

            }
        }
        else{
            if(action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK){
                this.player = event.getPlayer();
                it.setAmount(it.getAmount()-1);
                aLance = true;
                Snowball ball = event.getPlayer().launchProjectile(Snowball.class);
                projectiles.add(ball.hashCode());
                //Bukkit.broadcastMessage(String.valueOf(ball.hashCode()));
                //Bukkit.broadcastMessage(" 1 : " + player +  '\n' );
            }

        }

    }

    @EventHandler
    private void takeDamage(EntityDamageByEntityEvent event){

        EntityType victime = event.getEntityType();
        Entity leMob = event.getEntity();
        Entity attaquant = event.getDamager();


        ItemMeta modif = item.getItemMeta();
        modif.setDisplayName("§2Lien Faible");
        modif.setLore(Arrays.asList("§7Contient : [ " + victime + " ]"));
        modif.addEnchant(Enchantment.DURABILITY, 1, true);
        modif.addItemFlags(ItemFlag.HIDE_ENCHANTS);
        item.setItemMeta(modif);



        if(attaquant instanceof Snowball && (((Snowball) event.getDamager()).getShooter() instanceof Player )){
            Player player = (Player) ((Snowball) event.getDamager()).getShooter();
            if(aLance && player.getName().equals(this.player.getName())){
                aLance = false;
                if(projectiles.contains(attaquant.hashCode())){
                    leMob.remove();
                    Location drop = leMob.getLocation();
                    drop.getWorld().dropItem(drop,item);
                }
                //Bukkit.broadcastMessage(" 1 : " + victime +  " | " +  attaquant.hashCode() + '\n' );
            }
        }
    }

    @EventHandler
    public void onProjectileHit(ProjectileHitEvent event) {
        Entity entity = event.getEntity();
        if (entity instanceof Snowball) {
            Location loc = entity.getLocation();
            Vector vec = entity.getVelocity();
            Location loc2 = new Location(loc.getWorld(), loc.getX() + vec.getX(), loc.getY() + vec.getY() + 0.7, loc.getZ() + vec.getZ());
            Bukkit.broadcastMessage(lore);
            switch (lore){
                case "§7Contient : [ BAT ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.BAT);
                    break;
                case "§7Contient : [ BLAZE ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.BLAZE);
                    break;
                case "§7Contient : [ CAT ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.CAT);
                    break;
                case "§7Contient : [ COW ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.COW);
                    break;
                case "§7Contient : [ CAVE_SPIDER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.CAVE_SPIDER);
                    break;
                case "§7Contient : [ CHICKEN ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.CHICKEN);
                    break;
                case "§7Contient : [ COD ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.COD);
                    break;
                case "§7Contient : [ CREEPER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.CREEPER);
                    break;
                case "§7Contient : [ DOLPHIN ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.DOLPHIN);
                    break;
                case "§7Contient : [ DONKEY ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.DONKEY);
                    break;
                case "§7Contient : [ DROWNED ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.DROWNED);
                    break;
                case "§7Contient : [ ELDER_GUARDIAN ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.ELDER_GUARDIAN);
                    break;
                case "§7Contient : [ ENDER_CRYSTAL ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.ENDER_CRYSTAL);
                    break;
                case "§7Contient : [ ENDER_DRAGON ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.ENDER_DRAGON);
                    break;
                case "§7Contient : [ ENDERMAN ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.ENDERMAN);
                    break;
                case "§7Contient : [ ENDERMITE ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.ENDERMITE);
                    break;
                case "§7Contient : [ EVOKER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.EVOKER);
                    break;
                case "§7Contient : [ EVOKER_FANGS ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.EVOKER_FANGS);
                    break;
                case "§7Contient : [ FOX ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.FOX);
                    break;
                case "§7Contient : [ GHAST ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.GHAST);
                    break;
                case "§7Contient : [ GUARDIAN ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.GUARDIAN);
                    break;
                case "§7Contient : [ HORSE ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.HORSE);
                    break;
                case "§7Contient : [ HUSK ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.HUSK);
                    break;
                case "§7Contient : [ ILLUSIONER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.ILLUSIONER);
                    break;
                case "§7Contient : [ IRON_GOLEM ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.IRON_GOLEM);
                    break;
                case "§7Contient : [ LLAMA ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.LLAMA);
                    break;
                case "§7Contient : [ LEASH_HITCH ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.LEASH_HITCH);
                    break;
                case "§7Contient : [ MAGMA_CUBE ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.MAGMA_CUBE);
                    break;
                case "§7Contient : [ OCELOT ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.OCELOT);
                    break;
                case "§7Contient : [ PANDA ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.PANDA);
                    break;
                case "§7Contient : [ PARROT ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.PARROT);
                    break;
                case "§7Contient : [ PHANTOM ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.PHANTOM);
                    break;
                case "§7Contient : [ PIG ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.PIG);
                    break;
                case "§7Contient : [ PIG_ZOMBIE ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.PIG_ZOMBIE);
                    break;
                case "§7Contient : [ PILLAGER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.PILLAGER);
                    break;
                case "§7Contient : [ POLAR_BEAR ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.POLAR_BEAR);
                    break;
                case "§7Contient : [ PUFFERFISH ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.PUFFERFISH);
                    break;
                case "§7Contient : [ RABBIT ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.RABBIT);
                    break;
                case "§7Contient : [ RAVAGER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.RAVAGER);
                    break;
                case "§7Contient : [ SALMON ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SALMON);
                    break;
                case "§7Contient : [ SHEEP ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SHEEP);
                    break;
                case "§7Contient : [ SHULKER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SHULKER);
                    break;
                case "§7Contient : [ SILVERFISH ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SILVERFISH);
                    break;
                case "§7Contient : [ SKELETON ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SKELETON);
                    break;
                case "§7Contient : [ SKELETON_HORSE ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SKELETON_HORSE);
                    break;
                case "§7Contient : [ SLIME ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SLIME);
                    break;
                case "§7Contient : [ SNOWMAN ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SNOWMAN);
                    break;
                case "§7Contient : [ SPIDER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SPIDER);
                    break;
                case "§7Contient : [ SQUID ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.SQUID);
                    break;
                case "§7Contient : [ STRAY ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.STRAY);
                    break;
                case "§7Contient : [ TRADER_LLAMA ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.TRADER_LLAMA);
                    break;
                case "§7Contient : [ TROPICAL_FISH ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.TROPICAL_FISH);
                    break;
                case "§7Contient : [ TURTLE ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.TURTLE);
                    break;
                case "§7Contient : [ VEX ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.VEX);
                    break;
                case "§7Contient : [ VILLAGER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.VILLAGER);
                    break;
                case "§7Contient : [ VINDICATOR ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.VINDICATOR);
                    break;
                case "§7Contient : [ WANDERING_TRADER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.WANDERING_TRADER);
                    break;
                case "§7Contient : [ WITCH ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.WITCH);
                    break;
                case "§7Contient : [ WITHER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.WITHER);
                    break;
                case "§7Contient : [ WITHER_SKELETON ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.WITHER_SKELETON);
                    break;
                case "§7Contient : [ WOLF ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.WOLF);
                    break;
                case "§7Contient : [ ZOMBIE ]":
                    Bukkit.broadcastMessage("Vache");
                    Objects.requireNonNull(loc2.getWorld()).spawnEntity(loc2,EntityType.ZOMBIE);
                    break;
                case "§7Contient : [ ZOMBIE_HORSE ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.ZOMBIE_HORSE);
                    break;
                case "§7Contient : [ ZOMBIE_VILLAGER ]":
                    Bukkit.broadcastMessage("Vache");
                    loc2.getWorld().spawnEntity(loc2,EntityType.ZOMBIE_VILLAGER);
                    break;
                default:
                    ItemMeta modif = item.getItemMeta();
                    modif.setDisplayName("§2Lien Faible");
                    modif.setLore(Arrays.asList("§7Vide"));
                    item.setItemMeta(modif);
                    loc2.getWorld().dropItem(loc2,item);
            }
        }
    }


}
 
Dernière édition:

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
28
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

2 manières de faire cela:
  1. Mettre une propriété unique à chaque item (système d'UID, d'ID...) qui fait que miencraft ne va pas les stack. Par exemple en mettant ce numéro dans le Lore ou même directement dans le nom de l'item
  2. Placer "manuellement" (avec le plugin) l'item récupéré par le joueur dans un emplacement vide de l'inventaire (annulé le fait qu'il le récupère s'il n'y a plus de place) et cancel tous les events où le joueur déplace l'item sur un autre emplacement qu'un emplacement vide.

Cordialement,
Detobel36
 

Frithy

Bucheron
30 Septembre 2018
18
0
11
23
Je vois mais du coup comment pourrais-je faire pour ajouter une nouvelle NBT lorsque l'on craft l'item, ou qu'on se le give ?
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
28
Bruxelles - Belgique
www.phoenix-rebirth.fr
Salut,

Je vois mais du coup comment pourrais-je faire pour ajouter une nouvelle NBT lorsque l'on craft l'item, ou qu'on se le give ?
Tu peux faire ça a ces deux moment la ;)
Y a un event pour ces deux moment :D

Et pour l'ajout de NBT Tag, il me semble que c'est du NMS (mais tu trouvera facilement des exemples "tout fait" sur des forums comme spigot).


Cordialement,
Detobel36