Plusieurs questions/problèmes
-
Pour mettre un tag il faut un tile entity. Beaucoup trop lourd. Autant utiliser un bloc de lave custom.
Remplacer avec le générateur ça ne va pas du tout, car ton code n’est pas exécuté pour toutes la maps mais avec des valeurs aléatoires.
Il faudrait plutôt passer par un event.Et changer directement les propriétés de l’eau serait surement plus simple.
-
Arrête d’utiliser des WorldGenerator, tu n’en a pas besoin dans un premier temps.
Le WorldGenerator ce sera surement de l’optimisation lorsque tu auras compris les mécaniques internes de chargement de terrain Minecraft.
Pour l’instant tu n’as besoin que de l’event [c]ChunkEvent.Load event[/c] et de la méthode getBlockState() / setBlockState() de l’attribut event.world. -
Salut
Je vais juste ajouter des dégâts à l’eau, ça sera plus simple (je pourrai peut-être me permettre de remplacer l’eau par la lave plus tard, quand j’aurai plus de connaissances).J’ai créer ma source de dégâts, mais je ne sais pas comment l’appliquer à l’eau. J’ai regardé la liste des events, mais rien ne semble pouvoir répondre à mon problème. J’ai donc pensé à mettre l’eau vanilla à null et la remplacer par une eau custom, mais 2 problèmes se sont posés à moi :
- quand j’ai créer ma lave custom (que j’ai ensuite supprimer) en 1.7, j’ai peiné mais arrivé. Mais quand j’ai voulu la mettre en 1.8, les problèmes commencent. Mais ce n’est pas trop un problème, j’aurai juste qu’à chercher dans les classes vanilla et sur Internet.
- comme dit ici
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)
, ça ne sera pas très bien. Après, je pourrai faire (si c’est possible) une condition qui vérifie sur le serveur a le mod d’installé.
Du coup, je suis bloqué

PS : j’aurai aussi une question. Quand j’ai créé mes dégâts, j’ai vu qu’on pouvait mettre .lava après waterDamageSource = new DamageSource(“waterDamageSource”);. Du coup, ça fait les mêmes dégâts que la lave ou pas ? Je voulais testé directement en jeu, mais vu mes problèmes ci-dessus, …
EDIT : D’ailleurs, même si je remplace l’eau vanilla par mon eau custom, je saurais quand même pas appliquer ma source de dégâts. Donc dans tous les cas, je sais pas comment faire …
-
Avec LivingUpdateEvent, if(event.living.isInWater()) -> event.living.attackFrom(ton damage source)
Pas besoin de remplacer l’eau. -
C’est tout ? J’avais cru que c’était plus compliqué
Je n’arrive pas à bien créer ma source de dégâts. J’arrive à faire en sorte que ça m’enlève un cœur mais je n’arrive pas à mettre le joueur en feu. J’ai testé :.inFire , .onFire , .setFireDamage() ``` mais rien ne marche J'allais vous demander pourquoi quand je me suis dit que c'est de l'eau. Et le principe de l'eau, c'est d'éteindre le feu. Du coup, je sais pas si ça serait possible de mettre le joueur en feu quand il est dans l'eau. Concernant la question 2 du 1er post (changer un mob par un autre), j'ai réussi à récupérer la position et la rotation du mob et le tuer, mais je ne sais pas comment faire pour en faire spawner un autre. Voilà ce que j'ai utilisé (je pense que c'est le bon code, mais j'aimerai avoir une confirmation svp) : ```java @SubscribeEvent public void apocalypseMobReplace(EntityJoinWorldEvent event) { if(This_is_Halloween.apocalypse == true) { if(event.entity instanceof EntityWolf) { EntityWerewolf werewolf; int x = event.entity.chunkCoordX; int y = event.entity.chunkCoordY; int z = event.entity.chunkCoordZ; float rotateX = event.entity.rotationPitch; float rotateY = event.entity.rotationYaw; event.entity.setDead(); } } }Ensuite pour la question 4 (désactiver la pluie), j’utilise cette ligne :
BiomeGenBase.plains.setDisableRain(); ``` (je pense que c'est la bonne, je l'utilise pour mon mod de Noël. De plus, si je met juste celle-là, ça marche) Mais dès que j'ajoute la condition :```java if(This_is_Halloween.apocalypse == true) { } ```, ça marche plus. De plus, j'ai aussi mis un println, mais pas de trace du message. J'ai essayé de la mettre dans la fonction load de la classe principale, mais aussi dans le commonProxy. J'ai aussi essayer de remplacer if par while, mais sans succès. D'ailleurs (même si ce n'est qu'un détail), c'est peut être mieux de mettre while (qui pourrait se traduire par tant que); mais dans les deux cas c'est pareil). Pour la question 5 (afficher un message), il fallait juste que j'utilise l'event PlayerLoggedInEvent. Mais une autre peut marcher aussi je pense. Pour la 6 (remplacer le provider de base), j'avoue que j'ai pas du tout chercher. J'ai juste remplacer EntityPlayerMP par EntityPlayer dans la condition. On m'a aussi dit que ce n'est peut être pas l'event EntityJoinWorldEvent, mais si ce n'est pas ça, je ne sais pas laquelle ça serait. De toute façon, je ne peux pas tester pour l'instant puisque dans le code ```java return Vec3.createVectorHelper((double)f3, (double)f4, (double)f5); ``` createVectorHelper n'existe plus. Pour la 7 (remplacer la couleur de l'herbe), je bloque totalement pour un biome déjà existant. Et enfin pour la 8 (mettre la pluie quand l'apocalypse vient de finir, c'est à dire quand la variable apocalypse vient de passer à false), je n'est tout simplement pas chercher. Pour l'instant je m'intéresse plus aux problèmes déjà posées auquel vous m'avez répondu. Je feraient celui là ensuite. Merci d'avance PS : désolé d'avoir remis toutes les questions alors qu'au départ, on étais juste sur l'eau. C'est pour pouvoir avancé et éviter de vous embêter trop longtemps ;) -
En effet le joueur ne risque pas de prendre feu de l’eau.
Pour le spawn, world.spawnEntityInWorld(new TonEntité(….));
Pour la Q4, il faudrait désactiver la pluie quand tu actives l’apocalypse, et non le désactiver dans la classe principale si c’est l’apocalypse.Pour les autres questions je ne sais pas non plus.
-
Pour mettre un joueur en feux : player.setOnFire(true) ?
if(This_is_Halloween.apocalypse == true) -> if(This_is_Halloween.apocalypse) d’ailleurs je crois que c’est pas la première fois que je le dis mais essaie de respecter la convention java. D’ailleurs je ne sais pas pourquoi tu appelles une valeur statique de ton mod, quel est l’utilité ?
Pour faire spawner un mob : world.spawnEntityInWorld(entity) ?
BiomeGenBase.plains.setDisableRain(); -> je doute que ce soit ça car accéder à un biome de façon statique ne risque pas de le changer dans le monde, est-ce que tu as regardé comment c’était fait dans les commandes de minecraft ?
remplacer la couleur de l’herbe -> fait une recherche sur le forum
Pour le reste j’attends que tu es un code un peu plus propre et moins de questions
-
Salut
Je vais essayer de respecter la convention java pour les nouveaux codes et de modifier les anciens.Pour le remplacement d’un mob par un autre, y’a quelques problèmes : quand ce n’est pas l’apocalypse je fait spawner un loup ça marche. Jusque là, c’est logique. Mais quand je laisse le loup et que j’active l’apocalypse, le loup ne se transforme pas. Quand j’en fais spawner, il disparaissent à la seconde où ils apparaissent (logique) mais les loup-garoux n’apparaissent pas. J’utilise :
@SubscribeEvent public void apocalypseMobReplace(EntityJoinWorldEvent event) { if(This_is_Halloween.apocalypse) { if(event.entity instanceof EntityWolf) { EntityWerewolf werewolf = new EntityWerewolf(event.world); int x = event.entity.chunkCoordX; int y = event.entity.chunkCoordY; int z = event.entity.chunkCoordZ; float rotateX = event.entity.rotationPitch; float rotateY = event.entity.rotationYaw; System.out.println(x); System.out.println(rotateX); event.entity.setDead(); event.world.spawnEntityInWorld(werewolf); werewolf.setPositionAndRotation(x, y, z, rotateX, rotateY); } } } ``` J'ai essayer de faire logger les coord sur x et la rotation sur x du loup, mais rien. Du coup, je sais pas du tout si le loup-garou n'apparait pas, ou si il apparaît mais à des coord au hasard. Pour la pluie, ça marche bien tant que je ne redémarre pas le jeu. J'ai mis la ligne ```java BiomeGenBase.plains.setDisableRain(); ``` dans la fonction juste après les commandes (en gros, quand je fait /halloween apocalypse enable). Quand je fais la commande, ça désactive bien la pluie, j'ai essayé de quitter et revenir dans le monde il ne pleut toujours pas, mais quand j'éteins et je rallume le jeu, il repleut (comme si c'est sauvegarder dans l'instance du jeu et non dans le monde). > D'ailleurs je ne sais pas pourquoi tu appelles une valeur statique de ton mod, quel est l'utilité ? C'est la variable qui définit si c'est l'apocalypse ou pas. Pour l'herbe, j'avais déjà trouvé [ce sujet](https://www.minecraftforgefrance.fr/showthread.php?tid=2117). Au départ, je savais pas comment faire pour un biome qui existe déjà (la plaine par exemple), même avec l'évent donné par Robin. Mais j'ai trouvé comment faire (même si c'est basique j'ai peiné). Mais la couleur de l'herbe ne change pas. Je continue de chercher pour les autres problèmes Pour le feu, vu que c'est de l'eau ça éteint le feu. Mais ton code marche quand même quand l'entité sort de l'eau. Merci -
Respecter la convention java -> tu peux toujours utiliser le refactor pour changer les noms plus facilement, exemple tu fais clique droit sur le nom du package puis refactor puis change name et tu le changes en thisishalloween (c’est la convention java)
l’entité ne se re-transforme pas -> où est le code pour faire ça ?
problème de position -> normal tu récupères les coordonnées du chunk et non de l’entité
pluie -> c’est pour ça que regarder comment c’est fait dans les commandes de minecraft est une bien meilleure idée
variable statique -> oui mais il se passe quoi si on redémarre le serveur ? Je te donne la réponse : ça ne marche pas, il faut mettre cette variable autre part, comme par exemple dans le monde : https://www.minecraftforgefrance.fr/showthread.php?tid=2444
pour l’herbe -> envoi le code correspondant
pour le feu -> sinon tu peux créer un nouveau type de dégâts mais ça va paraître étrange de mourir enflammer alors qu’on est dans l’eau
-
event.world.spawnEntityInWorld(werewolf);
werewolf.setPositionAndRotation(x, y, z, rotateX, rotateY);
En plus de ce qu’a dit SCAREX, inverses ses deux lignes. -
Salut
Pour les entités, ça marche mais ça en fait spawner 2. De plus, les loups ayant spawner avant l’apocalypse ne change pas.
Quand je dit qu’elles se transforment, c’est qu’on à l’impression qu’elles se transforment (le loup meurt et le loup-garou apparaît à sa place) mais elles ne se transforment pas vraiment .Pour la pluie, j’ai testé ce que tu m’as dit, ça marche, mais pas comme je voudrais. Quand je désactivais la pluie via BiomeGenBase et que je “mettais” la pluie via la commande, il ne pleuvait plus (logique) mais le ciel était gris, et c’est ça que je veux. Mais je ne sais pas comment faire. (j’aimerais plus si c’est possible le ciel de l’orage). Mais j’ai cherché dans le BiomeGenBase, rien trouvé.
Pour la variable apocalypse, merci de me l’avoir dit, je ne l’avais pas vu avant. J’avais déjà fait ce tuto et ça enregistre bien (j’ai regardé grâce à NBTExplorer). C’était un problème de chargement des données. C’est que en fait, le chargement des données, je l’avais mis dans le CommonProxy alors qu’il fallait le mettre dans la classe principale.
Pour l’herbe, je ne suis pas du tout sûr de ce que j’ai mis, c’est ce que j’ai compris du post :
@SubscribeEvent public int ApocalypseGrass(BiomeEvent.GetGrassColor event) { return 0x000000; }Pour le feu, j’avais idée de faire comme une eau à forte température qui enflamme, mais maintenant que tu me le dit, j’y pense et ça fait bizarre. Je vais laisser comme c’est là (c’est à dire qu’on perd de la vie quand on est dans l’eau et que ça nous enflamme quand y sort)
-
Pour changer tout les loup en loup-garous, j’avais donné un code vers le début :
final List <entity>toAdd = new ArrayList<entity>(); for(int i = 0; i < getWorld().loadedEntityList.size(); i++) { if(getWorld().loadedEntityList.get(i) instanceof EntityWolf) { BlockPos pos = getWorld().loadedEntityList.get(i).getPosition(); EntityZombie zombie = new EntityZombie(getWorld().loadedEntityList.get(i).getEntityWorld()); zombie.setPosition(pos.getX(), pos.getY(), pos.getZ()); zombie.setAngles(getWorld().loadedEntityList.get(i).rotationYaw, getWorld().loadedEntityList.get(i).rotationPitch); zombie.motionX = getWorld().loadedEntityList.get(i).motionX; zombie.motionY = getWorld().loadedEntityList.get(i).motionY; zombie.motionZ = getWorld().loadedEntityList.get(i).motionZ; toAdd.add(zombie); getWorld().loadedEntityList.get(i).setDead(); } } for(int i = 0; i < toAdd.size(); i++) { this.getWorld().spawnEntityInWorld(toAdd.get(i)); }J’ai pas testé mais ça devrait marcher, il faut le mettre lorsque l’apocalipse commence, qu’il ne s’exécute qu’une seule fois car tu gère déjà le cas où un loup spawn pendant l’apocalipse</entity></entity>
-
Mais quand je testais, ça ne marchait pas. Blackout avait par ailleurs dit que si on utilisait ce code (qui est une exclusivité java8), ça ne ferait rien à ceux qui n’aurait pas java 8 (ce qui est mon cas apparemment vu que ca ne marche pas; c’est aussi le cas d’environ beaucoup de personne)
-
Je ne voie pas de raison pour que ce code ne fonctionne pas sans java 8.
Celui dans ce post ,pas celui d’encore avant je précise
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk -
Je l’ai changé, dans mon premier message j’utilisai un consumer, si tu observes bien ici je le parcours avec une boucle for
-
D’ailleurs il serait plus pratique d’avoir directement l’entité avec un for(Entity entity : world.loadedEntityList) plutôt que la get à chaque ligne.
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
-
Oui, faites comme vous voulez, ça va pas changer grand chose
-
Niveau utilisation des ressources, ceci devrait être mieux :
for(Entity entity : getWorld().loadedEntityList) { if(entity instanceof EntityWolf) { EntityZombie zombie = new EntityZombie(entity.getEntityWorld()); zombie.setPosition(entity.posX, entity.posY, entity.posZ); zombie.setAngles(entity.rotationYaw, entity.rotationPitch); zombie.motionX = entity.motionX; zombie.motionY = entity.motionY; zombie.motionZ = entity.motionZ; entity.setDead(); getWorld().spawnEntityInWorld(zombie); } }Code non testé mais doit fonctionner.
-
BrokenSwing : Désolé, en voyant le code et sa disposition j’avais cru que c’était le code que t’avais donné en 1ère page. Mais en le testant, j’ai des erreurs sur ce qui concerne la position, le mouvement et l’orientation (getPosition(), getEntityWorld(), rotationYaw, rotationPitch, et les 3 motion). De plus, je n’ai pas compris certaines parties du code.
Mais j’ai préféré prendre le code d’AymericRed, je le comprend mieux (je préfère comprendre un code avant de l’utiliser). Mais merci quand même
Pour la boucle que tu m’a donné Aymeric (je peux t’appelé comme ca ?), sur la ligne ```java
event.world.loadedEntityListMerci d'avance -
Mon code fait la même chose que celui de BrokenSwing mais j’ai préféré enlever le getPosition() car je n’étais pas sur de son existence…j’ai eu raison ^^
Pour ton erreur, c’est que Mojang n’a pas spécifié à la liste d’entités qu’elle ne peut contenir que ça, donc si eclipse de propose de cast (pas sur pour un for comme ça), fais-le sinon remplace le débute du for par ça :for(Object o : event.world.loadedEntityList) { if(o instanceof EntityWolf) { EntityWorlf entity = (Entity) o;PS : Bonne traduction oui
