Variablen RETURN in Case-Switch / This method must return a result of type Item

Kreater

Neues Mitglied
Hallo zusammen,

ich habe begonnen mich mit der Programmierung von Minecraft Mods via JAVA und Eclipse zu beschäftigen und hänge derzeit an einen kleinen Problem (ich weis dies ist kein Minecraft Forum jedoch handelt es sich hierbei ja um JAVA und vllt. könnt ihr mir diesbezüglich ja auch helfen 🙂 )

Was derzeit vorhanden ist.
Mod.class
OreBlockCrystals.class

In der Mod.class habe ich ein neuen Block definiert der so hier aussieht.
Java:
oreOpalOre = new OreBlockCrystals(Material.rock, 1).setBlockName("OpalOre");
GameRegistry.registerBlock(oreOpalOre, "OpalOre");
Bei OreBlockCrystals übergebe ich eine Zahl(int) was die ID des jeweiligen Blocks darstellen soll damit ich in der nächsten Class Datei diese dann identifizieren kann.

Durch den oben genannten Befehl wird jetzt die OreBlockCrystals.class ausgeführt die folgender Maßen aussieht.
Java:
package net.kreater.mod.blocks;
import java.util.Random;
import net.kreater.mod.Kreater;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.item.Item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class OreBlockCrystals extends Block{

	public static int ActualBlock;

	public OreBlockCrystals(Material material, int ActualBlock) {
		super(material);
		this.setHardness(18.0F);
		this.setResistance(3.0F);
		this.setStepSound(soundTypeMetal);
		this.setCreativeTab(Kreater.kreaterTab);
	}

	public Item getItemDropped(int i, Random random, int j){
		
		int a = ActualBlock;
       
		switch(a){
        	case 1:
        		return this == Kreater.oreAmberOre ? Kreater.itemAmberCrystal : Item.getItemFromBlock(this);
        	case 2:
        		return this == Kreater.oreOpalOre ? Kreater.itemOpalCrystal : Item.getItemFromBlock(this);
        	case 3:
        		return this == Kreater.orePeridotOre ? Kreater.itemPeridotCrystal : Item.getItemFromBlock(this);
        	case 4:
        		return this == Kreater.oreAmethystOre ? Kreater.itemAmethystCrystal : Item.getItemFromBlock(this);
        	case 5:
        		return this == Kreater.oreRubyOre ? Kreater.itemRubyCrystal : Item.getItemFromBlock(this);
        	case 6:
        		return this == Kreater.oreAquamarineOre ? Kreater.itemAquamarineCrystal : Item.getItemFromBlock(this);
        	case 7:
        		return this == Kreater.oreSapphireOre ? Kreater.itemSapphireCrystal : Item.getItemFromBlock(this);
        	case 8:
        		return this == Kreater.oreCitrineOre ? Kreater.itemCitrineCrystal : Item.getItemFromBlock(this);
        	case 9:
        		return this == Kreater.oreSpinelOre ? Kreater.itemSpinelCrystal : Item.getItemFromBlock(this);
        	case 10:
        		return this == Kreater.oreTanzaniteOre ? Kreater.itemTanzaniteCrystal : Item.getItemFromBlock(this);
        	case 11:
        		return this == Kreater.oreTopazOre ? Kreater.itemTopazCrystal : Item.getItemFromBlock(this);
        	case 12:
        		return this == Kreater.oreTourmalineOre ? Kreater.itemTourmalineCrystal : Item.getItemFromBlock(this);
        	case 13:
        		return this == Kreater.oreTurquoisOre ? Kreater.itemTurquoisCrystal : Item.getItemFromBlock(this);
        	case 14:
        		return this == Kreater.oreZirconOre ? Kreater.itemZirconCrystal : Item.getItemFromBlock(this);
        	case 15:
        		return this == Kreater.oreCrystalQuartzOre ? Kreater.itemCrystalQuartzCrystal : Item.getItemFromBlock(this);   	
        } 
	}

Hier lese ich die ID in public OreBlockCrystals aus nachdem ich sie vorher als public int deklariert habe. Nun möchte ich (da ich ja verschiedene Erze erstellt habe) das jedes Erz sein ganz individuelles Item droppt, und da dachte ich mir das löse ich eben via ID des Items und eines Case-Switches.

Soweit so gut jedoch wird mein Case-Switch in public Item getItemDropped völlig ignoriert und ich bekomme auf der Zeile
Java:
public Item getItemDropped(int i, Random random, int j)
die Fehlermeldung: This method must return a result of type Item

Ist ein Case-Switch in dieser Methode denn nicht möglich oder warum meckert Java da rum ? (Wenn ich ein return = null unter den Case schreibe ist die Fehlermeldung natürlich weg, jedoch wird dann kein Item gedroppt.

Ich hoffe ihr könnt mir da ein klein wenig auf die Sprünge helfen.
Falls dieser Beitrag hier rein garnichts zutun hat da er sich ja mit Minecraft beschäftigt dann bitte ich um sofortige Löschung.

Viele Grüße:
Max Neumann
 
Was soll denn z.B. für a=16 der return-Wert sein?

Also derzeit sind 15 verschiedene Kristalle eingebaut mit ID 1 - 15 (Default muss ich im Case noch einfügen was wahrscheinlich lediglich return = null; enthalten wird).

Beispiel wie der return aufgebaut ist.
Java:
return this == DasEisenerzDasDasItemDroppt ? DasItemDasDasErzDroppt: Item.getItemFromBlock(this);

_________________________________________________________________________
Edit:
oder gibt es eine ander Möglichkeit außer Case-Switch oder If Abfragen (was ja beides nicht geht) um mehrere returns zu ermöglichen ?
 
Zuletzt bearbeitet:
Natürlich geht das. Meine Frage war eigentlich als Hinweis gemeint, was irgendwie nicht so ganz bei dir angekommen ist...

Dann noch mal anders formuliert: Für deine Methode ist nicht in jedem Fall ein Rückgabewert definiert. Falls z.B. a=16 ist, so wird kein Item zurückgeliefert. Deshalb meckert da auch der Compiler...
 

Zurück
Oben