Bendercraft / spigot-bending

Minecraft plugin that allows players to bend elements as in the series
Other
14 stars 7 forks source link

Poisonned dart + potion #31

Closed Les4 closed 8 years ago

Les4 commented 8 years ago

La potion n'est pas prise en compte lorsqu'on l'a sur le slot. Elle est consommée cela dit.

ghost commented 8 years ago

Hello ! Bon alors en 1.9, la classe Potion est deprecated et la méthode Potion potion = Potion.fromItemStack(is); ne retourne plus une Potion bien formée, ses effets ne sont pas ajoutés. Après quelques recherches, il n'y a plus aucun moyen simple d'obtenir les effets d'une potion ... Du coup j'ai trouvé ce post, on pourrait se servir de sa classe qu'il laisse libre :) Ou alors on attend une classe de Spigot ^^

ghost commented 8 years ago

Hello ! Alors j'ai essayé de réaliser une correction. J'ai trouvé que depuis la 1.9, le type des potions est stocké dans leur META, et l'on peut savoir à partir de cela si c'est une potion de niveau 2 ou d'une durée plus longue. Par contre, pour pouvoir créer le PotionEffect correspondant à la potion, il faut absolument connaitre l'amplificateur et la durée, et donc il faut tester chaque type de potion un par un, pour connaitre la bonne durée à utiliser :/

case POTION:
                PotionMeta PMeta = ((PotionMeta) is.getItemMeta());
                PotionData Pdata = PMeta.getBasePotionData();
                PotionType PType = Pdata.getType();
                if (PType == PotionType.UNCRAFTABLE) {
                    /* It's a custom Potion */
                    this.effects.addAll(PMeta.getCustomEffects());
                    this.player.getInventory().removeItem(is);
                    this.player.getInventory().addItem(new ItemStack(Material.GLASS_BOTTLE));
                    break;
                }
                /* It's an ordinary potion */
                PotionEffect PEff = null;
                if (PType == PotionType.INSTANT_DAMAGE) {
                    if(Pdata.isUpgraded())
                        PEff = new PotionEffect(PotionEffectType.HARM, 0, 0);
                    else
                        PEff = new PotionEffect(PotionEffectType.HARM, 0, -1);
                } else if (PType == PotionType.INSTANT_HEAL) {
                    if(Pdata.isUpgraded())
                        PEff = new PotionEffect(PotionEffectType.HEAL, 0, 0);
                    else
                        PEff = new PotionEffect(PotionEffectType.HEAL, 0, -1);
                } else if (PType == PotionType.JUMP) {
                    if(Pdata.isUpgraded())
                        PEff = new PotionEffect(PotionEffectType.JUMP, 20 * 90, 0);
                    else if(Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.JUMP, 20 * 480, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.JUMP, 20 * 180, -1);
                } else if (PType == PotionType.LUCK) {
                    PEff = new PotionEffect(PotionEffectType.LUCK, 20 * 300, 0);
                } else if (PType == PotionType.NIGHT_VISION) {
                    if(Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.NIGHT_VISION, 20 * 480, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.NIGHT_VISION, 20 * 180, -1);
                } else if (PType == PotionType.POISON) {
                    if(Pdata.isUpgraded())
                        PEff = new PotionEffect(PotionEffectType.POISON, 432, 0);
                    else if(Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.POISON, 20 * 90, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.POISON, 20 * 45, -1);
                } else if (PType == PotionType.REGEN) {
                    if(Pdata.isUpgraded())
                        PEff = new PotionEffect(PotionEffectType.REGENERATION, 450, 0);
                    else if(Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.REGENERATION, 20 * 90, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.REGENERATION, 20 * 45, -1);
                } else if (PType == PotionType.SLOWNESS) {
                    if(Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.SLOW, 20 * 240, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.SLOW, 20 * 90, -1);
                } else if (PType == PotionType.SPEED) {
                    if(Pdata.isUpgraded())
                        PEff = new PotionEffect(PotionEffectType.SPEED, 20 * 90, 0);
                    else if (Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.SPEED, 20 * 480, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.SPEED, 20 * 180, -1);
                } else if (PType == PotionType.STRENGTH) {
                    if(Pdata.isUpgraded())
                        PEff = new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 20 * 90, 0);
                    else if (Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 20 * 480, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 20 * 180, -1);
                } else if (PType == PotionType.WATER_BREATHING) {
                    if(Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.WATER_BREATHING, 20 * 480, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.WATER_BREATHING, 20 * 180, -1);
                } else if (PType == PotionType.WEAKNESS) {
                    if(Pdata.isExtended())
                        PEff = new PotionEffect(PotionEffectType.WEAKNESS, 20 * 240, -1);
                    else
                        PEff = new PotionEffect(PotionEffectType.WEAKNESS, 20 * 90, -1);
                } else {
                    break; //Useless Potions like AWKWARD;THICK;MUNDANE;WATER;FIRE_RESISTANCE;INVISIBILITY
                }
                this.effects.add(PEff);
                this.player.getInventory().removeItem(is);
                this.player.getInventory().addItem(new ItemStack(Material.GLASS_BOTTLE));
                break;

C'est un peu long :/ Si il y a des changements que je peux faire dites moi :) (Après des tests, le paramètre AMPLIFIER du constructeur de PotionEffect doit être à -1 pour un effet normal)