die klasse kann package-private sein, dann sieht nur die Appliance den Listener, und nicht das ganze Projekt. Dazu einfach das Public ersatzlos wegnehmen.
die klasse kann package-private sein, dann sieht nur die Appliance den Listener, und nicht das ganze Projekt. Dazu einfach das Public ersatzlos wegnehmen.
dieses Vorgehen wird schwirig, oder sogar garnicht mehr funktionieren, sobald mehr als ein Spieler Pro Spiel-Tick sterben sollten...
siehe unten für Lösung.
dieses Vorgehen wird schwirig, oder sogar garnicht mehr funktionieren, sobald mehr als ein Spieler Pro Spiel-Tick sterben sollten...
siehe unten für Lösung.
dieser Weg ist sehr sehr Hacky... Und es gibt einen viel besseren Weg: es gibt PlayerDeathEvent#getDrops. Dort können direkt alle ItemStacks welche resultiertend aus dem Tod gedroppt werden. Kein Distance-Check, keine Race conditions, mit Items die zufällit normal in dem Bereich im selbigen Tick gedroppt werden.
Sowas wie event.getDrops().forEach(item -> item.editPersistentDataContainer(persistentDataContainer -> persistentDataContainer.set(cyclesKey, PersistentDataType.INTEGER, extraCycles));
Die Variablen und der Listener fallen weg.
dieser Weg ist sehr sehr Hacky... Und es gibt einen viel besseren Weg: es gibt PlayerDeathEvent#getDrops. Dort können direkt alle ItemStacks welche resultiertend aus dem Tod gedroppt werden. Kein Distance-Check, keine Race conditions, mit Items die zufällit normal in dem Bereich im selbigen Tick gedroppt werden.
Sowas wie `event.getDrops().forEach(item -> item.editPersistentDataContainer(persistentDataContainer -> persistentDataContainer.set(cyclesKey, PersistentDataType.INTEGER, extraCycles));`
Die Variablen und der Listener fallen weg.
Wenn das Markieren von Items hier als Logik in der Appliance liegt, sollte das testen auf markierte Items auch hier liegen. Dann ist die Logik "was ist ein markiertes Item?" hier zusammen und nicht geteilt.
Sowas wie boolean shouldDelete(ItemStack stack) {}
Dann wird hier auch der counter berechnet und das event bricht dann nur anhand des booleans ab.
Wenn das Markieren von Items hier als Logik in der Appliance liegt, sollte das testen auf markierte Items auch hier liegen. Dann ist die Logik "was ist ein markiertes Item?" hier zusammen und nicht geteilt.
Sowas wie `boolean shouldDelete(ItemStack stack) {}`
Dann wird hier auch der counter berechnet und das event bricht dann nur anhand des booleans ab.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
@@ -0,0 +14,4 @@import java.util.Locale;public class AntiPlayerLootDespawnListener extends ApplianceListener<AntiPlayerLootDespawn> {private static final int extraCycles = 5;alle Konstanten zur appliance, nicht in den listener
@@ -0,0 +13,4 @@import java.util.Locale;public class AntiPlayerLootDespawnListener extends ApplianceListener<AntiPlayerLootDespawn> {die klasse kann package-private sein, dann sieht nur die Appliance den Listener, und nicht das ganze Projekt. Dazu einfach das Public ersatzlos wegnehmen.
@@ -0,0 +17,4 @@private static final int extraCycles = 5;private static final String namespace = AntiPlayerLootDespawnListener.class.getSimpleName().toLowerCase(Locale.ROOT);public static NamespacedKey cyclesKey = new NamespacedKey(namespace, "item_deaths_cycles".toLowerCase());private Location lastDeathLocation;dieses Vorgehen wird schwirig, oder sogar garnicht mehr funktionieren, sobald mehr als ein Spieler Pro Spiel-Tick sterben sollten...
siehe unten für Lösung.
@@ -0,0 +27,4 @@}@EventHandlerpublic void onItemSpawn(ItemSpawnEvent event) {dieser Weg ist sehr sehr Hacky... Und es gibt einen viel besseren Weg: es gibt PlayerDeathEvent#getDrops. Dort können direkt alle ItemStacks welche resultiertend aus dem Tod gedroppt werden. Kein Distance-Check, keine Race conditions, mit Items die zufällit normal in dem Bereich im selbigen Tick gedroppt werden.
Sowas wie
event.getDrops().forEach(item -> item.editPersistentDataContainer(persistentDataContainer -> persistentDataContainer.set(cyclesKey, PersistentDataType.INTEGER, extraCycles));Die Variablen und der Listener fallen weg.
@@ -0,0 +41,4 @@@EventHandlerpublic void onItemDespawn(ItemDespawnEvent event) {PersistentDataContainer data = event.getEntity().getPersistentDataContainer();Integer cycles = data.get(cyclesKey, PersistentDataType.INTEGER);statt dem Nullcheck wäre ein PersistentDataContainer#getOrDefault schöner mit
0als default...@@ -0,0 +15,4 @@private static final String namespace = AntiPlayerLootDespawnListener.class.getSimpleName().toLowerCase(Locale.ROOT);public static NamespacedKey cyclesKey = new NamespacedKey(namespace, "item_deaths_cycles".toLowerCase());public void getItems(List<ItemStack> item) {getItemspasst nicht. VielleichtmarkItems@@ -0,0 +22,4 @@));}Wenn das Markieren von Items hier als Logik in der Appliance liegt, sollte das testen auf markierte Items auch hier liegen. Dann ist die Logik "was ist ein markiertes Item?" hier zusammen und nicht geteilt.
Sowas wie
boolean shouldDelete(ItemStack stack) {}Dann wird hier auch der counter berechnet und das event bricht dann nur anhand des booleans ab.
@@ -0,0 +24,4 @@);}public boolean AboveMaxAge(Item item) {methoden werden kleingeschrieben
isItemAboveMaxAgeich hatte nur das Max noch einfügen wollen, nicht das 'isItem' streichen.
Ich war halt am handy.
AboveMaxAgetoisItemAboveMaxAge5b7910b697