Résolu Load .obj
-
@‘robin4002’:
Heu what
Exactement, c’est aussi en train de me rendre fou :huh:
-
Pour des codes d’aide pour OpenGL: https://github.com/jglrxavpok/jglrxavpok_lwjgl_utils
Pour UNIQUEMENT le .jar pour charger les .obj: https://github.com/jglrxavpok/jglrxavpok_lwjgl_utils/raw/master/glutils.jarCharger un .obj:
model = new GLUtils("/cheminVersLeFichierObj");
Dessiner un .obj:
model.render();
-
Je viens de modifier mon poste, en fait enleve le extends BlockContainer et mets un extends Block
D’ailleurs utilise plutôt la méthode de forge :
public TileEntity createTileEntity(World world, int metadata)
pour créer le tile entity. -
Peut importe, je verrais plus tard, je suis devant un plus grand problème
Quand je clique sur mon BlockContainer, la fenêtre debug s’ouvre, et m’indique cette ligne
return new CraftContainer(player, world, x, y, z);
dans le GuiHandler, aucune erreur dans la console :dodgy:
Edit: Cool, je vais tester ça___
@‘jglrxavpok’:Pour des codes d’aide pour OpenGL: https://github.com/jglrxavpok/jglrxavpok_lwjgl_utils
Pour UNIQUEMENT le .jar pour charger les .obj: https://github.com/jglrxavpok/jglrxavpok_lwjgl_utils/raw/master/glutils.jarCharger un .obj:
model = new GLUtils("/cheminVersLeFichierObj");
Dessiner un .obj:
model.render();
Super, je vais tester aussi
-
En mode debug, l’erreur s’affiche pas tant que tu as pas relancé l’application
-
@‘jglrxavpok’:
En mode debug, l’erreur s’affiche pas tant que tu as pas relancé l’application
Je sais bien, mais j’ai quand même pas d’erreur
-
Vérifie que tu as pas de breakpoints (ça affiche un rond dans la colonne de gauche)
-
Si justement, j’en ai un
-
Retire le, alors ^^
-
Jveu bien, mais il se met tout seul
Edit: Bon c’est ok, j’avais un nullPointer dans la classe Container, il me le disais pas je sais pas pourquoi
-
T’es sûr ? o.O
-
C’est résolut(cf:Post Précédent)
Par contre, j’ai toujours mon problème de TileEntity qui se supprimer pasEDIT: Ok, j’ai trouver :), j’avais Override la classe BreakBloc sans faire un super dedans, j’ai honte
Classe du block:
package com.yvelis.mworldcraft.blocks; import com.yvelis.mworldcraft.common.Mmain; import com.yvelis.mworldcraft.tileEntity.SolarChargerTileEntity; import cpw.mods.fml.common.network.FMLNetworkHandler; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Icon; import net.minecraft.world.World; public class SolarChargerBlock extends Block { private Icon top; private Icon other; private Icon bottom; public SolarChargerBlock(int id, int capacity) { super(id, Material.glass); } @Override public TileEntity createTileEntity(World world, int meta) { return new SolarChargerTileEntity(); } @Override public boolean hasTileEntity(int metadata) { return true; } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9) { FMLNetworkHandler.openGui(player, Mmain.m_instance, 0, world, x, y, z); return true; } @Override public void breakBlock(World world, int x, int y, int z, int par5, int par6) { TileEntity tile = world.getBlockTileEntity(x, y, z); ItemStack stack = null; if(tile instanceof SolarChargerTileEntity ) stack = ((SolarChargerTileEntity) tile).getStackInSlot(0); if(stack == null) return; EntityItem item = new EntityItem(world, x, y, z, stack); world.spawnEntityInWorld(item); } @Override public void registerIcons(IconRegister register) { super.registerIcons(register); top = register.registerIcon("mworldcraft:solarChargerTop"); other = register.registerIcon("mworldcraft:solarChargerOther"); bottom = register.registerIcon("mworldcraft:solarChargerBottom"); } @Override public Icon getIcon(int side, int par2) { if(side == 0) return bottom; if(side == 1) return top; return other; } }
classe du tile:
package com.yvelis.mworldcraft.tileEntity; import com.yvelis.mworldcraft.common.Mmain; import com.yvelis.mworldcraft.gui.SolarChargerGui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet132TileEntityData; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.EnumSkyBlock; import net.minecraft.world.World; public class SolarChargerTileEntity extends TileEntity implements IInventory { private ItemStack m_battery; private int m_chargeStat; public ItemStack getBattery() { return m_battery; } public void setBattery(ItemStack battery) { this.m_battery = battery; } @Override public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); m_chargeStat = tag.getInteger("ChargeStat"); NBTTagCompound stackTag = new NBTTagCompound(); stackTag = (NBTTagCompound) tag.getTag("BatteryItemStack"); m_battery = ItemStack.loadItemStackFromNBT(stackTag); } @Override public void writeToNBT(NBTTagCompound tag) { super.writeToNBT(tag); tag.setInteger("ChargeStat", m_chargeStat); NBTTagCompound stackTag = new NBTTagCompound(); if(m_battery != null) m_battery.writeToNBT(stackTag); tag.setTag("BatteryItemStack", stackTag); } @Override public void updateEntity() { this.chargeItem(); super.updateEntity(); } private void chargeItem() { if(worldObj.isRemote) return; int chargeSpeed = 100; int lightLevel = calculLightValue(worldObj, xCoord, yCoord, zCoord); if(lightLevel > 0) chargeSpeed /= lightLevel; if(m_battery != null && m_battery.itemID == Mmain.m_battery.itemID && m_chargeStat >= chargeSpeed && lightLevel > 0) { int actualDamage = m_battery.getItemDamage(); m_battery.setItemDamage(actualDamage - 1); m_chargeStat = 0; } m_chargeStat++; } public static int calculLightValue(World world, int posX, int posY, int posZ) { int skyLightValue = (int) world.getSavedLightValue(EnumSkyBlock.Sky, posX, posY + 1, posZ) - world.skylightSubtracted; int blockLightValue = (int) world.getSavedLightValue(EnumSkyBlock.Block, posX, posY + 1, posZ); if(!(world.getWorldTime() % 24000 < 13000)) skyLightValue = 0; if(world.isRemote) System.out.println("Client time = " + world.getWorldTime()); else System.out.println("Server time = " + world.getWorldTime()); int value = 0; if(skyLightValue >= 15) value = 8; else if(skyLightValue >= 14) value = 7; else if(skyLightValue >= 10) value = 6; else if(skyLightValue >= 8 || blockLightValue >= 14) value = 5; else if(skyLightValue >= 6 || blockLightValue >= 10) value = 4; else if(skyLightValue >= 4 || blockLightValue >= 8) value = 3; else if(skyLightValue >= 2 || blockLightValue >= 5) value = 2; else if(skyLightValue >= 1 || blockLightValue >= 1) value = 1; return value; } @Override public int getSizeInventory() { return 1; } @Override public ItemStack getStackInSlot(int i) { return m_battery; } @Override public ItemStack decrStackSize(int i, int j) { ItemStack item = m_battery.copy(); m_battery = null; return item; } @Override public ItemStack getStackInSlotOnClosing(int i) { System.out.println("Drop"); return m_battery; } @Override public void setInventorySlotContents(int i, ItemStack itemstack) { m_battery = itemstack; } @Override public String getInvName() { return "Charger Solaire"; } @Override public boolean isInvNameLocalized() { return false; } @Override public int getInventoryStackLimit() { return 1; } @Override public boolean isUseableByPlayer(EntityPlayer entityplayer) { return true; } @Override public void openChest() { } @Override public void closeChest() { } @Override public boolean isItemValidForSlot(int i, ItemStack itemstack) { System.out.println("Test"); if(itemstack != null && itemstack.getItem().itemID == Mmain.m_battery.itemID) return true; return false; } }
-
Ha, je viens de voir pourquoi :
@Override public void breakBlock(World world, int x, int y, int z, int par5, int par6) { TileEntity tile = world.getBlockTileEntity(x, y, z); ItemStack stack = null; if(tile instanceof SolarChargerTileEntity ) stack = ((SolarChargerTileEntity) tile).getStackInSlot(0); if(stack == null) return; EntityItem item = new EntityItem(world, x, y, z, stack); world.spawnEntityInWorld(item); }
Comme tu as ajouté la fonction breakBlock, la fonction dans Block.java n’est plus effectué. Pour résoudre le problème :
@Override public void breakBlock(World world, int x, int y, int z, int par5, int par6) { TileEntity tile = world.getBlockTileEntity(x, y, z); ItemStack stack = null; if(tile instanceof SolarChargerTileEntity ) stack = ((SolarChargerTileEntity) tile).getStackInSlot(0); if(stack == null) return; EntityItem item = new EntityItem(world, x, y, z, stack); world.spawnEntityInWorld(item); super.breakBlock(world, x, y, z, par5, par6); }
-
Mdr, j’ai trouver en même temps ^^
Merci beaucoup quand même !!
(J’ai éditer mon post 1 seconde avant de voir le tien)Edit: Jvai maintenant tester ce que jglrxavpok à fait, j’ai poser mes question ici pour éviter d’ouvrir 10milles posts
-
@‘Mugiwaxar’:
Edit: Jvai maintenant tester ce que jglrxavpok à fait, j’ai poser mes question ici pour éviter d’ouvrir 10milles posts
Je suis en train de préparer un post pour l’API
-
Ok terrible !
Des que je rentre ce soir je test ! -
-
T’es vraiment un chef
-
Merci
-
par contre petite question: avec le code de mugiwaxar au tout debut du topic, on peut appliquer ce rendu sur un bloc?