Supprimer des biomes
-
Tous les biomes se trouvent dans le field biomeList,* *dans la class BiomeGenBase.
biomeList étant private, static et final, tu doit la modifier en utilisant la Reflection :@EventHandler public void preInit (FMLPreInitializationEvent event) { try { Field field = BiomeGenBase.class.getDeclaredFields()[14]; field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(BiomeGenBase.birchForest, new BiomeGenBase[256]); } catch(Exception e){ e.printStackTrace(); } }Source : https://stackoverflow.com/questions/3301635/change-private-static-final-field-using-java-reflection
Pour avoir testé, on apparaît dans un monde remplis d’eau et dans le biome Plains, qui doit être le valeur par défaut.
-
J’ai du mal à comprendre la ligne :
field.set(BiomeGenBase.[color=#0000c0birchForest], [color=#7f0055new] BiomeGenBase[256]);
Le 256 correspond à quoi ?
Je voit effectivement qu’on apparaît dans un monde rempli d’eau, avec F3 il y a aussi écrit que je suis dans un biome plaine. Comment changer ceci pour afficher le biome océan ?
Est-ce que ceci enlève les biomes custom ?
Merci d’avance.
-
@‘elx9000’:
J’ai du mal à comprendre la ligne :
field.set(BiomeGenBase.[color=#0000c0birchForest], [color=#7f0055new] BiomeGenBase[256]);
Le 256 correspond à quoi ?
La capacité du tableau. Je te conseil de (re)voir les bases du Java : https://openclassrooms.com/courses/apprenez-a-programmer-en-java/les-tableaux-3
@‘elx9000’:
Je voit effectivement qu’on apparaît dans un monde rempli d’eau, avec F3 il y a aussi écrit que je suis dans un biome plaine. Comment changer ceci pour afficher le biome océan ?
2 solutions, une simple, l’autre laborieuse :
-Rajouter le biome Océan dans le tableau;
-Modifier le F3 (en utilisant l’event RenderGameOverlayEvent.Text, tu vérifies que gameSettings.showDebugInfo est sur true, puis tu cherches la ligne où se trouve le biome dans la variable event.left et tu le remplaces).@‘elx9000’:
Est-ce que ceci enlève les biomes custom ?
Ça dépend si les biomes sont rajoutées avant ou après field.set(BiomeGenBase.birchForest, new BiomeGenBase[256]);
-
Oui, je sais ce qu’est un tableau. Je voulait savoir pourquoi c’est 256 et pas 302 par exemple.
Ensuite, comment j’ajoute le biome océan au tableau (j’ai était voir sur classroom mais j’ai rien trouvé sur l’ajout de valeur). De telle sorte qu’il n’y ai que mon biome custom et le biome océan.Merci d’avance.
-
La classe ArrayUtils devrait pouvoir t’aider

-
J’ai rajouté cette ligne avant le field.set(…) :
ArrayUtils.add([color=#7f0055new] BiomeGenBase[256], 0, BiomeGenBase.[color=#0000c0ocean]);
Mais le F3 me considère toujours dans le biome plaine.
-
Je ne vois pas de ce qui a de compliqué :
BiomeGenBase[] biomes = new BiomeGenBase[256]; biomes[0] = BiomeGenBase.ocean; biomes[1] = <ton biome="">; field.set(BiomeGenBase.birchForest, biomes); ```</ton> -
Effectivement, c’est pas compliqué une fois qu’on a compris.
Il n’y a bien que mon biome et le biome océan qui spawnent.
Ensuite, comment faire pour que le player spawn dans mon biome et pas dans le biome océan ?
–-----------------
Rectification : on ne peut pas changer le fait qu’on spawn dans un monde rempli d’eau et n’avoir que le biome custom sur le monde ?Merci d’avance.
-
BiomeProvider#findBiomePosition devrait trouver l’endroit le plus près du spawn où il y a ton biome. Tu peux le tp là-bas.
-
Il semblerait qu’en 1.8.9 la classe BiomeProvider n’existe pas. Comment faire ?
Ne peut-on pas modifier la taille du biome océan ? -
Pas d’idée pour changer la taille du biome océan ?
-
Avec un peu de recherche, j’ai réussi à trouver comment faire :
@SubscribeEvent public void onGuiOpen(GuiOpenEvent e) { if(e.gui instanceof GuiCreateWorld) { GuiCreateWorld guiCreateWorld = (GuiCreateWorld) e.gui; guiCreateWorld.chunkProviderSettingsJson = "{\"coordinateScale\":684.412,\"heightScale\":684.412,\"lowerLimitScale\":512.0,\"upperLimitScale\":512.0,\"depthNoiseScaleX\":200.0,\"depthNoiseScaleZ\":200.0,\"depthNoiseScaleExponent\":0.5,\"mainNoiseScaleX\":80.0,\"mainNoiseScaleY\":160.0,\"mainNoiseScaleZ\":80.0,\"baseSize\":8.5,\"stretchY\":12.0,\"biomeDepthWeight\":1.0,\"biomeDepthOffset\":0.0,\"biomeScaleWeight\":1.0,\"biomeScaleOffset\":0.0,\"seaLevel\":63,\"useCaves\":true,\"useDungeons\":true,\"dungeonChance\":8,\"useStrongholds\":true,\"useVillages\":true,\"useMineShafts\":true,\"useTemples\":true,\"useMonuments\":true,\"useRavines\":true,\"useWaterLakes\":true,\"waterLakeChance\":4,\"useLavaLakes\":true,\"lavaLakeChance\":80,\"useLavaOceans\":false,\"fixedBiome\":0,\"biomeSize\":8,\"riverSize\":4,\"dirtSize\":33,\"dirtCount\":10,\"dirtMinHeight\":0,\"dirtMaxHeight\":256,\"gravelSize\":33,\"gravelCount\":8,\"gravelMinHeight\":0,\"gravelMaxHeight\":256,\"graniteSize\":33,\"graniteCount\":10,\"graniteMinHeight\":0,\"graniteMaxHeight\":80,\"dioriteSize\":33,\"dioriteCount\":10,\"dioriteMinHeight\":0,\"dioriteMaxHeight\":80,\"andesiteSize\":33,\"andesiteCount\":10,\"andesiteMinHeight\":0,\"andesiteMaxHeight\":80,\"coalSize\":17,\"coalCount\":20,\"coalMinHeight\":0,\"coalMaxHeight\":128,\"ironSize\":9,\"ironCount\":20,\"ironMinHeight\":0,\"ironMaxHeight\":64,\"goldSize\":9,\"goldCount\":2,\"goldMinHeight\":0,\"goldMaxHeight\":32,\"redstoneSize\":8,\"redstoneCount\":8,\"redstoneMinHeight\":0,\"redstoneMaxHeight\":16,\"diamondSize\":8,\"diamondCount\":1,\"diamondMinHeight\":0,\"diamondMaxHeight\":16,\"lapisSize\":7,\"lapisCount\":1,\"lapisCenterHeight\":16,\"lapisSpread\":16}"; ObfuscationReflectionHelper.setPrivateValue(GuiCreateWorld.class, guiCreateWorld, 4, 24); } }Il faudra que tu remplaces le nombre de "fixedBiome":0 par l’ID de ton biome.
Aussi, même si le biome size est élevé, je n’exclue pas le fait qu’un océan puisse apparaître, mais pour avoir testé, j’en ai pas trouvé.Et pour que ton joueur apparaisse sur ton biome :
@EventHandler public void preInit(FMLPreInitializationEvent event) { WorldChunkManager.allowedBiomes.clear(); WorldChunkManager.allowedBiomes.add(<ton biome="">); } ```</ton> -
Je continue à spawner dans le biome océan, sur 5 test, 4 fois j’étais dans le biome océan. Aussi, j’ai mis l’event onGuiOpen dans ma classe d’event. Je pense pas que ce soit ça qui pose le problème.
Merci d’avance.
-
Pas d’idée ?
-
En cherchant sur internet, j’ai trouvé une autre façon de faire :
@SubscribeEvent public void onBiomeGen(WorldTypeEvent.InitBiomeGens e) { GenLayer[] layers = new GenLayer[2]; layers[0] = new GenLayer(<id du="" biome="">L) { @Override public int[] getInts(int areaX, int areaY, int areaWidth, int areaHeight) { int[] aint2 = IntCache.getIntCache(areaWidth * areaHeight); for (int i = 0; i < aint2.length; i++) aint2* = <id du="" biome="">; return aint2; } }; layers[1] = layers[0]; e.newBiomeGens = layers; }Cet event est à enregistrer sur le TERRAIN_GEN_BUS !
@EventHandler public void preInit(FMLPreInitializationEvent event) { MinecraftForge.TERRAIN_GEN_BUS.register(<tu sais="" quoi="" mettre="" ici="">); } ```</tu></id></id> -
Super, ça fonctionne : je spawn dans mon biome et non plus dans le biome océan.
dans la partie préInit il y a ça :
WorldChunkManager.allowedBiomes.clear(); WorldChunkManager.allowedBiomes.add(BiomeMod.biomeSurvivant); MinecraftForge.TERRAIN_GEN_BUS.register(new SurvivantBiomeEvent());Voici ce qu’il y a dans la classe SurvivantBiomeEvent :
@SubscribeEvent public void onBiomeGen(WorldTypeEvent.InitBiomeGens e) { GenLayer[] layers = new GenLayer[2]; layers[0] = new GenLayer(100L) { @Override public int[] getInts(int areaX, int areaY, int areaWidth, int areaHeight) { int[] aint2 = IntCache.getIntCache(areaWidth * areaHeight); for (int i = 0; i < aint2.length; i++) { aint2* = 100; } return aint2; } }; layers[1] = layers[0]; e.newBiomeGens = layers; }Juste pour être sur de comprendre, cette méthode permet de faire quoi ?
Merci pour tout.