Les choses étranges du code de Minecraft
-
Regarde que ce soit pas une correction forge
-
C’est à dire ? Comment faire ?
-
Je pensais que c’était un patch forge, mais en fait non, donc c’est Mojang
-
Ma nouvelle découverte concerne le code de forge cette fois-ci, je vous laisse découvrir le code afin de ne pas spoiler :
private static Map<pair<item, integer="">, Class> tileItemMap = Maps.newHashMap(); public static void renderTileItem(Item item, int metadata) { Class tileClass = tileItemMap.get(Pair.of(item, metadata)); if (tileClass != null) { TileEntitySpecialRenderer r = TileEntityRendererDispatcher.instance.getSpecialRendererByClass(tileClass); if (r != null) { r.renderTileEntityAt(null, 0, 0, 0, 0, -1); } } } /** * @deprecated Will be removed as soon as possible, hopefully 1.9. */ @Deprecated public static void registerTESRItemStack(Item item, int metadata, Class TileClass) { tileItemMap.put(Pair.of(item, metadata), TileClass); }Ceci est du code de minecraft 1.10.2, ici nous pouvons voir qu’il faut enregistrer un TESR avec une TileEntity afin de faire le rendu spécial d’un item. Donc si vous voulez faire un rendu spécial, vous devez créer une TileEntity avec rien dedans (de plus vous ne pouvez pas créer une TileEntity pour plusieurs items à rendre car vous n’avez pas l’instance de l’item en paramètre, donc 1 rendu spécial = une tile entity).</pair<item,>
-
Car cette fonction n’est prévu que pour les TESR normalement et non pour les autres items.
-
Oui mais pourquoi ne pas avoir fait un système de rendu spécialement pour les items plutôt que d’utiliser le système pour les blocks ?
-
Pour les items tu es sensé utiliser les jsons.
-
Le problème c’est que je veux créer un bouclier et pour ça minecraft n’utilise pas les jsons, donc je vais utiliser cette méthode à la place
-
Dans net/minecraft/entity/monster, une classe (non de Mojang) quelque peu inutile. Jugez par vous-même :
// Auto generated package-info by MCP @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault package net.minecraft.entity.monster; import mcp.MethodsReturnNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;EDIT : j’ai oublier, il n’est pas avant la 1.10
-
@‘Axaurus’:
Dans net/minecraft/entity/monster, une classe (non de Mojang) quelque peu inutile. Jugez par vous-même :
// Auto generated package-info by MCP @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault package net.minecraft.entity.monster; import mcp.MethodsReturnNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;EDIT : j’ai oublier, il n’est pas avant la 1.10
C’est marqué en commentaire en haut du fichier, ça donne des infos sur les méthodes présentes dans les classes du package ‘net.minecraft.entity.monster’
-
Effectivement ces annotations sont générées automatiquement, en revanche je vois pas l’utilité de les mettre dans la classe vu qu’elles sont déjà dans le package-info
-
Peut-être, mais alors juste peut-être, que ce sont des annotations plutôt destinées à des analyseurs statiques, qui peuvent lever des warnings avant même la compilation si l’analyse montre qu’il y a des null potentiels dans les paramètres ou les valeurs de retours.
-
Non, ce sont des annotations qui indiquent que les paramètres de fonctions ne doivent pas êtres nuls (par défaut). Donc si tu essaies de mettre null dans une fonction ton IDE te dira que c’est pas possible (il me semble que c’est le but)
-
Donc de l’analyse statique

C’est le nom générique des analyseurs qui tentent de faire des vérifications sur un programme au niveau du code source (ça peut aller bien plus loin que ça).
-
@‘Mokona78’:
Peut-être, mais alors juste peut-être, que ce sont des annotations plutôt destinées à des analyseurs statiques, qui peuvent lever des warnings avant même la compilation si l’analyse montre qu’il y a des null potentiels dans les paramètres ou les valeurs de retours.
J’en suis sûr, c’est exactement ça.
-
Dans Particle.java:
public void moveEntity(double x, double y, double z) { double d0 = y; if (this.field_190017_n) { List <axisalignedbb>list = this.worldObj.getCollisionBoxes((Entity)null, this.getEntityBoundingBox().addCoord(x, y, z)); for (AxisAlignedBB axisalignedbb : list) { y = axisalignedbb.calculateYOffset(this.getEntityBoundingBox(), y); } this.setEntityBoundingBox(this.getEntityBoundingBox().offset(0.0D, y, 0.0D)); for (AxisAlignedBB axisalignedbb1 : list) { x = axisalignedbb1.calculateXOffset(this.getEntityBoundingBox(), x); } this.setEntityBoundingBox(this.getEntityBoundingBox().offset(x, 0.0D, 0.0D)); for (AxisAlignedBB axisalignedbb2 : list) { z = axisalignedbb2.calculateZOffset(this.getEntityBoundingBox(), z); } this.setEntityBoundingBox(this.getEntityBoundingBox().offset(0.0D, 0.0D, z)); } else { this.setEntityBoundingBox(this.getEntityBoundingBox().offset(x, y, z)); } this.resetPositionToBB(); this.isCollided = y != y && d0 < 0.0D; if (x != x) { this.motionX = 0.0D; } if (z != z) { this.motionZ = 0.0D; } }this.isCollided = y != y && d0 < 0.0D; if (x != x) { this.motionX = 0.0D; } if (z != z) { this.motionZ = 0.0D; }Celle-là, je l’avais jamais vu!</axisalignedbb>
-
Assez étrange en effet.
-
Oui c’est bizarre… Je pense que les mappings y sont pour quelque chose.
-
Peut-être une erreur de décompilation et de mappage oui.
Mais je ne vois pas d’autres variables dans la fonction donc ce n’est pas certain. Et puis si le code ne fait pas la même chose que celui de minecraft, on devrait constater une anomalie sur le déplacement des entités en ayant forge, or ce n’est pas le cas. -
C’est du code tout à fait valable. C’est du code de protection contre la valeur NaN.
Lorsqu’un flottant se retrouve à la valeur NaN (Not a Number), un moyen de réinitialiser la variable est de vérifier si elle est différente d’elle-même. En effet, par définition, NaN est différent de tous les autres nombres, y compris de NaN.