Le sujet de questions et réponses Java proposé par l'éditeur php Youzi répondra à votre question en détail sur les structures couvrant les blocs existants dans Minecraft. Dans le jeu, la manière d'exploiter et d'utiliser efficacement cette fonction affectera directement l'expérience de jeu et le plaisir de jouer. Grâce à l'interprétation et aux conseils de cet article, j'espère qu'il pourra vous aider à mieux maîtriser cette technique et à obtenir de meilleurs résultats et une meilleure expérience de jeu.
J'ai essayé de trouver en ligne un moyen de modifier les blocs existants et leurs propriétés dans Minecraft Fabric, mais tout ce que je peux trouver, c'est comment créer de nouveaux blocs. Toutes les versions que j'ai trouvées sont inférieures à 1.20.
En fait, je ne trouve pas du tout de moyen de remplacer les propriétés de bloc existantes. L'écrasement ne fonctionne pas non plus
Ce que vous voulez essentiellement faire, c'est réenregistrer une block
instance de minecraft déjà enregistrée. Mais il y a une raison pour laquelle personne n'a documenté comment procéder : Vous ne devriez pas.
La réenregistrement de morceaux dans Minecraft peut provoquer des problèmes étranges, surtout si votre mod sera utilisé dans un grand modpack. Cela a à voir avec la compatibilité avec d'autres mods et même avec Minecraft lui-même. Tu ferais mieux d'espérer éviter cela. Il existe une douzaine d’autres solutions permettant de modifier le comportement de blocs spécifiques sans trop de problèmes. Ils comprennent, sans toutefois s'y limiter :
minecraft:stone
一个 age
属性(无论出于何种原因可能有用),请将 minecraft:stone
视为 age=0
并使用 age
创建自定义块(例如 modid:ged_stone
) zqb 属性从 1
à n'importe quel âge maximum. Une autre approche, plus générale, consiste à intégrer le mixin dans une block
classe ou une sous-classe appropriée et à faire quelque chose comme ce qui suit pour cibler un bloc spécifique (dans ce cas, une pierre) :
block self = (block) (object) this; if (builtinregistries.block.getkey(self).equals(new resourcelocation("stone"))) { // do something only if this block is stone }
Mais si vous voulez vraiment, vraiment remplacer complètement une instance de bloc, voici une suggestion : utilisez l'injection mixin registry.register
pour remplacer une instance de bloc spécifique par une instance de bloc personnalisée :
@Mixin(Registry.class) public class RegistryMixin { @Inject( // You may need to specify the correct signature after the method // name because there are two `register` methods. method="register", at=@At("HEAD"), cancelable=true ) // Note that this is a generic method, in Mixin you'll have to use // Object to replace type parameters private static void onRegister(Registry reg, ResourceLocation id, Object value, CallbackInfoReturnable<Object> cir) { if (reg != BuiltInRegistries.BLOCK) return; if (!id.toString().equals("minecraft:stone")) return; // Now that you've filtered out the minecraft:stone block, // you can re-register it Block myCustomBlock = new Block(.......); ((WritableRegistry) reg).register(id, myCustomBlock); cir.setReturnValue(myCustomBlock); } }
Mais encore une fois, essayez d'éviter cette solution. Il y a des dragons ici.
Veuillez noter que je n'ai testé aucun extrait de code car je n'ai pas d'environnement modifié sous la main au moment de la rédaction de cet article. Il faudra peut-être un ajustement pour fonctionner.
De plus, j'ai utilisé le mappage officiel de Mojang, si vous utilisez le mapping de fil, le nom peut être différent. Par exemple, resourcelocation
在 yarn 中被命名为 identifier
.
J'espère que cela aide. Bon codage !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!