Création d'un Chest Detector
-
Les balises code seraient + appropriées, je pense.
-
Mettre les balises et pas TOUT les logs seraient plus approprié
-
C quoi les balises?
-
[java] Pour le code java
Pour le code ** Pour mettre en gras * Pour mettre en italique * Pour souligner etc ... Et après il faut fermer les balises en les réécrivant de la même façon mais avec un slash devant le nom de la balises, par exemple pour les listes c'est
-
Quelle patience BrokenSwing, c’est incroyable, je trouve !
-
J’ai modifié le message.
Tu as visiblement des erreurs dans ton code, normalement eclipse te les indiques. -
J’ai finalement régler les erreurs (c’était tout bête, j’avais juste oublier de faire tout les imports) mais maintenant quand je lance minecraft le jeu fait comme si l’item n’existait pas.
-
Tu l’as ajouté dans un onglet créatif ? Au pire essai de te le give, il doit s’appeler tonModID:sonNom
-
Il n’existe même pas dans le /give.
-
Envoie ta classe principale + la classe de ton objet dans des balises java
-
package ErderionPackage.init; import java.util.ArrayList; import java.util.List; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.entity.Entity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.World; public class ItemTileEntityFinder extends Item { public static Item tileEntityFinder; @EventHandler public void preInit(FMLPreInitializationEvent event) { tileEntityFinder= new ItemTileEntityFinder() .setUnlocalizedName("chest_detector"); GameRegistry.registerItem(tileEntityFinder, "tileEntityFinder"); } @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean held) { if(held) { List <tileentity>tiles = world.loadedTileEntityList; ArrayList <tileentity>tilesNear = new ArrayList<tileentity>(); ChunkCoordIntPair entityChunk = world.getChunkFromBlockCoords((int)entity.posX, (int)entity.posZ).getChunkCoordIntPair(); for(TileEntity tile : tiles) { ChunkCoordIntPair tileChunk = world.getChunkFromBlockCoords(tile.xCoord, tile.zCoord).getChunkCoordIntPair(); if(tileChunk.chunkXPos >= entityChunk.chunkXPos - 2 && tileChunk.chunkXPos <= entity.chunkCoordX + 2 && tileChunk.chunkZPos >= entity.chunkCoordZ - 2 && tileChunk.chunkZPos <= entity.chunkCoordZ + 2) { tilesNear.add(tile); } } } } public static void init() { // TODO Auto-generated method stub } public static void register() { // TODO Auto-generated method stub } }
La classe de mon item
package ErderionPackage; import ErderionPackage.Proxy.CommonProxy; import ErderionPackage.init.BlockMod; import ErderionPackage.init.ItemTileEntityFinder; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION) public class Erderion { @SidedProxy(clientSide = Reference.CLIENT_PROXY, serverSide = Reference.SERVER_PROXY) public static CommonProxy proxy; @EventHandler public void preInit(FMLPreInitializationEvent event) { BlockMod.init(); BlockMod.register(); ItemTileEntityFinder.init(); ItemTileEntityFinder.register(); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRenders(); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }
La classe principale de mon mod</tileentity></tileentity></tileentity>
-
Aïe aïe aïe ….
public class ItemTileEntityFinder extends Item { @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean held) { if(held) { List <tileentity>tiles = world.loadedTileEntityList; ArrayList <tileentity>tilesNear = new ArrayList<tileentity>(); ChunkCoordIntPair entityChunk = world.getChunkFromBlockCoords((int)entity.posX, (int)entity.posZ).getChunkCoordIntPair(); for(TileEntity tile : tiles) { ChunkCoordIntPair tileChunk = world.getChunkFromBlockCoords(tile.xCoord, tile.zCoord).getChunkCoordIntPair(); if(tileChunk.chunkXPos >= entityChunk.chunkXPos - 2 && tileChunk.chunkXPos <= entity.chunkCoordX + 2 && tileChunk.chunkZPos >= entity.chunkCoordZ - 2 && tileChunk.chunkZPos <= entity.chunkCoordZ + 2) { tilesNear.add(tile); } } } } }
@Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.VERSION) public class Erderion { @SidedProxy(clientSide = Reference.CLIENT_PROXY, serverSide = Reference.SERVER_PROXY) public static CommonProxy proxy; @Instance public static Erderion instance; @EventHandler public void preInit(FMLPreInitializationEvent event) { BlockMod.init(); BlockMod.register(); // A placer dans BlockMod.init() // tileEntityFinder= new ItemTileEntityFinder() .setUnlocalizedName("chest_detector"); // A placer dans BlockMod.register() // GameRegistry.registerItem(tileEntityFinder, "tileEntityFinder"); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRenders(); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } } ```</tileentity></tileentity></tileentity>
-
Le BlockMod marche, c’est le TileEntityFinder qui ne marche pas.
-
Ah ok, j’ai compris comment tu procédais, c’est
pas forcément la meilleur des manièresc’est pas propre du tout, mais admettons :
Tu aurais donc :public class ItemTileEntityFinder extends Item { public static Item tileEntityFinder; @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean held) { if(held) { List <tileentity>tiles = world.loadedTileEntityList; ArrayList <tileentity>tilesNear = new ArrayList<tileentity>(); ChunkCoordIntPair entityChunk = world.getChunkFromBlockCoords((int)entity.posX, (int)entity.posZ).getChunkCoordIntPair(); for(TileEntity tile : tiles) { ChunkCoordIntPair tileChunk = world.getChunkFromBlockCoords(tile.xCoord, tile.zCoord).getChunkCoordIntPair(); if(tileChunk.chunkXPos >= entityChunk.chunkXPos - 2 && tileChunk.chunkXPos <= entity.chunkCoordX + 2 && tileChunk.chunkZPos >= entity.chunkCoordZ - 2 && tileChunk.chunkZPos <= entity.chunkCoordZ + 2) { tilesNear.add(tile); } } } } public static void init() { tileEntityFinder= new ItemTileEntityFinder() .setUnlocalizedName("chest_detector"); } public static void register() { GameRegistry.registerItem(tileEntityFinder, "tileEntityFinder"); } }
Et pour ta classe principale, garde la première que tu m’as envoyée</tileentity></tileentity></tileentity>
-
Maintenant, le Chest Detector est réapparu mais il ne marche pas, c’est juste un item inutile.
-
Qui t’as dit qu’on avait terminé ? Là tu récupérer les TE autour de toi mais tu n’en fait rien, il faut les afficher maintenant … Et c’est pas le plus simple vu le design que tu veux faire …
-
Donc qu’est ce que je dois faire ^^
-
Soit tu fais envoie du serveur vers le client le nombre de TE pour qu’il l’affiche ensuite, soit tu stock ce nombre dans les tags NBT du l’objet et tu l’affiche ensuite.
Pour afficher, dans tous les cas tu devra passer par l’event RenderGameOverlayEvent -
Alors encore plus simple : Tu décompile Paladium et tu as ta réponse, (C’est pas original si tu veux de l’originalité faut réflechir a quelque chose de jamais sortie sur le marché)
Hormis ça il te manque un overlay ou un chatcomponent en fonction de se qur tu veux -
Uhmm … C’est bien ça mosca, dire aux gens de décompiler un autre mod pour choper les sources, laisse-le apprendre, au moins ça lui fait un peu pratiquer