Résolu Dégâts de zone+explosion
-
Bonjour, bonsoir,
J’ai fais une pièce d’armure associée à un item, quand on “clic droit” avec l’item tout en portant la pièce d’armure sur soi on explose…
Oui j’ai fais une tenue de bombe humaine.Alors le soucis qui me fait venir cette fois c’est que sur mon serveur les explosions sont “cancel” en tout cas elles n’explosent pas les blocs et en y testant ma fonctionnalité je me suis rendu compte que les dégâts n’étaient pas pris en compte, je crée simplement l’animation d’une explosion en gros.
Du coup je me suis dis qu’il suffirait d’appliquer des dégâts en zone au moment de l’animation. Grâce au bonus en tuto de Robin sur les épées c’est fait.
Au final j’ai deux méthodes l’une quand on tape une entité, l’autre quand on clique droit::::
public class ItemDetonateur extends Item { public ItemDetonateur() { super(); this.maxStackSize = 1; this.setHasSubtypes(true); } public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { ItemStack chestPlate = player.getEquipmentInSlot(3); if (!world.isRemote && chestPlate != null && chestPlate.getItem() == Modpg.bodyKamikaze) { world.createExplosion(null, player.posX, player.posY + 1, player.posZ, 5.0F, true); } return stack; } @SuppressWarnings("rawtypes") public boolean hitEntity(ItemStack stack, EntityLivingBase attackedLiving, EntityLivingBase attackerLiving) { if(!stack.hasTagCompound()) { stack.setTagCompound(new NBTTagCompound()); } IEntitySelector filter; // filter = new IEntitySelector() // { // @Override // public boolean isEntityApplicable(Entity entity) // { // if(entity instanceof EntityPlayer) // { // return true; // } // return false; // } // }; filter = new IEntitySelector() { @Override public boolean isEntityApplicable(Entity entity) { if(entity instanceof EntityAnimal) { return true; } return false; } }; List entityTargetList = attackedLiving.worldObj.selectEntitiesWithinAABB(EntityLivingBase.class, attackedLiving.boundingBox.expand(3.0D, 2.0D, 3.0D), filter); for(Object entity : entityTargetList) { EntityLivingBase living = (EntityLivingBase)entity; living.attackEntityFrom(DamageSource.lava, 12.0F); } return super.hitEntity(stack, attackedLiving, attackerLiving); } }
:::
L’instanceofAnimal c’est pour tester en solo si les dégâts s’appliquent bien.
Auriez-vous un moyen, une méthode peut-être, qui me permettent de me faire péter et d’appliquer les dégâts en une seule action?
Au passage j’aimerais fortement que les dégâts en zone s’appliquent également au joueur qui porte l’armure (Sinon c’est pas drôle =D ). -
world.createExplosion(null, player.posX, player.posY + 1, player.posZ, 5.0F, true);
si ma memoire est bonne, tu n’a pas d’explosion car la premiere variable est null. entité, x,y,z,zone,pete bloc. Donc, l’explosion n’est pas défini.
Quand au joueur qui explose, methode barbare, mais ce serai de lui enlever de la vie en meme temps que du clic avec l’item. Car j’ai tester, les dommage source de l’explosion de celui qui l’émet sont ignorer.
-
L erreur ne vient pas du tout des arguments de la méthode. Nan. Le problème est que la méthode createExplosion est à appeler sur les deux Sides : le client se charge des particules, et le serveur des dégâts, de la destruction des blocks et du son. Or là dans ton code, ce qui est bizarre c’est que tu fais une condition pour ne créer l explosion sur serveur. Vire le (!world.isRemote), mais c est quand même bizarre que tu n’ais pas la destruction, ni les dégârs…
-
J’ai testé, avec le !world.isRemote, j’ai l’explosion, la destruction et les dégâts infligé oO. Etrange.
-
La seule explication que je vois c’est que le serveur tourne sous Cauldron est qu’un plugin bloque les explosions. Car il n’y a aucune erreur dans ton code.
-
Vire la condition world.isRemote et dis moi quoi
-
@‘robin4002’:
La seule explication que je vois c’est que le serveur tourne sous Cauldron est qu’un plugin bloque les explosions. Car il n’y a aucune erreur dans ton code.
= ça ne vient pas du world.isRemote
Surtout que dans son code il y a !world.isRemote ce qui correspond au monde serveur … -
[font=Ubuntu, sans-serifc’est que sur mon serveur les explosions sont “cancel”]
Sous Eclipse j’explose, y’a pas de soucis les gars. C’est que sur mon serveur je bloque les dégâts de l’explosion et donc j’aimerais appliquer d’autres dégâts à la place.
Comme ça j’aurai l’animation d’explosion et les dégâts aux joueurs sans pour autant foutre en l’air la carte.
Mon soucis est d’arriver à faire les deux d’un coup. Avec mes deux méthodes actuelles c’est pas ça. -
Il faut faire une explosion custom.
-
Je passe en résolu, j’ai fais un mix des deux méthodes et en fait ça marche bien.