Texture item
-
@‘Sebenf0rce’:
@‘robin4002’:
Faudrait passer par un event alors.
Ah d’accord

J’ai essayé de voir la liste des event. J’ai trouvé celui là qui pourrait m’être utile mais il ne semble pas exister en 1.11 : PlayerUseItemEventCelui là :
PlayerInteractEvent.RightClickBlockIl suffit de cancel l’event et d’afficher ton Gui.
-
@‘Sebenf0rce’:
@‘robin4002’:
Faudrait passer par un event alors.
Ah d’accord

J’ai essayé de voir la liste des event. J’ai trouvé celui là qui pourrait m’être utile mais il ne semble pas exister en 1.11 : PlayerUseItemEventCelui là :
PlayerInteractEvent.RightClickBlockIl suffit de cancel l’event et d’afficher ton Gui.
Merci, par contre comment je peux vérifier que le block a été right click avec mon item ?
-
Avec l’instance du joueur tu peux vérifier si l’item qu’il tient quand la main est ton item
-
@‘BrokenSwing’:
Avec l’instance du joueur tu peux vérifier si l’item qu’il tient quand la main est ton item
J’ai réussis à faire ça (est-ce que je suis sur la bonne piste ?)
public class EventPlayerUseItem { @SubscribeEvent public void onRightClick(PlayerInteractEvent.RightClickBlock event) { if (event.getItemStack() != null) { Item item = event.getItemStack().getItem(); if (item == Items.chestExplorer) { event.setCanceled(true); player.openGui(Main.instance, 0, world, pos.getX(), pos.getY(), pos.getZ()); } } } }Seulement je ne sais pas comment récupérer l’instance du player du coup la ligne suivante ne fonctionne pas : player.openGui(Main.instance, 0, world, pos.getX(), pos.getY(), pos.getZ());
-
event.getPlayer() ?
-
Alors j’ai du nouveau !
Voici ma classe maintenant :
public class EventPlayerUseItem { @SubscribeEvent public void onRightClick(PlayerInteractEvent.RightClickBlock event) { System.out.println("on rentre dans l'event"); if (event.getItemStack() != null) { Item item = event.getItemStack().getItem(); if (item == Items.chestExplorer) { System.out.println("cliqué par un chest explorer"); event.setCanceled(true); event.getEntityPlayer().openGui(Main.instance, 0, event.getWorld(), event.getPos().getX(), event.getPos().getY(), event.getPos().getZ()); } } } }On voit apparaître mon gui cependant tout de suite après le gui du coffre apparait et je ne vois pas pourquoi.
C’est bien event.setCanceled(true); ?Edit :
J’ai trouvé ça :
@SubscribeEvent public void onGuiOpen(GuiOpenEvent event) { System.out.println("A gui is open !"); if(event.) { //si je tiens l'objet } }Je peux peut être utilisé ça pour cancel l’event ? Cependant je ne peux pas faire de event.getItemStack() comme avec l’event RightClickBlock pour vérifier que mon item est utilisé. Y a t’il une autre solution pour vérifier si mon item est utilisé ?
-
Tu sembles être côté client, regardes la liste des évents sur ce forum si tu peux cancer ou non ces évents.
Pour vérifier l’item penses à Minecraft.getMinecraft().thePlayer.itemInHand ou je ne sais plus très bien et tu check comme ça
-
J’ai donc modifier la classe qui est comme ceci maintenant :
public class EventPlayerUseItem { @SubscribeEvent public void onRightClick(PlayerInteractEvent.RightClickBlock event) { System.out.println("on rentre dans l'event"); if (event.getItemStack() != null) { Item item = event.getItemStack().getItem(); if (item == Items.chestExplorer) { System.out.println("cliqué par un chest explorer"); event.setCanceled(true); event.getEntityPlayer().openGui(Main.instance, 0, event.getWorld(), event.getPos().getX(), event.getPos().getY(), event.getPos().getZ()); } } } @SubscribeEvent public void onGuiOpen(GuiOpenEvent event) { if(event.getGui() instanceof GuiChest && Minecraft.getMinecraft().player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND).getItem() == Items.chestExplorer) { event.setCanceled(true); } } }Il y a un petit problème, en effet lors de la première ouverture du coffre il ne se passe rien, mon inventaire disparaît et il y a une erreur dans la console.
Lorsque je reclick sur le coffre cette fois mon gui s’ouvre bien.Voici l’erreur obtenu :
[13:13:58] [Client thread/FATAL]: Error executing task java.util.concurrent.ExecutionException: java.lang.IndexOutOfBoundsException: Index: 46, Size: 46 at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_141] at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_141] at net.minecraft.util.Util.runTask(Util.java:30) [Util.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1117) [Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:407) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_141] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_141] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_141] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_141] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_141] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_141] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_141] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_141] at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?] at GradleStart.main(GradleStart.java:26) [start/:?] Caused by: java.lang.IndexOutOfBoundsException: Index: 46, Size: 46 at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_141] at java.util.ArrayList.get(Unknown Source) ~[?:1.8.0_141] at net.minecraft.inventory.Container.getSlot(Container.java:135) ~[Container.class:?] at net.minecraft.inventory.Container.setAll(Container.java:559) ~[Container.class:?] at net.minecraft.client.network.NetHandlerPlayClient.handleWindowItems(NetHandlerPlayClient.java:1306) ~[NetHandlerPlayClient.class:?] at net.minecraft.network.play.server.SPacketWindowItems.processPacket(SPacketWindowItems.java:72) ~[SPacketWindowItems.class:?] at net.minecraft.network.play.server.SPacketWindowItems.processPacket(SPacketWindowItems.java:13) ~[SPacketWindowItems.class:?] at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_141] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_141] at net.minecraft.util.Util.runTask(Util.java:29) ~[Util.class:?] … 15 more [13:13:58] [Client thread/FATAL]: Error executing task java.util.concurrent.ExecutionException: java.lang.IndexOutOfBoundsException: Index: 54, Size: 46 at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_141] at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_141] at net.minecraft.util.Util.runTask(Util.java:30) [Util.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1117) [Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:407) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_141] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_141] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_141] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_141] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_141] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_141] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_141] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_141] at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?] at GradleStart.main(GradleStart.java:26) [start/:?] Caused by: java.lang.IndexOutOfBoundsException: Index: 54, Size: 46 at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_141] at java.util.ArrayList.get(Unknown Source) ~[?:1.8.0_141] at net.minecraft.inventory.Container.getSlot(Container.java:135) ~[Container.class:?] at net.minecraft.inventory.Container.putStackInSlot(Container.java:551) ~[Container.class:?] at net.minecraft.client.network.NetHandlerPlayClient.handleSetSlot(NetHandlerPlayClient.java:1262) ~[NetHandlerPlayClient.class:?] at net.minecraft.network.play.server.SPacketSetSlot.processPacket(SPacketSetSlot.java:33) ~[SPacketSetSlot.class:?] at net.minecraft.network.play.server.SPacketSetSlot.processPacket(SPacketSetSlot.java:11) ~[SPacketSetSlot.class:?] at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_141] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_141] at net.minecraft.util.Util.runTask(Util.java:29) ~[Util.class:?] … 15 more -
Mhh je ne vois pas désolé, sinon penses à la valise Java pour ton code

-
Ah mince merci quand même

Quelqu’un d’autre a une idée ?Edit :
```java
SubscribeEvent
public void onGuiOpen(GuiOpenEvent event) {
if(event.getGui() instanceof GuiChest && Minecraft.getMinecraft().player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND).getItem() == Items.chestExplorer) {
event.setCanceled(true);
//Minecraft.getMinecraft().player.openGui(Main.instance, 0, Minecraft.getMinecraft().world, event., event.getPos().getY(), event.getPos().getZ());
}
}c'est le cancel de cette méthode qui fait tout bugué en fait est ce que vous savez par hasard si il y a une autre manière de cancel l'ouverture du gui ? -
Quand Benjamin Loison te dis de penser aux Balises c’est pas pour rien ^^ C’est beaucoup plus lisible pour les personnes qui t’entourent elle sont à mettre, au début de ton code tu mets :
:::
[.java]
:::et à la fin
:::
[./java]
:::SANS LE point bien évidemment…
