Bâton de fouille
-
Bonsoir,
Comme vous l’avez vus dans le tire je cherche a faire un bâton de fouille.
En gros: Une item que quand on clique droit sur l’entity player on ouvre sont inventaire (celui du target) mais je voudrais que on ne puisse pas prendre d’item juste voir son inventaire .
Fonction utilisée pour ce bâton: itemInteractionForEntity
Possible ?
Et des idées de comment faire ?
Merci
-
Rien de très compliqué : créer un item qui ouvre un gui lors du clique sur un joueur, et dans le container bloquer le clique
-
@‘SCAREX’:
Rien de très compliqué : créer un item qui ouvre un gui lors du clique sur un joueur, et dans le container bloquer le clique
Je vois,
J’ai fais ça:public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target) { if(target instanceof EntityPlayer) { EntityPlayer targetp = (EntityPlayer)target; playerIn.inventory.openInventory(targetp); playerIn.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Vous fouillez: " + targetp.getDisplayNameString())); targetp.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + playerIn.getDisplayNameString() + " vous fouille.")); } return false; }
J’ai pas essayer en multi mais ça me semble cohérent le problème c’est que je vois pas la fonction a utilisé pour bloqué les clics …
merci
-
Il faut que tu fasses ton propre Container (en prenant celui vanilla) pour l’inventaire puis que tu réécrives la fonction slotClic.
-
@‘AymericRed’:
Il faut que tu fasses ton propre Container (en prenant celui vanilla) pour l’inventaire puis que tu réécrives la fonction slotClic.
Ah mince, vraiment ? je veux récupéré l’inventaire du joueur que je pointe en faisant clic droit pas mon propre inventaire .
edit: petite question aussi le container faut l’enregistrer ?
Et le nom de la classe vanilla que je dois m’aider elle s’appelle comment ? -
Il faut que tu changes le container et le gui, en revanche tu n’as absolument pas besoin de ré-écrire l’inventaire du joueur. Le container n’a pas à être enregistré. De quelle classe vanilla tu parles ?
-
Il faut créer un Gui et un Container qui seront extends GuiInventory et GuiInventory pour récupérer le fonctions vanilla mais overwrite la fonction slotClick dans le container pour les empêcher (et pour les ouvrir, c’est comme avec un gui custom).
-
GuiContainer pour le gui, pour le container il faut juste extend Container
-
C’est mieux de mettre GuiInventory et ContainerInventory, ça évitera de recopier le code, et sera plus simple lors des mises à jour de Mc.
-
Ok aymeric j’ai pas trouver ContainerInventory du coup j’ai mis Container juste.
J’ai fais ça du coup:
package com.CSC.net.GUI; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; public class containerGui extends Container{ @Override public boolean canInteractWith(EntityPlayer playerIn) { return false; } @Override public ItemStack slotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn) { return null; } }
package com.CSC.net.GUI; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; public class guiInv extends GuiInventory{ public guiInv(EntityPlayer p_i1094_1_) { super(p_i1094_1_); } @Override protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { this.fontRendererObj.drawString(I18n.format("container.crafting", new Object[0]), 86, 16, 4210752); } }
package com.CSC.net.item; import com.CSC.net.Main; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; public class bfouille extends Item { public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target) { if(target instanceof EntityPlayer) { EntityPlayer targetp = (EntityPlayer)target; playerIn.openGui(Main.instance, 0, playerIn.worldObj, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ); playerIn.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Vous fouillez: " + targetp.getDisplayNameString())); targetp.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + playerIn.getDisplayNameString() + " vous fouille.")); } return false; } }
J’ai pas essayer en multi c’est bon ?
-
Le Container ne marchera pas, il faut que tu l’extends celui vanilla, regarde dans le GuiInventory le container qui est appelé dans le super(…) du constructeur.
-
Bonjour,
Je travaille pour un projet de server AltisLife minecraft mais malheureusement nous n’avons pas réussi à faire de batons de fouilles.
Il nous en faudrait un dans les plus brèves délais car notre serveur ouvre dans 1 semaine et nous ne voyons pas comment réussir à y aboutir une bonne fois pour toutes.Pourquoi je fais ce poste ?
C’est simple parcequ’il nous faudrait de l’aide au plus vite pour faire ce baton de fouille.
Je ne vous demandes pas de me faire un plugins mais bien un script de baton de fouille permettant d’ouvrir l’inventaire de la personne quand on clique dessus mais aussi de ne pas pouvoir cliqué sour la personne quand elle est à plus de deux blocs de nous sinon il y aurai trop d’abus.Pour me contacter venir sur le TS à cette adresse: eu2.freets3.ovh:30176
-
@‘Xeolis’:
Bonjour,
Je travaille pour un projet de server AltisLife minecraft mais malheureusement nous n’avons pas réussi à faire de batons de fouilles.
Il nous en faudrait un dans les plus brèves délais car notre serveur ouvre dans 1 semaine et nous ne voyons pas comment réussir à y aboutir une bonne fois pour toutes.Pourquoi je fais ce poste ?
C’est simple parcequ’il nous faudrait de l’aide au plus vite pour faire ce baton de fouille.
Je ne vous demandes pas de me faire un plugins mais bien un script de baton de fouille permettant d’ouvrir l’inventaire de la personne quand on clique dessus mais aussi de ne pas pouvoir cliqué sour la personne quand elle est à plus de deux blocs de nous sinon il y aurai trop d’abus.Pour me contacter venir sur le TS à cette adresse: eu2.freets3.ovh:30176
Où est-ce que tu bloques ?
-
@‘SCAREX’:
@‘Xeolis’:
Bonjour,
Je travaille pour un projet de server AltisLife minecraft mais malheureusement nous n’avons pas réussi à faire de batons de fouilles.
Il nous en faudrait un dans les plus brèves délais car notre serveur ouvre dans 1 semaine et nous ne voyons pas comment réussir à y aboutir une bonne fois pour toutes.Pourquoi je fais ce poste ?
C’est simple parcequ’il nous faudrait de l’aide au plus vite pour faire ce baton de fouille.
Je ne vous demandes pas de me faire un plugins mais bien un script de baton de fouille permettant d’ouvrir l’inventaire de la personne quand on clique dessus mais aussi de ne pas pouvoir cliqué sour la personne quand elle est à plus de deux blocs de nous sinon il y aurai trop d’abus.Pour me contacter venir sur le TS à cette adresse: eu2.freets3.ovh:30176
Où est-ce que tu bloques ?
Je ne bloque pas je ne c’est pas faire c’est pour ca que je demande de l’aide
-
Si tu cherches quelqu’un pour faire ça pour toi, il faut aller dans la section recrutement.
-
@‘AymericRed’:
Le Container ne marchera pas, il faut que tu l’extends celui vanilla, regarde dans le GuiInventory le container qui est appelé dans le super(…) du constructeur.
Re,
Excusez moi du retard x)
Aymeric j’ai pas bien compris se que tu as dis.
Extends celui vanilla je vois pas du tout.
Et pour le super j’ai fais ça:
public class containerGui extends Container{ public containerGui(EntityPlayer p) { super(p.inventoryContainer);//prob ici } @Override public boolean canInteractWith(EntityPlayer playerIn) { return false; } @Override public ItemStack slotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn) { return null; }
Mais j’ai une érreur au super "The constructor Container(Container) is undefined.
-
Je que je voulais te dire, c’est de changer
java extends Container
par ```java
extends ContainerInventoryEDIT : ContainerPlayer au lieu de ContainerInventory.
-
@‘AymericRed’:
Je que je voulais te dire, c’est de changer
java extends Container
par ```java
extends ContainerInventoryEDIT : ContainerPlayer au lieu de ContainerInventory.
D’acc ^^
Du coup j’ai ça:
public class containerGui extends ContainerPlayer{ public containerGui(InventoryPlayer playerInventory, boolean localWorld, EntityPlayer player) { super(playerInventory, localWorld, player); } @Override public boolean canInteractWith(EntityPlayer playerIn) { return false; } @Override public ItemStack slotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn) { return null; } }
public class guiInv extends GuiInventory{ public guiInv(EntityPlayer p_i1094_1_) { super(p_i1094_1_); } @Override protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) { this.fontRendererObj.drawString(I18n.format("container.crafting", new Object[0]), 86, 16, 4210752); } }
public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target) { if(target instanceof EntityPlayer) { EntityPlayer targetp = (EntityPlayer)target; playerIn.openGui(Main.instance, 0, playerIn.worldObj, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ); playerIn.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Vous fouillez: " + targetp.getDisplayNameString())); targetp.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + playerIn.getDisplayNameString() + " vous fouille.")); } return false; }
j’ai pas essayer en multi du coup je peux pas vous dire si ça marche, ça semble bon ?
Et j’ai une question, je dois pas définir la classe guiInv ou containerGui ? Simplement avec ce code ça marche ? playerIn.openGui(Main.instance, 0, playerIn.worldObj, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ);
Merci
-
Ah mais en fait en repensant à tout, je suis en train de me dire que ça ne servait à rien de faire un container et un gui custom…
Quand tu fais “playerIn.openGui(Main.instance, 0, playerIn.worldObj, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ);”, les fonctions getServerGuiElement et getClientGuiElement de ton GuiHandler vont être appelées, et là il faut respectivement retournerjava return new ContainerPlayer(le joueur.inventory, world.isRemote, le joueur);
et ```java
return new GuiInventory(le joueur);J'espère que t'a compris car je sais pas si j'ai bien tout expliqué :)
-
@‘AymericRed’:
Ah mais en fait en repensant à tout, je suis en train de me dire que ça ne servait à rien de faire un container et un gui custom…
Quand tu fais “playerIn.openGui(Main.instance, 0, playerIn.worldObj, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ);”, les fonctions getServerGuiElement et getClientGuiElement de ton GuiHandler vont être appelées, et là il faut respectivement retournerjava return new ContainerPlayer(le joueur.inventory, world.isRemote, le joueur);
et ```java
return new GuiInventory(le joueur);J'espère que t'a compris car je sais pas si j'ai bien tout expliqué :)
Alors ouais j’ai compris je crois, par contre pour la variable pas trop je vois pas trop comment faire.
Du coup j’ai plus que le handler et la classe de l’item:
package com.CSC.net.item; import com.CSC.net.Main; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; public class bfouille extends Item { public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target) { System.out.println(Main.instance); if(target instanceof EntityPlayer) { EntityPlayer targetp = (EntityPlayer)target; playerIn.openGui(Main.instance, 0, playerIn.worldObj, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ); playerIn.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Vous fouillez: " + targetp.getDisplayNameString())); targetp.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + playerIn.getDisplayNameString() + " vous fouille.")); } return false; } }
package com.CSC.net.GUI; import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ContainerPlayer; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.IGuiHandler; public class GuiHandlerInv implements IGuiHandler{ @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPlayer(player.inventory, world.isRemote, player); } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GuiInventory(player); } }