• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Mod DreckSpitzhacke dreckabbauen.

Status
Für weitere Antworten geschlossen.

Yagudo

Kuhfänger
Registriert
5 März 2017
Beiträge
87
Alter
44
Diamanten
0
hallo ich bin gerade dabei mein erstes Werkzeug für mein eigenes Modpack zu programmieren..

Nun habe ich folgendes Problem:

Das werkzeug ist richtig geschrieben dennoch kann ich damit Steinabbauen

Ich möchte zb nur das ich mit einer dreckspitzhacke nur dreckblöcke bzw grasblöcke abbauen kann..

Hier mal mein jetziger code der Klasse ItemPickaxeDirt:

Javascript:
package de.DarkEmpire.Anfang;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemPickaxe;
import net.minecraftforge.common.util.EnumHelper;

public class ItemPickaxeDirt extends ItemPickaxe {

protected ItemPickaxeDirt(ToolMaterial material) {
super(EnumHelper.addToolMaterial("DIRT", 0, 40, 0.5f, 0.0F, 1));

setCreativeTab(CreativeTabs.tabTools);
setTextureName("AnfangsMod:ItemPickAxeDirt");

}

}

upload_2017-7-18_17-23-4.gif

Anmerk ich fange erst an mit Modprogramierung also bitte keine Komplexen sachen die ich nicht Verstehe
default_smile.png


Verwendete Software den SourceCode der ForgeApi in der version 1492 sowie Gradlew und Eclipse
 
Zuletzt bearbeitet:

Yagudo

Kuhfänger
Registriert
5 März 2017
Beiträge
87
Alter
44
Diamanten
0
Wie muss sie genau declariert werden gibt es ein Beispiel dafür?

Laut Google sind diese Sachen der Methode recht komplex.
Ich bin noch recht am anfang wenn ich mich jetzt gleich mit so komplexen sachen befasse
vergess ich das was ich gelernt habe

Dachte es gibt eine Einfache Methode
 
Zuletzt bearbeitet:

KillawOrCarel

Kuhfänger
Registriert
15 Juli 2017
Beiträge
78
Diamanten
1
Wenn das Überschreiben einer Methode zu kompliziert ist, dann ist die Entwicklung einer Modifikation für ein Spiel ein viel zu fortgeschrittenes Thema. Die Grundlagen der Objektorientieren Programmierung sind eine essentielle Voraussetzung. Sofern dessen Terminologie nicht bekannt ist, kann man auch kaum um Hilfe fragen.

PS: Eine binäre Operation zu definieren ist das wohl trivialste, was überhaupt denkbar ist. Noch einfacher kann man dies leider nicht herunterbrechen.
 

Yagudo

Kuhfänger
Registriert
5 März 2017
Beiträge
87
Alter
44
Diamanten
0
Ich bin nunmal ein Mensch der Anhand von Beispielen oder Videos Lernt..
Zumal ich grad eine Playlist der Programmierung mit Forgenmod auf Deutsch durchgehe..
Nur dieser Author hat eben diese Methode nicht erklärt..

Ich bin nunmal sehr lernschwierig interessiere mich aber dennoch dafür...
 

KillawOrCarel

Kuhfänger
Registriert
15 Juli 2017
Beiträge
78
Diamanten
1
Das hat alles nicht mit "anhand von Beispielen lernen" nichts zu tun. Das hat etwas damit zu tun, dass hier sämtliche Grundlagen einer Programmiersprache fehlen. Es ist ja absolut kein Problem sich Videos, Bücher oder Texte aus dem Internet zum lernen anzusehen, jedoch ist die Grundlage jeglicher Programmierung das abstrakte denken. Ohne Abstraktes denken kann man nicht programmieren.

Das überschreiben einer Methode gehört zur Grundterminologie. Die Funktionsweise von canHarvestBlock ist allein aus dem Namen ableitbar. Can bedeutet, dass dies i.d.R. e eine boolsche Funktion ist (kann man auch durch die IDE oder vergleichbare / andere Programme nachschauen) und es bezieht sich auf das Abbauen eines Blockes. Selbst ohne Kenntnisse von Forge kann ein Entwickler damit arbeiten.

Fazit: Grundlagen lernen.
 

Yagudo

Kuhfänger
Registriert
5 März 2017
Beiträge
87
Alter
44
Diamanten
0
Ich bin ja dabei die Grundlagen zu lernen wenn man sie mir erklärt...
Von nix erklären kann man auch nix lernen..

Du kannst mir doch einfach ein Beispiel nennen
Damit ich mir das ansehen kann
Du sollt ja nicht das Fertige Produkt am ende Zeigen ..

Sondern nur eine Art Lehrer sein.
 

Yagudo

Kuhfänger
Registriert
5 März 2017
Beiträge
87
Alter
44
Diamanten
0
Javascript:
package de.DarkEmpire.Anfang;

import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemPickaxe;
import net.minecraftforge.common.util.EnumHelper;

public class ItemPickaxeDirt extends ItemPickaxe {

    protected ItemPickaxeDirt(ToolMaterial material) {
        super(EnumHelper.addToolMaterial("DIRT", 0, 40, 0.5f, 0.0F, 1));

        setCreativeTab(CreativeTabs.tabTools);
        setTextureName("AnfangsMod:ItemPickAxeDirt");
        canHarvestBlock(Blocks.dirt);
}
    public boolean canHarvestBlock(Block par1Block)
    {
        return par1Block == Blocks.dirt ? this.toolMaterial.getHarvestLevel() == 0 : par1Block == Blocks.grass;
    }
}

Hab das nun so aber irgendwie gehts nicht...?
 

Yagudo

Kuhfänger
Registriert
5 März 2017
Beiträge
87
Alter
44
Diamanten
0
Javascript:
package de.DarkEmpire.Anfang;

import java.util.Set;

import com.google.common.collect.Sets;

import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemPickaxe;
import net.minecraftforge.common.util.EnumHelper;

public class ItemPickaxeDirt extends ItemPickaxe {
   
    private static final Set Block = Sets.newHashSet(new Block[] {Blocks.grass, Blocks.dirt});

    protected ItemPickaxeDirt(ToolMaterial material) {
        super(EnumHelper.addToolMaterial("DIRT", 0, 40, 0.5f, 0.0F, 1));

        setCreativeTab(CreativeTabs.tabTools);
        setTextureName("AnfangsMod:ItemPickAxeDirt");
    }
    public boolean canHarvestBlock(Block par1Block)
    {
        return par1Block == Blocks.dirt ? true : par1Block == Blocks.dirt;
    }
}

Funktioniert nicht? wie muss es richtig sein?
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Code:
    @Override
    public boolean canHarvestBlock(IBlockState parlBlock) {
        return parlBlock.getBlock().equals(Blocks.DIRT) || parlBlock.getBlock().equals(Blocks.GRASS);
        // return parlBlock == Blocks.DIRT || parlBlock == Blocks.GRASS;
    }
Du musst aufpassen, dass du die Methode wirklich überschreiben kannst ("@Override"-Notation!) Wenn diese Funktion nicht vorhanden ist, dann wird dir das angezeigt. In meinem Fall gibt es in der Superklasse (ItemPickaxe) nur die Methode "public boolean canHarvestBlock(IBlockState parlBlock)" - das kann sich von Forge Version zu Forge Version ändern.
 

Yagudo

Kuhfänger
Registriert
5 März 2017
Beiträge
87
Alter
44
Diamanten
0
Javascript:
package de.DarkEmpire.Anfang;
import java.util.Set;
import com.google.common.collect.Sets;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemPickaxe;
import net.minecraftforge.common.util.EnumHelper;
public class ItemPickaxeDirt extends ItemPickaxe {
  
    private static final Set Block = Sets.newHashSet(new Block[] {Blocks.grass, Blocks.dirt});
    protected ItemPickaxeDirt(ToolMaterial material) {
        super(EnumHelper.addToolMaterial("DIRT", 0, 40, 0.5f, 0.0F, 1));
        setCreativeTab(CreativeTabs.tabTools);
        setTextureName("AnfangsMod:ItemPickAxeDirt");
    }

    public boolean canHarvestBlock(Block par1Block)
    {
        return par1Block == Blocks.dirt || par1Block == Blocks.dirt;
    }
}

Wenn ich das so mache wie du sagst geht es nicht
füge ich über Public das @Override ein sagt er mir folgendes:
The method canHarvestBlock(Block) of type ItemPickaxeDirt must override or implement a supertype method
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Dann geh mal in die SuperMethode (in IntelliJ ist es Strg+Linksklick auf die Superklasse (hier ItemPickaxe) und schau, wie dort die Methode "canHarvestBlock" heißt. Kopiere diesen Methodenaufruf dann in deine Klasse und setze das @Override davor. Dann musst du halt noch deine Sachen einstellen, die du einstellen musst.

Weitere Hilfen werde ich nicht geben. Hier fehlen anscheinend wirklich grundlegenste Kenntnisse.
 

Yagudo

Kuhfänger
Registriert
5 März 2017
Beiträge
87
Alter
44
Diamanten
0
Javascript:
package de.DarkEmpire.Anfang;

import java.util.Set;

import com.google.common.collect.Sets;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemPickaxe;
import net.minecraftforge.common.util.EnumHelper;

public class ItemPickaxeDirt extends ItemPickaxe {
 
    private static final Set Block = Sets.newHashSet(new Block[] {Blocks.grass, Blocks.dirt});

    protected ItemPickaxeDirt(ToolMaterial material) {
        super(EnumHelper.addToolMaterial("WOOD", 0, 40, 0.5f, 0.0F, 1));
        setCreativeTab(CreativeTabs.tabTools);
        setTextureName("AnfangsMod:ItemPickAxeDirt");
    }
    @Override
    public boolean func_150897_b(Block p_150897_1_)
    {
        return p_150897_1_ == Blocks.cobblestone ? this.toolMaterial.getHarvestLevel() == 3 : (p_150897_1_ != Blocks.diamond_block && p_150897_1_ != Blocks.diamond_ore ? (p_150897_1_ != Blocks.emerald_ore && p_150897_1_ != Blocks.emerald_block ? (p_150897_1_ != Blocks.gold_block && p_150897_1_ != Blocks.gold_ore ? (p_150897_1_ != Blocks.iron_block && p_150897_1_ != Blocks.iron_ore ? (p_150897_1_ != Blocks.lapis_block && p_150897_1_ != Blocks.grass ? (p_150897_1_ != Blocks.redstone_ore && p_150897_1_ != Blocks.lit_redstone_ore ? (p_150897_1_.getMaterial() == Material.rock ? true : (p_150897_1_.getMaterial() == Material.iron ? true : p_150897_1_.getMaterial() == Material.anvil)) : this.toolMaterial.getHarvestLevel() >= 0) : this.toolMaterial.getHarvestLevel() >= 0) : this.toolMaterial.getHarvestLevel() >= 0) : this.toolMaterial.getHarvestLevel() >= 0) : this.toolMaterial.getHarvestLevel() >= 0) : this.toolMaterial.getHarvestLevel() >= 0);
    }
}

Weiso will das nicht gehen ?
so geht es nicht ich will doch nur mit meiner Selbsterstellten Pickaxe nur grass und dreckblöcke abbauen können..

Am anfang des Thread hatte ich um eine Nicht so Komplexe Methode gebeten.
Bisher befass ich mich damit durch eure Tipps etc
Aber nichtmal das funktioniert.

default_sad.png
 
Zuletzt bearbeitet:

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Am anfang des Thread hatte ich um eine Nicht so Komplexe Methode gebeten.
Bisher befass ich mich damit durch eure Tipps etc
Aber nichtmal das funktioniert.
Dann wird das Thema wohl zu komplex für dich sein. Da ich allerdings keine Forge Version 1.7.10 habe und ich mich weigere, diese extra herunterzuladen und rum zutesten, musst du dich wohl selbst mit diesem Problem befassen. "Komplex" ist normalerweise ansichtssache. Eine Methode zu überschreiben und etwas Klassenvererbung zu beherrschen, ist in meinen Augen nicht sonderlich komplex.
 

jxnass

Minecrafter
Registriert
13 Juli 2017
Beiträge
2
Alter
27
Diamanten
300
Wie muss sie genau declariert werden gibt es ein Beispiel dafür?

Laut Google sind diese Sachen der Methode recht komplex.
Ich bin noch recht am anfang wenn ich mich jetzt gleich mit so komplexen sachen befasse
vergess ich das was ich gelernt habe

Dachte es gibt eine Einfache Methode


Guck dir folgendes Online Buch an: http://openbook.rheinwerk-verlag.de/javainsel/
Hier werden viele Sachen erklärt.

Überschreiben von Methoden geht über die Annotation
Code:
@Override
.
 
Status
Für weitere Antworten geschlossen.
Oben