[Java] Créons un Minecraft Mod 1.14.4 [4. Ajouter des outils]

(Cet article fait partie d'une série d'articles de commentaires)

Premier article: Introduction Article précédent: 3. Add Creative Tab Article suivant: 5. Add Armor

Ajouter des outils

Dans 1. Ajouter des éléments, nous avons ajouté un élément simple qui n'a aucune fonction. Ajoutons maintenant des outils qui ont des rôles tels que des épées et des pickels.

\src\main\java\jp\koteko\example_mod\
   ├ items
   │   ├ ItemExampleAxe.java
   │   ├ ItemExampleHoe.java
   │   ├ ItemExamplePickaxe.java
   │   ├ ItemExampleShovel.java
   │   └ ItemExampleSword.java
   ├ lists
   │   └ ItemList.java
   ├ ExampleItemGroup.java
   └ ExampleMod.java

Créez un dossier ʻitems` et créez une classe pour chaque élément. À ce stade, c'est presque la même chose que la classe héritée, il n'est donc presque pas nécessaire de créer une nouvelle classe, mais j'ai décidé d'en faire une classe distincte en supposant qu'elle sera personnalisée de différentes manières plus tard.

ItemExampleAxe.java


package jp.koteko.example_mod.items;

import net.minecraft.item.AxeItem;
import net.minecraft.item.ItemTier;

public class ItemExampleAxe extends AxeItem {
    public ItemExampleAxe(Properties properties) {
        super(ItemTier.IRON, 5, -3.0F, properties);
    }
}

ItemExampleHoe.java


package jp.koteko.example_mod.items;

import net.minecraft.item.HoeItem;
import net.minecraft.item.ItemTier;

public class ItemExampleHoe extends HoeItem {
    public ItemExampleHoe(Properties properties) {
        super(ItemTier.IRON, 0, properties);
    }
}

ItemExamplePickaxe.java


package jp.koteko.example_mod.items;

import net.minecraft.item.ItemTier;
import net.minecraft.item.PickaxeItem;

public class ItemExamplePickaxe extends PickaxeItem {
    public ItemExamplePickaxe(Properties properties) {
        super(ItemTier.IRON, 1, -2.8F, properties);
    }
}

ItemExampleShovel.java


package jp.koteko.example_mod.items;

import net.minecraft.item.ItemTier;
import net.minecraft.item.ShovelItem;

public class ItemExampleShovel extends ShovelItem {
    public ItemExampleShovel(Properties properties) {
        super(ItemTier.IRON, 1.5F, -3.0F, properties);
    }
}

ItemExampleSword.java


package jp.koteko.example_mod.items;

import net.minecraft.item.ItemTier;
import net.minecraft.item.SwordItem;

public class ItemExampleSword extends SwordItem {
    public ItemExampleSword(Properties properties) {
        super(ItemTier.IRON, 3, -2.4F, properties);
    }
}

Les arguments à transmettre au constructeur de la source d'héritage sont les suivants dans l'ordre. Seules les «propriétés» sont passées au moment de l'instanciation, et le reste est décidé ici. Voir également la section "Développement" ci-dessous.

ʻI Niveau d'objet: Niveau d'objet (appelé rareté / qualité). ʻInt attack DamageIn ou float attackDamageIn: puissance d'attaque. Pour une raison quelconque, int et float sont différents selon l'outil. Non présent à Hoe. float attackSpeedIn: vitesse d'attaque. Générateur de propriétés: propriétés de l'élément. Celui que j'ai utilisé pour configurer l'onglet Création.


Je vais l'ajouter à la liste d'articles et l'enregistrer.

ItemList.java


package jp.koteko.example_mod.lists;

import jp.koteko.example_mod.ExampleItemGroup;
import jp.koteko.example_mod.ExampleMod;
import jp.koteko.example_mod.items.*;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

@Mod.EventBusSubscriber(modid = ExampleMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ItemList {
    public static Item ExampleIngot = new Item(new Item.Properties().group(ExampleItemGroup.DEFAULT))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_ingot"));
    public static Item ExampleAxe = new ItemExampleAxe(new Item.Properties().group(ExampleItemGroup.DEFAULT))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_axe"));
    public static Item ExampleHoe = new ItemExampleHoe(new Item.Properties().group(ExampleItemGroup.DEFAULT))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_hoe"));
    public static Item ExamplePickaxe = new ItemExamplePickaxe(new Item.Properties().group(ExampleItemGroup.DEFAULT))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_pickaxe"));
    public static Item ExampleShovel = new ItemExampleShovel(new Item.Properties().group(ExampleItemGroup.DEFAULT))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_shovel"));
    public static Item ExampleSword = new ItemExampleSword(new Item.Properties().group(ExampleItemGroup.DEFAULT))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_sword"));

    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().registerAll(
                ExampleIngot,
                ExampleAxe,
                ExampleHoe,
                ExamplePickaxe,
                ExampleShovel,
                ExampleSword
        );
    }
}


Ensuite, nous effectuerons les réglages.

\src\main\resources\assets\example_mod
   ├ blockstates
   ├ lang
   │  └ en_us.json
   │  └ ja_jp.json
   ├ models
   │  ├ block
   │  └ item
   │     ├ example_axe.json
   │     ├ example_hoe.json
   │     ├ example_pickaxe.json
   │     ├ example_shovel.json
   │     └ example_sword.json
   └ textures
      ├ blocks
      └ items
         ├ example_axe.png
         ├ example_hoe.png
         ├ example_pickaxe.png
         ├ example_shovel.png
         └ example_sword.png

en_us.json


{
  "item.example_mod.example_axe": "Example Axe",
  "item.example_mod.example_hoe": "Example Hoe",
  "item.example_mod.example_pickaxe": "Example Pickaxe",
  "item.example_mod.example_shovel": "Example Shovel",
  "item.example_mod.example_sword": "Example Sword"
}

ja_jp.json


{
  "item.example_mod.example_axe": "Exemple de hache",
  "item.example_mod.example_hoe": "Exemple de houe",
  "item.example_mod.example_pickaxe": "Exemple de pickel",
  "item.example_mod.example_shovel": "Exemple de scoop",
  "item.example_mod.example_sword": "Exemple d'épée",
}

~~ (C'est devenu un nom comme une arme avec beaucoup d'excitation ...) ~~

example_axe.json


{
  "parent": "item/handheld",
  "textures": {
    "layer0": "example_mod:items/example_axe"
  }
}

example_hoe.json


{
  "parent": "item/handheld",
  "textures": {
    "layer0": "example_mod:items/example_hoe"
  }
}

example_pickaxe.json


{
  "parent": "item/handheld",
  "textures": {
    "layer0": "example_mod:items/example_pickaxe"
  }
}

example_shovel.json


{
  "parent": "item/handheld",
  "textures": {
    "layer0": "example_mod:items/example_shovel"
  }
}

example_sword.json


{
  "parent": "item/handheld",
  "textures": {
    "layer0": "example_mod:items/example_sword"
  }
}

En spécifiant ʻitem / handheld pour parent`, il devient un type d'élément à tenir dans votre main.

Après avoir placé la texture, démarrez le jeu. キャプチャ.PNG キャプチャ.PNG (Depuis qu'il a été pris de manière créative, la durabilité n'a pas diminué)

** Des outils ont été ajoutés! ** **

développement

Q. Les paramètres de puissance d'attaque et de vitesse d'attaque sont-ils différents des valeurs? Q. Pourquoi la vitesse d'attaque est-elle négative? ** A. La puissance d'attaque semble être calculée par [valeur ʻIItemTier] + [valeur dans chaque outil] + 1, et la vitesse d'attaque est de 4,0 + [valeur dans chaque outil]. ** ** Jetons un coup d'œil à l'une des classes source d'héritage de la classe d'outils ajoutée cette fois, SwordItem.java`.

SwordItem.java


//...
public class SwordItem extends TieredItem {
   private final float attackDamage;
   private final float attackSpeed;

   public SwordItem(IItemTier tier, int attackDamageIn, float attackSpeedIn, Item.Properties builder) {
      super(tier, builder);
      this.attackSpeed = attackSpeedIn;
      this.attackDamage = (float)attackDamageIn + tier.getAttackDamage();
   }
   //...
}

Vous pouvez voir qu'il est calculé comme (float) attackDamageIn + tier.getAttackDamage (). (Notez que je n'ai trouvé aucun code pour comprendre pourquoi l'affichage sur l'interface graphique est en fait +1. Cependant, l'élément vanille correspondait également à la valeur calculée par une telle expression. Il est +1 sur l'affichage. On ne sait pas s'il s'agit ou non de +1 dans le calcul interne.) (De même, la partie calculée à partir du décalage 4.0 n'a pas été trouvée pour la vitesse d'attaque.)

Ensuite, jetons un œil à ʻItem Tier`.

ItemTier.java


//...
public enum ItemTier implements IItemTier {
   WOOD(0, 59, 2.0F, 0.0F, 15, () -> {
      return Ingredient.fromTag(ItemTags.PLANKS);
   }),
   STONE(1, 131, 4.0F, 1.0F, 5, () -> {
      return Ingredient.fromItems(Blocks.COBBLESTONE);
   }),
   IRON(2, 250, 6.0F, 2.0F, 14, () -> {
      return Ingredient.fromItems(Items.IRON_INGOT);
   }),
   DIAMOND(3, 1561, 8.0F, 3.0F, 10, () -> {
      return Ingredient.fromItems(Items.DIAMOND);
   }),
   GOLD(0, 32, 12.0F, 0.0F, 22, () -> {
      return Ingredient.fromItems(Items.GOLD_INGOT);
   });
   //...
   private ItemTier(int harvestLevelIn, int maxUsesIn, float efficiencyIn, float attackDamageIn, int enchantabilityIn, Supplier<Ingredient> repairMaterialIn) {
      this.harvestLevel = harvestLevelIn;
      this.maxUses = maxUsesIn;
      this.efficiency = efficiencyIn;
      this.attackDamage = attackDamageIn;
      this.enchantability = enchantabilityIn;
      this.repairMaterial = new LazyLoadBase<>(repairMaterialIn);
   }
   //...
}

De cette manière, la valeur est fixée pour chaque niveau.

Par exemple, dans ʻExample Sword ajouté cette fois, il s'agit de ʻItem Tier.IRON, donc Puissance offensive [IItemTier value] + [Value for each tool] +1 = 2 + 3 + 1 = 6 Vitesse d'attaque 4,0+ [valeur pour chaque outil] = 4,0 --2,4 = 1,6 Ce sera.


Q. Je veux en faire un matériau unique, pas de la pierre ou du fer. Q. Où est définie la valeur de durabilité? ** A. Créons un nouveau ʻItem Tier. ** ** Définissez un nouvel Enum pour le ʻItem Tier mentionné ci-dessus.

\src\main\java\jp\koteko\example_mod\
   ├ items
   │   └ ExampleItemTier.java
   ├ lists
   ├ ExampleItemGroup.java
   └ ExampleMod.java

ExampleItemTier.java


package jp.koteko.example_mod.items;

import jp.koteko.example_mod.lists.ItemList;
import net.minecraft.item.IItemTier;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.LazyLoadBase;

import java.util.function.Supplier;

public enum ExampleItemTier implements IItemTier {
    EXAMPLE(4, 3122, 10.0F, 4.0F, 25, () -> {
        return Ingredient.fromItems(ItemList.ExampleIngot);
    });

    private final int harvestLevel;
    private final int maxUses;
    private final float efficiency;
    private final float attackDamage;
    private final int enchantability;
    private final LazyLoadBase<Ingredient> repairMaterial;

    private ExampleItemTier(int harvestLevelIn, int maxUsesIn, float efficiencyIn, float attackDamageIn, int enchantabilityIn, Supplier<Ingredient> repairMaterialIn) {
        this.harvestLevel = harvestLevelIn;
        this.maxUses = maxUsesIn;
        this.efficiency = efficiencyIn;
        this.attackDamage = attackDamageIn;
        this.enchantability = enchantabilityIn;
        this.repairMaterial = new LazyLoadBase<>(repairMaterialIn);
    }

    public int getMaxUses() {
        return this.maxUses;
    }

    public float getEfficiency() {
        return this.efficiency;
    }

    public float getAttackDamage() {
        return this.attackDamage;
    }

    public int getHarvestLevel() {
        return this.harvestLevel;
    }

    public int getEnchantability() {
        return this.enchantability;
    }

    public Ingredient getRepairMaterial() {
        return this.repairMaterial.getValue();
    }
}

Les arguments sont, dans l'ordre, le niveau de collection, la durabilité, l'efficacité, la puissance d'attaque, l'efficacité de l'enchantement et la (liste des) matériaux de réparation. J'ai essayé de le rendre meilleur que le diamant DIAMANT (3, 1561, 8.0F, 3.0F, 10, ...).

Changez le Tier de la classe d'outils.

ItemExampleSword.java


package jp.koteko.example_mod.items;

import net.minecraft.item.SwordItem;

public class ItemExampleSword extends SwordItem {
    public ItemExampleSword(Properties properties) {
        super(ExampleItemTier.EXAMPLE, 3, -2.4F, properties);
    }
}

キャプチャ.PNG La puissance d'attaque et la valeur de durabilité augmentent correctement. (F3 peut être utilisé pour afficher le débogage, et F3 + H peut être utilisé pour afficher la valeur de durabilité, etc.)


Q. Je veux faire une épée à laquelle je pense quand le tonnerre et les flammes sortent! ** R. Je suis encore difficile à comprendre, alors étudions ensemble. ** (Aucun commentaire prévu)

référence

Minecraft 1.14.4 Forge Mod Creation Part 6 [Ajout de 5 outils]

Article suivant

5. Ajout d'une armure

Recommended Posts

[Java] Créons un Minecraft Mod 1.14.4 [4. Ajouter des outils]
[Java] Créons un Minecraft Mod 1.14.4 [5. Ajouter une armure]
[Java] Créons un Minecraft Mod 1.14.4 [7. Add progress]
[Java] Créons un Minecraft Mod 1.14.4 [6. Ajouter une recette]
[Java] Créons un Minecraft Mod 1.16.1 [Ajouter un élément]
[Java] Créons un Minecraft Mod 1.14.4 [1. Ajouter un élément]
[Java] Créons un Minecraft Mod 1.14.4 [2. Ajouter un bloc]
[Java] Créons un Minecraft Mod 1.16.1 [Ajouter un bloc]
[Java] Créons un Minecraft Mod 1.14.4 [3. Ajouter un onglet de création]
[Java] Créons un Minecraft Mod 1.14.4 [Introduction]
[Java] Créons un Minecraft Mod 1.16.1 [Introduction]
[Java] Créons un Minecraft Mod 1.14.4 [99. Mod output]
[Java] Créons un Minecraft Mod 1.16.1 [Ajouter et générer des arbres]
[Java] Créons un Minecraft Mod 1.14.4 [9. Ajouter et générer des arbres]
[Java] Créons un Minecraft Mod 1.14.4 [8. Ajouter et générer du minerai]
[Java] Créons un Minecraft Mod 1.14.4 [édition supplémentaire]
[Java] Créons un Minecraft Mod 1.16.1 [Fichier de base]
Créons un environnement de développement Java (mise à jour)
Créons un processus chronométré avec la minuterie de Java! !!
Créons un framework Web ultra-simple avec Java
[Java] Créer un filtre
[Bases de Java] Créons un triangle avec une instruction for
Créer une méthode java [Memo] [java11]
[Java] Créer un fichier temporaire
Comment créer une image de conteneur légère pour les applications Java
[Java twig] Créer un combinateur d'analyseur pour l'analyse syntaxique de descente récursive
Création d'un MOB à l'aide du plug-in Minecraft Java Mythicmobs | Préparation 1
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Comment signer Minecraft MOD
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Créer un projet Java à l'aide d'Eclipse
Outils Spring Framework pour développeur Java
Créons une application TODO avec Java 1 Brève explication de MVC
Créons une application TODO en Java 5 Changer l'affichage de TODO
Créer un serveur fluentd pour les tests
Installons Docker sur Windows 10 et créons un environnement de vérification pour CentOS 8!
[Java twig] Créer un combinateur d'analyseur pour une analyse de syntaxe descendante récursive (également prendre des notes)
Allons-y avec Watson Assistant (anciennement Conversation) ⑤ Créez un chatbot avec Watson + Java + Slack
Créer un environnement de développement d'applications Web Java avec Docker pour Mac Part2
[Java] Créer et appliquer un masque des diapositives
Comment créer un référentiel Maven pour 2020
Créer une application TODO dans Java 7 Créer un en-tête
[Java] Créons une bibliothèque d'accès à la base de données!
Faisons une application de calculatrice avec Java ~ Créez une zone d'affichage dans la fenêtre
Java (add2)
Java (ajouter)
Créons une bibliothèque d'opérations de stockage de fichiers polyvalente (?) En faisant abstraction du stockage / acquisition de fichiers avec Java
[Azure] J'ai essayé de créer une application Java pour la création d'applications Web gratuites - [Débutant]
Comment créer une base de données H2 n'importe où
Une histoire sur la prise en charge de Java 11 pour les services Web
Créer un CSR avec des informations étendues en Java
Créez un tableau d'affichage simple avec Java + MySQL
Créons une API REST à l'aide de WildFly Swarm.
[Windows] [IntelliJ] [Java] [Tomcat] Créer un environnement pour Tomcat 9 avec IntelliJ
[Java] Créez quelque chose comme une API de recherche de produits
Essayez de créer un babillard en Java