Résolu Changer des propriétés déjà existantes
-
Salut tout le monde,
Désolé pour le titre du sujet qui n’est pas très clair mais je ne savais pas comment le dire. Je souhaiterais modifier des choses qui existent déjà dans Minecraft (propriétés d’armures, changer les drops etc.) mais que ce soit toujours compatible en multi donc sans changer les classes déjà existantes et je connais pas le nom de la méthode qui permet de le faire !
Merci d’avance
-
Tu souhaite changer quoi exactement ? Ça sera plus pratique pour nous si tu nous donne la liste de ce que tu veux changer.
Pour faire des changements sur quelques choses de minecraft sans toucher les classes il y a 3 méthodes :- Les events
- La réflexion (comme elias l’a expliqué, même chose avec le système de Block.blocklist[id] = null et de recréer le bloc)
- L’ams transformer, permet de replacer une classe par une autre (cf : playerAPI forge, NEi, TMI)
Les events sont le mieux, tu es sur de ne pas avoir de problème avec eux.
La réflexion, tu peux avoir quelques problèmes de communication, par exemple railcraft l’utilise pour modifier les items de cart, en conséquence si tu as railcraft en solo tu ne peux pas te connecté à un serveur forge qui n’a pas railcraft (donc pas très cool)
L’ams à pour désavantage de devoir être mit à jour souvent, si tu change la classe Block.java par exemple, et qu’une version de forge changer les patch de Block.java, ton mod ne sera plus compatible avec cette nouvelle version de forge … Également, en utilisant l’asm tu peux dire à dieu aux avantages du reobf en srg, car il faut compiler avec le reobf normal (logique, comme ça va remplacer une classe de minecraft)Le mieux est donc les event, et pour savoir si ce que tu veux faire est possible avec les event, il faut que tu me dise ce que tu souhaite faire exactement.
-
Avec cette ligne :
ObfuscationReflectionHelper.setPrivateValue(LaClassConcerné.class, manière d’y acceder, valeure, valeure);Exemple :
ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, value, 15);
De rien (Ce que je viens de faire, c’est pour un zoom)
-
Merci beaucoup, et tu mets cette ligne dans quelle partie du code? PreInit?
Ah et j’ai vu une autre méthode aussi, donner une ID nulle à un item ou autre déjà existant et créer une nouvelle classe de cet objet avec l’ancien ID pour pouvoir marquer ce que l’on veut, est-ce que cela fonctionne toujours en 1.6.2?
-
Pour répondre à ta première question, ce code se place dans un Tick Handler.
Ensuite, pour la seconde question je n’en sais rien, je n’ai pas testé.
-
Tu souhaite changer quoi exactement ? Ça sera plus pratique pour nous si tu nous donne la liste de ce que tu veux changer.
Pour faire des changements sur quelques choses de minecraft sans toucher les classes il y a 3 méthodes :- Les events
- La réflexion (comme elias l’a expliqué, même chose avec le système de Block.blocklist[id] = null et de recréer le bloc)
- L’ams transformer, permet de replacer une classe par une autre (cf : playerAPI forge, NEi, TMI)
Les events sont le mieux, tu es sur de ne pas avoir de problème avec eux.
La réflexion, tu peux avoir quelques problèmes de communication, par exemple railcraft l’utilise pour modifier les items de cart, en conséquence si tu as railcraft en solo tu ne peux pas te connecté à un serveur forge qui n’a pas railcraft (donc pas très cool)
L’ams à pour désavantage de devoir être mit à jour souvent, si tu change la classe Block.java par exemple, et qu’une version de forge changer les patch de Block.java, ton mod ne sera plus compatible avec cette nouvelle version de forge … Également, en utilisant l’asm tu peux dire à dieu aux avantages du reobf en srg, car il faut compiler avec le reobf normal (logique, comme ça va remplacer une classe de minecraft)Le mieux est donc les event, et pour savoir si ce que tu veux faire est possible avec les event, il faut que tu me dise ce que tu souhaite faire exactement.
-
Je n’ai pas d’idée précise de ce que je veux faire c’était pour me renseigner. Mais ça m’intéresserait de savoir comment modifier les propriétés des armures, des outils, des items en général, des blocs et tout ce qui touche aux mobs
-
Euh d’ailleurs, je tiens à préciser que je me suis assez fail dans ce que je t’ai montré, la valeur “value” est le float du zoom
-
Ça dépend vraiment de ce que tu veux faire
Par exemple, pour changer la résistance de la cobble j’ai juste à mettre ça dans InitBlock.cobblestone.setHardness(0.1F).setResistance(400F);
Et la cobble est très résistante aux explosions et se casse facilement.
C’est l’exemple le plus simple. Après pour les events, il y a déjà le tutoriel sur l’event drop qui est un bon exemple.
Si tu as besoin d’aide le jour ou tu voudra le faire, n’hésite pas à redemander, c’est plus simple pour moi de travailler sur un exemple concret (si je devais faire le tour de toute les possibilités, j’en ai sûrement pour plusieurs jours ><) -
D’accord merci beaucoup en tout cas (ça pourrait faire un bon tuto :p)
-
Salut, pour ma par je cherche a changer un craft … mais avec des event, (c’est se qu’il y a de mieu si j’ai bien compris :))
un petit coup de pousse svp ?PS: Plus précisément changer le résulta d’un craft par un bloque que j’ai créer x).
-
up
(Je sais que le sujet est en résolu, mais je ne vais pas créer un sujet exprès pour sa XD). -
Facile, tu recréé un craft avec le même craft, il va couvrir l’ancien craft, si c’est pas le cas mets dans le postInit.
-
Aussi simple que sa ? O_o, ok merci je teste sa tout de suite ^^.
Je me coucherai moin bête se soir x).
Dsl mais sa ne fonctionne pas tout cout, même si je le mais dans le @postInit XD
Que faire ? x) -
Dans ce cas supprime la recette et recréé-la après :
http://www.minecraftforge.net/forum/index.php/topic,7146.msg58748.html#msg58748 -
Je te remercie, sauf que je ne comprend absolument rien au code … je vais cherchai mais ce n’est pas gagné.
Le “List” je l’importe du qu’elle par contre ? x)
java.awt
java.util
scala.collection.immutable -
Tu l’importes depuis java.util
-
Oui je sais, robin me la dit dans le tchat du forum ^^.
-
D’accord