Les choses étranges du code de Minecraft
-
Ah, bon à savoir, il faut utiliser le premier
-
Pas forcément! MathHelper utilise ce qu’on appelle une “lookup table” et une interpolation (de mémoire, je n’ai pas le code sous les yeux) pour avoir les résultats plus rapidement, ça permet d’éviter de faire le calcul à chaque appel de cos.
-
Oui mais en attendant cette méthode fait perdre de la précision et mange de la mémoire : donc je sais pas si la gain est si important que çà au niveau des performances.
-
net.minecraft.item.Item$ToolMaterial :
WOOD(0, 59, 2.0F, 0.0F, 15), STONE(1, 131, 4.0F, 1.0F, 5), IRON(2, 250, 6.0F, 2.0F, 14), EMERALD(3, 1561, 8.0F, 3.0F, 10), GOLD(0, 32, 12.0F, 0.0F, 22); /** The level of material this tool can harvest (3 = DIAMOND, 2 = IRON, 1 = STONE, 0 = WOOD/GOLD) */ private final int harvestLevel;
Diamant ou émeraude? >.<’
-
Emerald est bien Diamond. Le nom du field n’a juste pas changé, en fait.
-
@‘elias54’:
Emerald est bien Diamond. Le nom du field n’a juste pas changé, en fait.
Oui il me semble qu’en 1.9 Nathan avait parlé du fait qu’il avais enfin remplacer tout les EMERALD par diamond ^^
-
Oui sauf que là ça vient de MinecraftForge qui n’a pas changé ses mappings.
-
@‘jglrxavpok’:
Oui sauf que là ça vient de MinecraftForge qui n’a pas changé ses mappings.
Mauvais MF ! ;o
-
La classe BlockVine a attiré mon attention.
Pourquoi elle n’utilise pas un EnumFacing comme les autre classes qui nécessite un placement particulier ? A la place, elle utilise une série de PropertyBool -
Il me semble que c’est parce que les vignes peuvent êtres présentes sur plusieurs faces
-
J’ai trouvé. C’est parce qu’une vigne peut être soutenue soit par la vigne du dessus, soit par le bloc sur lequel elle est apposée
-
@‘Blackout’:
une vigne peut être soutenue par la vigne du dessus
Ce qui est bizarre en soit puisque les blocs de Minecraft ne sont pas soumis à la gravité…
-
Je vais plutôt parler du code Forge cette fois :
L’event ChunkDataEvent.Load est propagé lorsque les données NBT d’un Chunk sont chargé.
L’event ChunkDataEvent.Save est propagé lorsque les données NBT d’un Chunk sont sauvegardée.L’event ChunkEvent.Load est propagé lorsqu’un Chunk est chargé
L’event ChunkEvent.Unload est propagé lorsqu’un Chunk est déchargé.ChunkDataEvent.Load est propagé AVANT ChunkEvent.Load.
Donc dans mon handler de ChunkDataEvent.Load, je charge les données, mais j’en fais quoi ??!
Puis qu’imaginons que le Chunk ne soit finalement pas chargé, je n’ai aucun moyen de le savoir.
ChunkEvent.Load ne va pas être propagé, et ChunkEvent.Unload non plus.Je pense faire un point sur le forum officiel de Forge. Si toutefois vous avez des explications, je prends !
-
Dans le BlockPortal :
for (blockpos1 = pos; !World.doesBlockHaveSolidTopSurface(worldIn, blockpos1) && blockpos1.getY() > 0; blockpos1 = blockpos1.down()) { ; }
Ça aurait pas été mieux une boucle while ?
-
Une boucle for pour ça est valide.
En passant c’était surement une boucle while au début et Fernflower a du mal décompiler, c’est possible.
-
Mojang fait des API pour ensuite faire des conditions uniques dans les classes mères, voici un exemple pour le rendu du beacon, de la table d’enchantement et du coffre :
(TileEntity:399)@SideOnly(Side.CLIENT) public AxisAlignedBB getRenderBoundingBox() { AxisAlignedBB bb = INFINITE_EXTENT_AABB; // On prend un truc infini pour le beacon (la condition est plus bas) Block type = getBlockType(); if (type == Blocks.enchanting_table) // Si c'est une table d'enchant { bb = AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 1, zCoord + 1); } else if (type == Blocks.chest || type == Blocks.trapped_chest) // Si c'est un coffre { bb = AxisAlignedBB.getBoundingBox(xCoord - 1, yCoord, zCoord - 1, xCoord + 2, yCoord + 2, zCoord + 2); } else if (type != null && type != Blocks.beacon) // Si le bloc n'est pas null et que ce n'est pas un beacon { AxisAlignedBB cbb = type.getCollisionBoundingBoxFromPool(worldObj, xCoord, yCoord, zCoord); // On prend la boîte de collision if (cbb != null) { bb = cbb; } } return bb; }
-
Du-coup comme dit dans la shoutbox c’est Forge qui ajoute ça et non Mojang et Forge fait ça pour éviter d’avoir trop de patch.
-
A moi a moi, je ne ses pas si c’est forge ou minecraft mais dans le code de l’endercrystal:
public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) { if (this.isEntityInvulnerable()) { return false; } else { if (!this.isDead && !this.worldObj.isRemote) { this.health = 0; if (this.health <= 0) { this.setDead(); if (!this.worldObj.isRemote) { this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, 6.0F, true); } } } return true; } }
-
Je vois aucun problème dans le code que tu as donné.
-
Mettre la vie a 0 puis check si elle est inférieur ou égal à 0. Normal.