Création d'un Chest Detector
-
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
-
Je veux dire par la que si c’est pour copier autant bien le faire et pas demander –’ C’est pas une incitation mais une constatation
-
moscaphone421, le Chest Detector à de grosses diffèrence par rapport à l’Unclaim Finder de palladium, même si les deux ont à peux près la même utilité. Et BrokenSwing, comment je fait pour faire tt ça? Pourais tu m’aider stp.
-
Censor ça reste sur un principe égal, il y a des milliards d’autres façon, c’est pas comme ça que tu vas attirer du monde.
Comme je l’ai toujours dis : Pourquoi allé sur ce serveur alors que l’autre a les meme choses avec du monde ? -
Il y a plus que le Chest Detector sur mon serveur, il y a beaucoup d’autres ajouts.