[Class] Kits

Hier könnt ihr anderen Leuten helfen, indem ihr Anleitungen oder praktische Codesegmente zur Verfügung stellt.

[Class] Kits

Beitragvon Summerfeeling » Mi 3. Jun 2015, 22:57

Hey,
da ich vermehrt im Forum Beiträge gesehen habe, wo jemand versucht ein Inventar, Kits oder ähnliches mit externen Klassen zu speichern, habe ich mich nun entschlossen eine kurze Kitklasse zu programmieren. Diese zwei Klassen ermöglichen das Speichern, Hinzufügen, Löschen, und Anlegen von Kits. Beim Speichern wird die komplette ItemMeta mit gespeichert. Das heißt, der Itemname, die Lore, die Enchantments, die Itemflags (ab 1.8), und alle anderen einstellbaren Sachen bleiben erhalten!

Erstmal der Code,

Code: Alles auswählen
  1. package de.summerfeeling.postcrafter.kit;
  2. import org.bukkit.configuration.file.FileConfiguration;
  3. import org.bukkit.configuration.file.YamlConfiguration;
  4. import org.bukkit.configuration.serialization.ConfigurationSerialization;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.potion.PotionEffect;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. public class KitManager {
  14.     private Map<String, Kit> kits = new HashMap<>();
  15.     public void loadKits() {
  16.         ConfigurationSerialization.registerClass(Kit.class);
  17.         FileConfiguration config = YamlConfiguration.loadConfiguration(new File("plugins/Kits", "kits.yml"));
  18.         if (config.contains("kits")) {
  19.             for (Kit kit : (List<Kit>) config.getList("kits")) {
  20.                 kits.put(kit.getName(), kit);
  21.             }
  22.         }
  23.     }
  24.     public void saveKits() {
  25.         File file = new File("plugins/Kits", "kits.yml");
  26.         FileConfiguration config = YamlConfiguration.loadConfiguration(file);
  27.         config.set("kits", new ArrayList<>(kits.values()));
  28.         try {
  29.             config.save(file);
  30.         } catch (IOException e) {
  31.             System.err.println("[Kits] Error while saving kits...");
  32.             e.printStackTrace();
  33.         }
  34.     }
  35.     public void addKit(Kit kit) {
  36.         kits.put(kit.getName(), kit);
  37.     }
  38.     public void removeKit(String kitname) {
  39.         kits.remove(kitname);
  40.     }
  41.     public boolean containsKit(String kitname) {
  42.         return kits.containsKey(kitname);
  43.     }
  44.     public Kit getKit(String kitname) {
  45.         return kits.get(kitname);
  46.     }
  47.     public void applyKit(Player player, String kit) {
  48.         Kit k = getKit(kit);
  49.         player.getInventory().setContents(k.getContent());
  50.         player.getInventory().setArmorContents(k.getArmor());
  51.         for (PotionEffect activePotions : player.getActivePotionEffects()) {
  52.             player.removePotionEffect(activePotions.getType());
  53.         }
  54.         k.applyPotionEffects(player);
  55.         player.sendMessage("§a[Kits] §7Du hast das Kit §b" + kit + " §7angelegt!");
  56.     }
  57. }


Code: Alles auswählen
  1. package de.summerfeeling.postcrafter.kit;
  2. import org.bukkit.configuration.serialization.ConfigurationSerializable;
  3. import org.bukkit.entity.Player;
  4. import org.bukkit.inventory.ItemStack;
  5. import org.bukkit.potion.PotionEffect;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. public class Kit implements ConfigurationSerializable {
  10.     private String name;
  11.     private ItemStack[] content;
  12.     private ItemStack[] armor;
  13.     private List<PotionEffect> potionEffects;
  14.     public Kit(String name, ItemStack[] content, ItemStack[] armor, List<PotionEffect> potionEffects) {
  15.         this.name = name;
  16.         this.content = content;
  17.         this.armor = armor;
  18.         this.potionEffects = potionEffects;
  19.     }
  20.     public String getName() {
  21.         return name;
  22.     }
  23.     public ItemStack[] getContent() {
  24.         return content;
  25.     }
  26.     public ItemStack[] getArmor() {
  27.         return armor;
  28.     }
  29.     public void applyPotionEffects(Player player) {
  30.         for (PotionEffect effect : potionEffects) {
  31.             player.addPotionEffect(effect);
  32.         }
  33.     }
  34.     public static Kit deserialize(Map<String, Object> o) {
  35.         return new Kit(o.get("name").toString(), (ItemStack[]) o.get("content"), (ItemStack[]) o.get("armor"), (List<PotionEffect>) o.get("potions"));
  36.     }
  37.     public Map<String, Object> serialize() {
  38.         Map<String, Object> o = new HashMap<>();
  39.         o.put("name", name);
  40.         o.put("content", content);
  41.         o.put("armor", armor);
  42.         o.put("potions", potionEffects);
  43.         return o;
  44.     }
  45. }


Nun, ich werde nichts zu der Serialization von Klassen sagen, da Jofkos dies bereits getan hat. Siehe hier.

Solltet ihr nun irgendwelche weiteren Punkte mit in das Kit einbinden wollen, so muss darauf geachtet werden, dass diese Serializable sind. Primitive Datentypes, sowie Strings sollen problemlos serialized werden.

Kleines Beispiel, möchtet ihr nun einstellen, ob im eurem Kit z.B. Doppelsprünge erlaubt sind, so fügt ihr ein
- "private boolean doublejump = false" an den Anfang (sprich zu den anderen Variablen) ein.
- Fügt es dem Constructor hinzu (sollte hoffentlich bekannt sein, wie.)
- Nun fügt ihr es der serialize()-Methode hinzu. (o.put("doublejump", doublejump");)
- Ihr dürft nicht vergessen, diesen Wert anschließend zu deserializen, also fügt ihr noch an den Teil der Klassen Initialisierung ein "(Boolean) o.get("doublejump")" an.

Nun sollte ebenfalls der Boolean "doublejump" gespeichert werden.


Ich hoffe euch hat diese kleine Klasse gefallen, und wir euch helfen. ;)
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: [Class] Kits

Beitragvon naturboy » Do 4. Jun 2015, 06:30

Danke sehr
Benutzeravatar
naturboy
 
Beiträge: 279
Registriert: Mi 17. Jul 2013, 17:45

Re: [Class] Kits

Beitragvon naturboy » Sa 6. Jun 2015, 11:15

Leider habe ich manchmal ein probleme das nach dem erneuten laden des Kits folgendes auftritt:
Bild
Dieser Fall kommt immer zustande wenn ich das kit lade;
Dann /clear mache und danach wieder das Kit lade ;
Benutzeravatar
naturboy
 
Beiträge: 279
Registriert: Mi 17. Jul 2013, 17:45

Re: [Class] Kits

Beitragvon Summerfeeling » So 7. Jun 2015, 11:01

naturboy hat geschrieben:Leider habe ich manchmal ein probleme das nach dem erneuten laden des Kits folgendes auftritt:
Bild
Dieser Fall kommt immer zustande wenn ich das kit lade;
Dann /clear mache und danach wieder das Kit lade ;

Hm. Komisch, versuch mal das Item mit der Amount 1 zu speichern.
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: [Class] Kits

Beitragvon naturboy » Mo 8. Jun 2015, 06:03

Summerfeeling hat geschrieben:
naturboy hat geschrieben:Leider habe ich manchmal ein probleme das nach dem erneuten laden des Kits folgendes auftritt:
Bild
Dieser Fall kommt immer zustande wenn ich das kit lade;
Dann /clear mache und danach wieder das Kit lade ;

Hm. Komisch, versuch mal das Item mit der Amount 1 zu speichern.

Also ich glaube ich weiß woran das liegt mit dem amount 0 . Meine Vermutung liegt darin das ich ja die Inventory contens beim speichern des Kits übergebe nun kommt es dazu das diese Übergabe nur die Adresse dieser Werte übergeben wird also mein Inventar wenn ich dann also /clear mache wird das eigentliche Objekt gecleart doch die Adresse zeigt immer noch zum Inventar wenn ich dann das Kit erneut lade versucht es aus meinem Inventar den amount abzu lesen doch das dort liegende ItemStack wurde ja gecleart daher 0 Somit wäre eine Lösung beim Speichern des Kit das ganze kurz in die config zu speichern und erneut zu laden. @Postcrafter könnte ja seine Meinung dazu abgeben ob mein Gedankengang richtig ist
Benutzeravatar
naturboy
 
Beiträge: 279
Registriert: Mi 17. Jul 2013, 17:45

Re: [Class] Kits

Beitragvon Jofkos » Mo 8. Jun 2015, 16:10

@naturboy ob dein Gedankengang stimmt, kannst du ganz leicht selbst herausfinden: ersetze einfach die .getContent und .getArmor Methode durch
Code: Alles auswählen
  1.     public ItemStack[] getContent() {
  2.         return content.clone();
  3.     }
  4.     public ItemStack[] getArmor() {
  5.         return armor.clone();
  6.     }

So sollte der Fehler nicht mehr auftreten ;)
Jofkos

...........

..Bild
Benutzeravatar
Jofkos
 
Beiträge: 1537
Registriert: So 16. Jun 2013, 22:45

Re: [Class] Kits

Beitragvon naturboy » Mo 8. Jun 2015, 19:01

Jofkos hat geschrieben:@naturboy ob dein Gedankengang stimmt, kannst du ganz leicht selbst herausfinden: ersetze einfach die .getContent und .getArmor Methode durch
Code: Alles auswählen
  1.     public ItemStack[] getContent() {
  2.         return content.clone();
  3.     }
  4.     public ItemStack[] getArmor() {
  5.         return armor.clone();
  6.     }

So sollte der Fehler nicht mehr auftreten ;)

Werde ich testen
//Edit
Also ich habe jetzt das Probleme gelöst jedoch bekomme ich wenn ein Kit schon mal gespeichert wurde und der Server dann neugestartet wurde einen Sehr langen error log
Error:
Code: Alles auswählen
  1. [14:26:19] [Server thread/INFO]: Starting minecraft server version 1.8.4
  2. [14:26:19] [Server thread/INFO]: Loading properties
  3. [14:26:19] [Server thread/INFO]: Default game type: SURVIVAL
  4. [14:26:19] [Server thread/INFO]: This server is running CraftBukkit version git-Spigot-5818108-db5fd9c (MC: 1.8.4) (Implementing API version 1.8.4-R0.1-SNAPSHOT)
  5. [14:26:19] [Server thread/INFO]: Debug logging is disabled
  6. [14:26:19] [Server thread/INFO]: Server Ping Player Sample Count: 12
  7. [14:26:19] [Server thread/INFO]: Using 4 threads for Netty based IO
  8. [14:26:19] [Server thread/INFO]: Generating keypair
  9. [14:26:19] [Server thread/INFO]: Starting Minecraft server on *:25565
  10. [14:26:19] [Server thread/INFO]: Using default channel type
  11. [14:26:19] [Server thread/INFO]: Set PluginClassLoader as parallel capable
  12. [14:26:19] [Server thread/INFO]: [1vs1] Loading 1vs1 v1.0
  13. [14:26:19] [Server thread/INFO]: [WorldEdit] Loading WorldEdit v6.0.0-SNAPSHOT
  14. [14:26:19] [Server thread/INFO]: [1vs1] Enabling 1vs1 v1.0
  15. [14:26:19] [Server thread/ERROR]: Could not call method 'public static util.Kit util.Kit.deserialize(java.util.Map)' of class util.Kit for deserialization
  16. java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Lorg.bukkit.inventory.ItemStack;
  17.    at util.Kit.deserialize(Kit.java:54) ~[?:?]
  18.    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_51]
  19.    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
  20.    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
  21.    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_51]
  22.    at org.bukkit.configuration.serialization.ConfigurationSerialization.deserializeViaMethod(ConfigurationSerialization.java:77) [spigot.jar:git-Spigot-5818108-db5fd9c]
  23.    at org.bukkit.configuration.serialization.ConfigurationSerialization.deserialize(ConfigurationSerialization.java:117) [spigot.jar:git-Spigot-5818108-db5fd9c]
  24.    at org.bukkit.configuration.serialization.ConfigurationSerialization.deserializeObject(ConfigurationSerialization.java:195) [spigot.jar:git-Spigot-5818108-db5fd9c]
  25.    at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.construct(YamlConstructor.java:35) [spigot.jar:git-Spigot-5818108-db5fd9c]
  26.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) [spigot.jar:git-Spigot-5818108-db5fd9c]
  27.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructSequenceStep2(BaseConstructor.java:275) [spigot.jar:git-Spigot-5818108-db5fd9c]
  28.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructSequence(BaseConstructor.java:246) [spigot.jar:git-Spigot-5818108-db5fd9c]
  29.    at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlSeq.construct(SafeConstructor.java:466) [spigot.jar:git-Spigot-5818108-db5fd9c]
  30.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) [spigot.jar:git-Spigot-5818108-db5fd9c]
  31.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:373) [spigot.jar:git-Spigot-5818108-db5fd9c]
  32.    at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:147) [spigot.jar:git-Spigot-5818108-db5fd9c]
  33.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:354) [spigot.jar:git-Spigot-5818108-db5fd9c]
  34.    at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:485) [spigot.jar:git-Spigot-5818108-db5fd9c]
  35.    at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.construct(YamlConstructor.java:26) [spigot.jar:git-Spigot-5818108-db5fd9c]
  36.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) [spigot.jar:git-Spigot-5818108-db5fd9c]
  37.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:141) [spigot.jar:git-Spigot-5818108-db5fd9c]
  38.    at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:127) [spigot.jar:git-Spigot-5818108-db5fd9c]
  39.    at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:481) [spigot.jar:git-Spigot-5818108-db5fd9c]
  40.    at org.yaml.snakeyaml.Yaml.load(Yaml.java:400) [spigot.jar:git-Spigot-5818108-db5fd9c]
  41.    at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:55) [spigot.jar:git-Spigot-5818108-db5fd9c]
  42.    at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:226) [spigot.jar:git-Spigot-5818108-db5fd9c]
  43.    at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:169) [spigot.jar:git-Spigot-5818108-db5fd9c]
  44.    at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:180) [spigot.jar:git-Spigot-5818108-db5fd9c]
  45.    at util.KitManager.loadKits(KitManager.java:19) [OnevsOne.jar:?]
  46.    at main.OnevsOne.load(OnevsOne.java:156) [OnevsOne.jar:?]
  47.    at main.OnevsOne.onEnable(OnevsOne.java:72) [OnevsOne.jar:?]
  48.    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) [spigot.jar:git-Spigot-5818108-db5fd9c]
  49.    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot.jar:git-Spigot-5818108-db5fd9c]
  50.    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-5818108-db5fd9c]
  51.    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:356) [spigot.jar:git-Spigot-5818108-db5fd9c]
  52.    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:316) [spigot.jar:git-Spigot-5818108-db5fd9c]
  53.    at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:200) [spigot.jar:git-Spigot-5818108-db5fd9c]
  54.    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:528) [spigot.jar:git-Spigot-5818108-db5fd9c]
  55.    at java.lang.Thread.run(Unknown Source) [?:1.7.0_51]
  56. [14:26:19] [Server thread/ERROR]: Could not call method 'public static util.Kit util.Kit.deserialize(java.util.Map)' of class util.Kit for deserialization
  57. java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Lorg.bukkit.inventory.ItemStack;
  58.    at util.Kit.deserialize(Kit.java:54) ~[?:?]
  59.    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_51]
  60.    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
  61.    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_51]
  62.    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_51]
  63.    at org.bukkit.configuration.serialization.ConfigurationSerialization.deserializeViaMethod(ConfigurationSerialization.java:77) [spigot.jar:git-Spigot-5818108-db5fd9c]
  64.    at org.bukkit.configuration.serialization.ConfigurationSerialization.deserialize(ConfigurationSerialization.java:117) [spigot.jar:git-Spigot-5818108-db5fd9c]
  65.    at org.bukkit.configuration.serialization.ConfigurationSerialization.deserializeObject(ConfigurationSerialization.java:195) [spigot.jar:git-Spigot-5818108-db5fd9c]
  66.    at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.construct(YamlConstructor.java:35) [spigot.jar:git-Spigot-5818108-db5fd9c]
  67.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) [spigot.jar:git-Spigot-5818108-db5fd9c]
  68.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructSequenceStep2(BaseConstructor.java:275) [spigot.jar:git-Spigot-5818108-db5fd9c]
  69.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructSequence(BaseConstructor.java:246) [spigot.jar:git-Spigot-5818108-db5fd9c]
  70.    at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlSeq.construct(SafeConstructor.java:466) [spigot.jar:git-Spigot-5818108-db5fd9c]
  71.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) [spigot.jar:git-Spigot-5818108-db5fd9c]
  72.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:373) [spigot.jar:git-Spigot-5818108-db5fd9c]
  73.    at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:147) [spigot.jar:git-Spigot-5818108-db5fd9c]
  74.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:354) [spigot.jar:git-Spigot-5818108-db5fd9c]
  75.    at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:485) [spigot.jar:git-Spigot-5818108-db5fd9c]
  76.    at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.construct(YamlConstructor.java:26) [spigot.jar:git-Spigot-5818108-db5fd9c]
  77.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) [spigot.jar:git-Spigot-5818108-db5fd9c]
  78.    at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:141) [spigot.jar:git-Spigot-5818108-db5fd9c]
  79.    at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:127) [spigot.jar:git-Spigot-5818108-db5fd9c]
  80.    at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:481) [spigot.jar:git-Spigot-5818108-db5fd9c]
  81.    at org.yaml.snakeyaml.Yaml.load(Yaml.java:400) [spigot.jar:git-Spigot-5818108-db5fd9c]
  82.    at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:55) [spigot.jar:git-Spigot-5818108-db5fd9c]
  83.    at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:226) [spigot.jar:git-Spigot-5818108-db5fd9c]
  84.    at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:169) [spigot.jar:git-Spigot-5818108-db5fd9c]
  85.    at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:180) [spigot.jar:git-Spigot-5818108-db5fd9c]
  86.    at util.KitManager.loadKits(KitManager.java:19) [OnevsOne.jar:?]
  87.    at main.OnevsOne.load(OnevsOne.java:156) [OnevsOne.jar:?]
  88.    at main.OnevsOne.onEnable(OnevsOne.java:72) [OnevsOne.jar:?]
  89.    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) [spigot.jar:git-Spigot-5818108-db5fd9c]
  90.    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot.jar:git-Spigot-5818108-db5fd9c]
  91.    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-5818108-db5fd9c]
  92.    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:356) [spigot.jar:git-Spigot-5818108-db5fd9c]
  93.    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:316) [spigot.jar:git-Spigot-5818108-db5fd9c]
  94.    at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:200) [spigot.jar:git-Spigot-5818108-db5fd9c]
  95.    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:528) [spigot.jar:git-Spigot-5818108-db5fd9c]
  96.    at java.lang.Thread.run(Unknown Source) [?:1.7.0_51]
  97. [14:26:19] [Server thread/ERROR]: Error occurred while enabling 1vs1 v1.0 (Is it up to date?)
  98. java.lang.NullPointerException
  99.    at util.KitManager.loadKits(KitManager.java:22) ~[?:?]
  100.    at main.OnevsOne.load(OnevsOne.java:156) ~[?:?]
  101.    at main.OnevsOne.onEnable(OnevsOne.java:72) ~[?:?]
  102.    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot.jar:git-Spigot-5818108-db5fd9c]
  103.    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot.jar:git-Spigot-5818108-db5fd9c]
  104.    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-5818108-db5fd9c]
  105.    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:356) [spigot.jar:git-Spigot-5818108-db5fd9c]
  106.    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:316) [spigot.jar:git-Spigot-5818108-db5fd9c]
  107.    at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:200) [spigot.jar:git-Spigot-5818108-db5fd9c]
  108.    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:528) [spigot.jar:git-Spigot-5818108-db5fd9c]
  109.    at java.lang.Thread.run(Unknown Source) [?:1.7.0_51]

Kit.java
Code: Alles auswählen
  1. package util;
  2. import org.bukkit.configuration.serialization.ConfigurationSerializable;
  3. import org.bukkit.entity.Player;
  4. import org.bukkit.inventory.ItemStack;
  5. import org.bukkit.potion.PotionEffect;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. public class Kit implements ConfigurationSerializable {
  10.    private boolean blockbreak = false;
  11.    private boolean soup = false;
  12.    private boolean hunger = false;
  13.    private boolean doublejump = false;
  14.     private String name;
  15.     private ItemStack[] content;
  16.     private ItemStack[] armor;
  17.     private List<PotionEffect> potionEffects;
  18.     public Kit(String name, ItemStack[] content, ItemStack[] armor, List<PotionEffect> potionEffects, boolean doublejump, boolean hunger, boolean soup, boolean blockbreak){
  19.         this.name = name;
  20.         this.content = content;
  21.         this.armor = armor;
  22.         this.potionEffects = potionEffects;
  23.         this.doublejump = doublejump;
  24.         this.hunger = hunger;
  25.         this.soup = soup;
  26.         this.blockbreak = blockbreak;
  27.     }
  28.     public Kit copy(String name){
  29.        return new Kit(name, content, armor, potionEffects, doublejump, hunger, soup, blockbreak);
  30.     }
  31.     public boolean doublejump(){
  32.        return doublejump;
  33.     }
  34.     public boolean hunger(){
  35.        return hunger;
  36.     }
  37.     public String getName() {
  38.         return name;
  39.     }
  40.     public ItemStack[] getContent() {
  41.         return content;
  42.     }
  43.     public ItemStack[] getArmor() {
  44.         return armor;
  45.     }
  46.     public void applyPotionEffects(Player player) {
  47.         for (PotionEffect effect : potionEffects) {
  48.             player.addPotionEffect(effect);
  49.         }
  50.     }
  51.     public static Kit deserialize(Map<String, Object> o) {
  52.         return new Kit(o.get("name").toString(), (ItemStack[]) o.get("content"), (ItemStack[]) o.get("armor"), (List<PotionEffect>) o.get("potions"),(Boolean) o.get("doublejump"), (Boolean) o.get("hunger"), (Boolean) o.get("soup"), (Boolean) o.get("blockbreak"));
  53.     }
  54.     public Map<String, Object> serialize() {
  55.         Map<String, Object> o = new HashMap<>();
  56.         o.put("name", name);
  57.         o.put("content", content);
  58.         o.put("armor", armor);
  59.         o.put("potions", potionEffects);
  60.         o.put("doublejump", doublejump);
  61.         o.put("hunger", hunger);
  62.         o.put("soup", soup);
  63.         o.put("blockbreak", blockbreak);
  64.         return o;
  65.     }
  66. }

KitManager.java
Code: Alles auswählen
  1. package util;
  2. import org.bukkit.configuration.file.FileConfiguration;
  3. import org.bukkit.configuration.file.YamlConfiguration;
  4. import org.bukkit.configuration.serialization.ConfigurationSerialization;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.potion.PotionEffect;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. public class KitManager {
  14.     private Map<String, Kit> kits = new HashMap<>();
  15.     public void loadKits() {
  16.         ConfigurationSerialization.registerClass(Kit.class);
  17.         FileConfiguration config = YamlConfiguration.loadConfiguration(new File("plugins/1vs1", "kits.yml"));
  18.         if (config.contains("kits")) {
  19.             for (Kit kit : (List<Kit>) config.getList("kits")) {
  20.                 kits.put(kit.getName(), kit);
  21.             }
  22.         }
  23.     }
  24.     public void saveKits() {
  25.         File file = new File("plugins/1vs1", "kits.yml");
  26.         FileConfiguration config = YamlConfiguration.loadConfiguration(file);
  27.         config.set("kits", new ArrayList<>(kits.values()));
  28.         try {
  29.             config.save(file);
  30.         } catch (IOException e) {
  31.             System.err.println("[1vs1] Error while saving kits...");
  32.             e.printStackTrace();
  33.         }
  34.     }
  35.     public void addKit(Kit kit) {
  36.         kits.put(kit.getName(), kit);
  37.     }
  38.     public void removeKit(String kitname) {
  39.         kits.remove(kitname);
  40.     }
  41.     public boolean containsKit(String kitname) {
  42.         return kits.containsKey(kitname);
  43.     }
  44.     public Kit getKit(String kitname) {
  45.         return kits.get(kitname);
  46.     }
  47.     public void applyKit(Player player, String kit) {
  48.         Kit k = getKit(kit);
  49.         player.getInventory().setContents(k.getContent());
  50.         player.getInventory().setArmorContents(k.getArmor());
  51.         for (PotionEffect activePotions : player.getActivePotionEffects()) {
  52.             player.removePotionEffect(activePotions.getType());
  53.         }
  54.         k.applyPotionEffects(player);
  55.     }
  56. }

Kits.yml
Code: Alles auswählen
  1. kits:
  2. - ==: util.Kit
  3.   hunger: false
  4.   doublejump: false
  5.   content: &id001
  6.   - ==: org.bukkit.inventory.ItemStack
  7.     type: STONE_SWORD
  8.   - null
  9.   - null
  10.   - null
  11.   - null
  12.   - null
  13.   - null
  14.   - null
  15.   - null
  16.   - null
  17.   - null
  18.   - null
  19.   - null
  20.   - null
  21.   - null
  22.   - null
  23.   - null
  24.   - null
  25.   - null
  26.   - null
  27.   - null
  28.   - null
  29.   - null
  30.   - null
  31.   - null
  32.   - null
  33.   - null
  34.   - null
  35.   - null
  36.   - null
  37.   - null
  38.   - null
  39.   - null
  40.   - null
  41.   - null
  42.   - null
  43.   potions: &id002 []
  44.   name: rankedkit
  45.   armor: &id003
  46.   - ==: org.bukkit.inventory.ItemStack
  47.     type: AIR
  48.     damage: -1
  49.     amount: 0
  50.   - ==: org.bukkit.inventory.ItemStack
  51.     type: AIR
  52.     damage: -1
  53.     amount: 0
  54.   - ==: org.bukkit.inventory.ItemStack
  55.     type: AIR
  56.     damage: -1
  57.     amount: 0
  58.   - ==: org.bukkit.inventory.ItemStack
  59.     type: AIR
  60.     damage: -1
  61.     amount: 0
  62.   soup: false
  63.   blockbreak: false
  64. - ==: util.Kit
  65.   hunger: false
  66.   doublejump: false
  67.   content: *id001
  68.   potions: *id002
  69.   name: defaultkit
  70.   armor: *id003
  71.   soup: false
  72.   blockbreak: false

So habe ich die Kits gesetzt:
Code: Alles auswählen
  1. p.getInventory().clear();
  2. p.getInventory().addItem(new ItemStack(Material.STONE_SWORD));
  3. Kit k = new Kit("defaultkit", p.getInventory().getContents().clone(), p.getInventory().getArmorContents().clone(), (List<PotionEffect>) p.getActivePotionEffects(), false, false, false, false);
  4. OnevsOne.plugin.km.addKit(k);
  5. OnevsOne.plugin.km.addKit(k.copy("rankedkit"));

Wäre nett wenn mir jemand helfen könnte
Benutzeravatar
naturboy
 
Beiträge: 279
Registriert: Mi 17. Jul 2013, 17:45

Re: [Class] Kits

Beitragvon naturboy » Mo 15. Jun 2015, 13:46

Push
Benutzeravatar
naturboy
 
Beiträge: 279
Registriert: Mi 17. Jul 2013, 17:45

Re: [Class] Kits

Beitragvon Aquaatic » Mo 15. Jun 2015, 14:55

Du castest eine List<ItemStack> zu einem ItemStack[] (Kits.java:54) Macht sinn, dass es nicht geht?
Mit freundlichen Grüßen
~ Aquaatic
Benutzeravatar
Aquaatic
 
Beiträge: 148
Registriert: Mo 16. Feb 2015, 12:51

Re: [Class] Kits

Beitragvon naturboy » Mo 15. Jun 2015, 21:11

Aquaatic hat geschrieben:Du castest eine List<ItemStack> zu einem ItemStack[] (Kits.java:54) Macht sinn, dass es nicht geht?

Wo caste ich denn genauer eine List zu Itemstack [] Fehlercode kann ich ja selber lesen aber eigentlich caste ich doch ein Object zu ItemStack []
Zeile 54 ist die Zeile mit return in der deserialize-Methode
Benutzeravatar
naturboy
 
Beiträge: 279
Registriert: Mi 17. Jul 2013, 17:45

Nächste

Zurück zu Anleitungen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste