• 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!

Itemsystem

waoler

Kuhfänger
Registriert
31 März 2012
Beiträge
72
Diamanten
0
Minecraft
waoler
Guten Morgen liebe Community,
heute erstelle ich endlich den Thread für mein aktuelles Projekt. Bei den bisherigen Problemen konnte ich immer noch im Chat nachfragen, doch mittlerweile ist es besser mit einem Thread :) Ich werde also immer wenn ich wieder ein Problem haben, diesen Threa nutzen, deswegen bitte ich diesen nicht vorzeitig zu schließen, danke :*
Also nun zum Thema: Ich bastel im Moment an einem Plugin für "besondere Items". Diese Items können spezielle Fähigkeiten haben oder auch andere besondere Dinge, die aber noch geheim sind.
Aktuelle Lage: Ich versuche für jedes Item eine Klasse zu erstellen, welche die ItemStack Klasse extended. Das klappt auch alles soweit und ich kann über diese Klasse ein Objekt (das Item) erstellen. ABER!: Wenn ich im späteren Verlauf des Spiels, z.B. einen Befehl nutze und dort das Item was ich dem Spieler hinzugefügt habe überprüfe ob es der Klasse gehört, bekomme ich ein false zurück (p.getItemInHand() instanceof Item).
Nun habe ich mittels RemoteDebug herausgefunden, das schon zu dem Zeitpunkt bei welche ich das Item in das Inventar des Spielers packe, er schon nicht mehr weiß das es zur Itemclass gehört (p.getInventory().addItem(new Item());).
Mein erster Gedanke war, dass es vielleicht mit dem serialisieren bzw. deserialisieren zu tun hat und habe deshalb die beiden Methoden überschrieben und ihnen meine weiteren Eigenschaften des Items mitgeteilt. Leider ohne Erfolg. (Eigentlich logisch weil es ja trotzdem ein Objekt davon sein sollte :/)

Also ich hoffe es ist so halb verstanden worden, was ich machen möchte und welches Problem ich habe. Ich hoffe einer von euch kann mir da weiterhelfen und evt. einige Antworten geben. Ich verzeifel schon und bin im Moment auch garnicht mehr sicher, ob mein Vorhaben überhaupt so umsetztbar ist mit Bukkit / Spigot.
Wenn noch fragen sind, immer her damit!

MfG Jony aka. waoler
 
X

|| xX [DEV][LP] Ms. DivaCraft Xx ||

Guest
Naja, wenn man auf Ressourcen achten will, dann sollte man auch Ahnung von der Materie haben. Nuff said:

Java:
final Pattern p= generate(40); // TODO: Richtiger Name, Konstante
final String res = wrap(p, src);

public static String wrap(Pattern p, String src) {
    return p.matcher(src).replaceAll("$1$3\n");
}

// Regex based on Allan Odgaard
// http://blog.macromates.com/2006/wrapping-text-with-regular-expressions/
public static Pattern generate(int length) {
    final String condition = String.format("(.{1,%d})", length);
    final String delimiter = "( +|$\\n?)";
    final String regex = condition + delimiter + "|" + condition;
    return Pattern.compile(regex);
}

Der Code ist selbsterklärend, sollte aber keinen großartigen Performancegewinn bringen, wenn man es mit einer intelligenten forschleife macht. [Letzteres ist schließlich eigentlich O(n)]
 

waoler

Kuhfänger
Registriert
31 März 2012
Beiträge
72
Diamanten
0
Minecraft
waoler
Okay, nächste Frage :D
Ich habe eine Liste mit meinen Items. An bestimmten stellen möchte ich nun zufällig diese Items droppen. Immer nur ein Item aus dieser Liste! Und jedes Item soll seine eigene Chance haben, sodass ich sagen kann. Item1 = Chance von 20%; Item2 = Chance von 50%. Insgesammt sind es aber nicht 100%, denn wenn ich z.B. ein Item hinzufüge, möchte ich nicht die Werte aller Items anpassen müssen.
Beispiel:
Item1: 20%
Item2: 30%
Item3: 40%
Item4: 10%
Item5: 20%

Jetzt füge ich noch ein hinzu aber ich möchte nicht die anderen Angabe anpassen müssen, sondern einfach nur ein neues hinzufügen... Ich bin nicht sicher ob das verständlich ist :)

Aktuell nehme ich einfach zufällig ein Item aus der Liste, aber da es Items geben soll, die seltener droppen, würde ich gerne Chancen für jedes Items einfügen. Aktuell:
Code:
List<ItemStack> iList = items.getAllItems();
int rand = (int) Math.round(Math.random()*(iList.size()-1));
p.setItemInHand(iList.get(rand));

Ich habe schon einige Dinge versucht, wie z.B. mit HIlfe einer Hashmap, in der ich zu jedem Item eine Chance mit speicher. Aber leider bekomme ich die Rechnung dafür nicht hin und bekomme es dann nicht wieder ausgelesen.

MfG Jony
 

waoler

Kuhfänger
Registriert
31 März 2012
Beiträge
72
Diamanten
0
Minecraft
waoler
Nächste Frage :)
Wie ist es Möglich, die Items (oder deren Beschreibung etc.) im Chat anzeigen zu lassen?
Also nicht als Text, sondern so als Hover Nachricht, wie man das aus RPG´s kennt :)

Ich meine ich habe das schonmal irgendwo gesehen, kann mich aber nicht mehr dran erinnern wo das war.

EDIT: Ich weiß wieder woher :D aus dem Standart Minecraft :) Als Deathnachricht kommt das Item des Killers in den Chat als Hovereffekt. Genau so hätte ich das gerne :)

MfG Jony
 

waoler

Kuhfänger
Registriert
31 März 2012
Beiträge
72
Diamanten
0
Minecraft
waoler
Danke, hatte es schon anders gelößt, aber deine Lösung ist wesentlich einfacher :)
Einziges Problem: Der Hovereffect erstreckt sich über den Kompletten Text nach dem Item. Also er endet nicht nach dem Itemschriftzug.

Code:
new ComponentBuilder(beforeText + "§f[")
  .append(is.getItemMeta().getDisplayName())
  .event(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new BaseComponent[]{new TextComponent(finalNMSItemStack.toString())}))
  .append("§f]" + afterText).create();

Habe schon mit .reset() versucht den Hovereffekt zu löschen, leider ohne Erfolg :/

EDIT: Und wodrauf ich gerade durch Zufall gestoßen bin, wenn ich versuche ein normales Minecraft Item zu "posten" werden alle gekickt und es erscheint die Nachricht:
"Internal Exception: ....... Don´t know how to turn '{"hoverEvent":{"action":"show_item","value":["{id:\"minecraft:rail\",Count:1b,Damage:0s}"]}}}' into a Component"


MfG Jony
 
Zuletzt bearbeitet:
Oben