2016-05-19 12 views
0

alle, lernen Modding mit Schmiede und ich verstehe nicht vollständig IExtendedEntityProperties. Ich möchte einige benutzerdefinierte Variablen für Spieler erstellen, die irgendwo gespeichert werden (NBT). Und die Art, wie ich gegoogelt habe, sagte mir, dass ich die IExtendedEntityProperties-Funktion verwenden sollte. Hier ist der Code. Was mache ich falsch? Vielen Dank!iextendedentityproperties und Speichern von NBT-Player-Daten

PlayerProps.class

public class PlayerProps implements IExtendedEntityProperties { 

public final static String compoundName = "playerProps"; 

protected EntityPlayer propsPlayer; 
protected World parWorld; 

protected String testString; 

@Override 
public void saveNBTData(NBTTagCompound parCompound) { 
    NBTTagCompound compound = new NBTTagCompound(); 
    parCompound.setTag(compoundName, compound); 

    compound.setString("testPar", testString); 
} 

@Override 
public void loadNBTData(NBTTagCompound parCompound) { 
    NBTTagCompound compound = new NBTTagCompound(); 
    compound.getTag(compoundName); 

    testString = compound.getString("testPar"); 
} 

@Override 
public void init(Entity entity, World world) { 
    propsPlayer = (EntityPlayer)entity; 
    parWorld = world; 
} 

public String getTestString() { 
    return testString; 
} 

public void setTestString(String string) { 
    testString = string; 
} 

@SubscribeEvent 
public void onEntityConstructing(EntityConstructing event) { 

    if (event.entity instanceof EntityPlayer) 
    { 
     event.entity.registerExtendedProperties("PlayerProps", new PlayerProps()); 
    } 


} 

} 

Für Test ich zwei Testblöcke mit - während auf der einen Unterkriechschutz Rechtsklick es String-Variable, auf einem anderen lesen muss - es

public boolean onBlockActivated(World world, int par2, int par3, int par4, 
     EntityPlayer player, int par6, float par7, float par8, float par9) { 
     PlayerProps props = new PlayerProps(); 
    if (player.isSneaking()) { 
       player.addChatMessage(new ChatComponentText(props.getTestString())); 

     return true; 
    } 

    return false; 
} 



    public boolean onBlockActivated(World world, int par2, int par3, int par4, 
     EntityPlayer player, int par6, float par7, float par8, float par9) { 
     PlayerProps props = new PlayerProps(); 
    if (player.isSneaking()) { 
      props.setTestString("It Works!"); 

     return true; 
    } 

    return false; 
} 

im Chat schicken Und es sagt immer Null. Danke!

+0

Entfernen Sie den Kommentar, wenn Sie die Methode implementieren: // TODO Automatisch generierter Methodenstub –

Antwort

0

definiert Sie eine konstante String, so verwenden sie, es wäre Fall Problem zu vermeiden;)

public final static String compoundName = "playerProps"; 

im Verfahren Siehe onEntityConstructing:

event.entity.registerExtendedProperties("PlayerProps", new PlayerProps()); 

By the way, definieren auch eine Konstante für Ihr Eigentum.

+0

Ich habe mit NBTExplorer das Speichern des Spielers überprüft - und keinen benutzerdefinierten Eintrag gefunden. Ich verstehe immer noch nicht die grundlegenden Dinge über EntityData ich denke = – HungryCat