added Anti Player Loot despawn #16
No files matched your search
+17
-1
@@ -2,6 +2,7 @@ package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.antiPlayer
|
||||
|
||||
import eu.mhsl.craftattack.spawn.core.appliance.Appliance;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
@@ -15,7 +16,7 @@ public class AntiPlayerLootDespawn extends Appliance {
|
||||
private static final String namespace = AntiPlayerLootDespawnListener.class.getSimpleName().toLowerCase(Locale.ROOT);
|
||||
public static NamespacedKey cyclesKey = new NamespacedKey(namespace, "item_deaths_cycles".toLowerCase());
|
||||
|
||||
|
MineTec marked this conversation as resolved
|
||||
public void getItems(List<ItemStack> item) {
|
||||
public void markItems(List<ItemStack> item) {
|
||||
item.forEach(itemStack ->
|
||||
itemStack.editPersistentDataContainer(persistentDataContainer ->
|
||||
persistentDataContainer.set(cyclesKey, PersistentDataType.INTEGER, extraCycles)
|
||||
@@ -23,6 +24,21 @@ public class AntiPlayerLootDespawn extends Appliance {
|
||||
);
|
||||
}
|
||||
|
MineTec marked this conversation as resolved
MineTec
commented
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 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.
|
||||
|
||||
public boolean AboveMaxAge(Item item) {
|
||||
|
MineTec marked this conversation as resolved
Outdated
MineTec
commented
methoden werden kleingeschrieben methoden werden kleingeschrieben
`isItemAboveMaxAge`
ich hatte nur das Max noch einfügen wollen, nicht das 'isItem' streichen.
Ich war halt am handy.
|
||||
ItemStack itemStack = item.getItemStack();
|
||||
|
||||
int cycles = itemStack.getPersistentDataContainer()
|
||||
.getOrDefault(AntiPlayerLootDespawn.cyclesKey, PersistentDataType.INTEGER, 0);
|
||||
|
||||
itemStack.editPersistentDataContainer(data ->
|
||||
data.set(AntiPlayerLootDespawn.cyclesKey, PersistentDataType.INTEGER, cycles - 1)
|
||||
);
|
||||
|
||||
item.setItemStack(itemStack);
|
||||
|
||||
return cycles > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @NotNull List<Listener> listeners() {
|
||||
return List.of(new AntiPlayerLootDespawnListener());
|
||||
|
||||
+2
-18
@@ -1,35 +1,19 @@
|
||||
package eu.mhsl.craftattack.spawn.craftattack.appliances.metaGameplay.antiPlayerLootDespawn;
|
||||
|
||||
import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.ItemDespawnEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
class AntiPlayerLootDespawnListener extends ApplianceListener<AntiPlayerLootDespawn> {
|
||||
|
||||
@EventHandler
|
||||
public void onDeath(PlayerDeathEvent event) {
|
||||
this.getAppliance().getItems(event.getDrops());
|
||||
this.getAppliance().markItems(event.getDrops());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onItemDespawn(ItemDespawnEvent event) {
|
||||
|
MineTec marked this conversation as resolved
Outdated
MineTec
commented
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.
|
||||
Item item = event.getEntity();
|
||||
ItemStack itemStack = item.getItemStack();
|
||||
|
||||
int cycles = itemStack.getPersistentDataContainer()
|
||||
.getOrDefault(AntiPlayerLootDespawn.cyclesKey, PersistentDataType.INTEGER, 0);
|
||||
|
||||
if(cycles <= 0) return;
|
||||
|
||||
itemStack.editPersistentDataContainer(data ->
|
||||
data.set(AntiPlayerLootDespawn.cyclesKey, PersistentDataType.INTEGER, cycles - 1)
|
||||
);
|
||||
|
||||
item.setItemStack(itemStack);
|
||||
event.setCancelled(true);
|
||||
event.setCancelled(this.getAppliance().AboveMaxAge(event.getEntity()));
|
||||
|
MineTec marked this conversation as resolved
Outdated
MineTec
commented
alle Konstanten zur appliance, nicht in den listener alle Konstanten zur appliance, nicht in den listener
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user
getItemspasst nicht. VielleichtmarkItems