Closed Les4 closed 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 ^^
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)
La potion n'est pas prise en compte lorsqu'on l'a sur le slot. Elle est consommée cela dit.