Résolu Récupérer une variable lorsqu'un joueur tape un block
-
Bonjour alors aujourd’hui je vient encore une fois vous demander votre aide car en effet je cherche un moyen afin de récupérer un variable quand le joueur est entrain de casser un block par exemple :
public void onBlockIsTaped(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) { tickBreak++; }
Ceci n’existe pas ^^’ malheureusement la seul fonction que j’ai trouver est celle ci
/** * Called when the block is clicked by a player. Args: x, y, z, entityPlayer */ public void onBlockClicked(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) {}
mais le problème est que lorsque qu on est en jeux la fonction s’actualise que lorsque le joueur tape une fois sur le block…
-
Je ne crois pas que ce soit possible, mais je vais voir si 'y a un moyen détourné de le faire ;)___
J’ai trouvé un moyen de le faire
Il n’existe ni event pour cela, ni méthode sans devoir changer le code source, ce qui n’est pas une bonne idée…
Mais l’on peut ajouter un IWorldAccess à l’objet World que l’on veut surveiller@ForgeSubscribe public void load(WorldEvent.Load event) { event.world.addWorldAccess(new IWorldAccess() { @Override public void markBlockForUpdate(int i, int j, int k){} @Override public void markBlockForRenderUpdate(int i, int j, int k){} @Override public void markBlockRangeForRenderUpdate(int i, int j, int k, int l, int i1, int j1){} @Override public void playSound(String s, double d0, double d1, double d2, float f, float f1){} @Override public void playSoundToNearExcept(EntityPlayer entityplayer, String s, double d0, double d1, double d2, float f, float f1){} @Override public void spawnParticle(String s, double d0, double d1, double d2, double d3, double d4, double d5){} @Override public void onEntityCreate(Entity entity){} @Override public void onEntityDestroy(Entity entity){} @Override public void playRecord(String s, int i, int j, int k){} @Override public void broadcastSound(int i, int j, int k, int l, int i1){} @Override public void playAuxSFX(EntityPlayer entityplayer, int i, int j, int k, int l, int i1){} @Override public void destroyBlockPartially(int id, int x, int y, int z, int state) { if(y >= 0 && state >= 0) { System.out.println("Block hit at ("+x+";"+y+";"+z+"), EntityID hitting: "+id+", State: "+state); } } }); }
J’espère que ça pourra t’aider
-
Merci beaucoup je ne comprend juste pas ce qu’est la variable state et ou doit on mettre l’iworldacces…
-
La variable state (de -1 à 10) indique où en est le joueur dans la démolition du bloc
Et IWorldAccess pour pouvoir être prévenu quand le bloc est abîmé (parce que je vois pas d’autres moyens xD aussi)