Résolu Ouvrir le guicrafting sur un tileEntity
-
Bonjour,
je cherche a ouvrir le GuiCrafting vanilla de minecraft sur un tileEntity que j ai crée tout ce que j ai essayer jusque maintenant soit ca fonctionne pas soit le gui s affiche 1/2 seconde et disparait si vous avez une idée je suis preneur
dans le block:@Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metadata, float what, float these, float are) { TileEntity tileEntity = world.getTileEntity(x, y, z); if (tileEntity == null || player.isSneaking()) { return false; } //code to open gui explained later player.displayGUIWorkbench(x, y, z); return true; }
Handler:
public class ViruZGuiHandler implements IGuiHandler{ @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile_entity = world.getTileEntity(x, y, z); if(tile_entity instanceof TileEntityWorkBench){ return new ContainerWorkbench(player.inventory, world, x, y, z); } return null; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile_entity = world.getTileEntity(x, y, z); if(tile_entity instanceof TileEntityWorkBench){ return new GuiCrafting(player.inventory, world, x, y, z); } return null; } } register handler:
@EventHandler
public void load(FMLInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(new VirusZeventHandler());
NetworkRegistry.INSTANCE.registerGuiHandler(this, new ViruZGuiHandler());
if(event.getSide().isClient())
{
FMLCommonHandler.instance().bus().register(new KeyHandler());}
} -
As tu enregistrer ton tileEntity ? as tu bien «rattaché» celui-ci à ton bloc ?
donne nous également la classe de ton bloc et utilise les balises java, celui rend le code un peu plus lisible.
Sinon as tu regarder comment c’est fait dans Minecraft en regardant le code du coffre ou du four
-
Il faut faire ton propre gui. Le gui de base du workbench ne peut pas être utilisé autre part que sur le bloc de Minecraft
-
Voici la classe du block:
package virusz.block; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiCrafting; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import virusz.core.VirusZCore; import virusz.proxy.client.ClientProxy; import virusz.tileEntity.TileEntityWorkBench; public class BlockWorkbench extends Block { public BlockWorkbench(Material material) { super(material); this.setHardness(1.0F); } @Override public boolean hasTileEntity(int metadata) { return true; } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityWorkBench(); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metadata, float what, float these, float are) { TileEntity tileEntity = world.getTileEntity(x, y, z); if (tileEntity == null || player.isSneaking()) { return false; } player.displayGUIWorkbench(x, y, z); return true; } public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) { if (stack.getItemDamage() == 0) { TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileEntityWorkBench) { int direction = MathHelper .floor_double((double) (living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; ((TileEntityWorkBench) tile).setDirection((byte) direction); } } } @Override public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) { if ((axis == ForgeDirection.UP || axis == ForgeDirection.DOWN) && !world.isRemote && world.getBlockMetadata(x, y, z) == 0) { TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileEntityWorkBench) { TileEntityWorkBench tileWorkbech = (TileEntityWorkBench) tile; byte direction = tileWorkbech.getDirection(); direction++; if (direction > 3) { direction = 0; } tileWorkbech.setDirection(direction); return true; } } return false; } public ForgeDirection[] getValidRotations(World world, int x, int y, int z) { return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[] { ForgeDirection.UP, ForgeDirection.DOWN } : ForgeDirection.VALID_DIRECTIONS; } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } public int getRenderType() { return ClientProxy.renderInventoryTESRID; } }
Créé les classe je veut bien mais même comme ca ca marche pas si tu as un tuto je suis preneur,
ou le tile entity est bien enregistrerGameRegistry.registerTileEntity(TileEntityWorkBench.class, "workbench");
et j ai regarder dans minecraft ils utilise la méthode que j utilise au dessus pour ouvrir le gui j’avoue ne pas trop comprendre comment marche l’ ouverture des gui en 1.7.2
-
-
Merci,
ca fonctionne enfin je passe le sujet en resolut