Maison > Java > le corps du texte

La structure de Minecraft écrase les blocs existants 1.20

PHPz
Libérer: 2024-02-22 13:00:09
avant
740 Les gens l'ont consulté

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.

Contenu de la question

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

Solution de contournement

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 :

  • Ajoutez simplement votre bloc à l'une des balises intégrées de Minecraft - vous n'avez même pas besoin de code Java, juste le fichier json du package : https://www.php.cn/link/ff7cc29289db44861ce4b3e5e56fe234. Cela pourrait rendre la pierre exploitable avec une pelle, par exemple.
  • Utilisez l'un des rappels fournis par l'API Fabric pour écouter certains événements que vous souhaitez gérer. Par exemple, il peut transformer des blocs d'herbe en terre lorsque le joueur clique dessus.
  • Créez un "bloc d'extension" qui peut servir d'attribut d'état personnalisé pour le bloc. c'est à dire. Élargissez la tranche d'âge si vous souhaitez donner 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
}
Copier après la connexion

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);
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal