Création d'un Chest Detector
-
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.
-
J’écris un deuxième poste pour te dire :
A partir de ton code il faut un event de render : RenderGameEvent il me semble que tu execute que du coter client (le serveur n’a pas d’image a afficher)
Ensuite dedans tu fais un drawstring fontrender il me semble aussi
Après tu draw une image ça change de 1.8.9 a 1.7.10 me semble aussi
Quelques recherche forum et tu trouveras ensuite tu prends la valeur que tu as avec ton item dans la main et tu affiche dans le string qui se dessine
N’oublie pas deux choses
L’event ne dois etre la que lorsque tu as l’item dans la main
Ne foire pas le reset en fonction des déplacement que ça ne s’ajoute pas en fonction du mouvement de ton persoEdit : sinon a la place de l’item pour te démarquer pourquoi ne pas faire un gui qui reproduit la map avec des pourcentage / chunks
Ou bien une perle comme celle de l’end qui te montre le portail mais elle pointe les tiles ?
-
Ok merci, mais je met tout ça où?
-
Les events ? Dans la classe que tu veux il faut juste créer un objet où il y a les fonctions voulues. Personnellement je te conseille de créer une classe à part
-
@‘BrokenSwing’:
Tu as la classe de ton Item prête ? (Item qui ne fait rien pour le moment)
Si c’est le cas, tu override la méthode onUpdate, ce qui revient à ré-écrire la fonction onUpdate dans la classe de ton Item :public ClassDeTonItem extends Item { //Ici tu as peut-être ton constructeur, je ne le met pas ici, c'est pas obligatoire, si tu l'as garde le @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean held) { //Il me semble que les argument correspondent à ça, j'ai pas les bon mapping if(held) { //Si le joueur a l'objet dans sa main //Ici grâce à l'argument world tu peux récupérer les TE du monde qui sont, attention, chargées, si tu veux aussi avoir accès à celles qui ne sont pas chargées, tu vas devoir utiliser la réfléction List <tileentity>tiles = world.loadedTileEntityList; //Import java.util.List ArrayList <tileentity>tilesNear = new ArrayList<tileentity>(); //On va y stocker les TE proches ChunkCoordIntPair entityChunk = world.getChunkFromBlockCoords((int)entity.posX, (int)entity.posZ).getChunkCoordIntPair(); //Les coordonnées de chunk du joueur for(TileEntity tile : tiles) { ChunkCoordIntPair tileChunk = world.getChunkFromBlockCoords(tile.xCoord, tile.zCoord).getChunkCoordIntPair(); //Les coordonnées de chunk de la TE if(tileChunk.chunkXPos >= entityChunk.chunkXPos - 2 && tileChunk.chunkXPos <= entity.chunkCoordX + 2 && tileChunk.chunkZPos >= entity.chunkCoordZ - 2 && tileChunk.chunkZPos <= entity.chunkCoordZ + 2) { tilesNear.add(tile); } } } } ```</tileentity></tileentity></tileentity>Bonjour, j’aimerais utiliser ceci mais j’aimerais savoir dans quelle variable est stocké le nombre de TE et si il n’y en a pas ce que je dois mettre pour en avoir une. Merci