Skip to content

Commit ee90e2e

Browse files
authored
Merge pull request #38
Updated & Merged ItemsAdder Event Listener
2 parents 28b5439 + 6e54d3d commit ee90e2e

6 files changed

Lines changed: 95 additions & 9 deletions

File tree

core/src/main/java/com/wolfyscript/utilities/bukkit/listeners/PersistentStorageListener.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353

5454
public class PersistentStorageListener implements Listener {
5555

56-
private static final String PREVIOUS_BROKEN_STORE = "previous_store";
56+
public static final String PREVIOUS_BROKEN_STORE = "previous_store";
5757

5858
private final WolfyCoreBukkit core;
5959
private final PersistentStorage persistentStorage;
@@ -117,13 +117,14 @@ private void initOrUpdateChunk(Chunk chunk) {
117117
/**
118118
* Handles the BlockStorages that are placed together with blocks.
119119
*/
120-
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
120+
@EventHandler(priority = EventPriority.HIGHEST)
121121
public void onBlockStoragePlace(BlockPlaceEvent event) {
122122
if (event.canBuild()) {
123123
Block block = event.getBlock();
124124
WorldStorage worldStorage = persistentStorage.getOrCreateWorldStorage(block.getWorld());
125125
BlockStorage blockStorage = worldStorage.createBlockStorage(block.getLocation());
126126
var blockStorePlaceEvent = new BlockStoragePlaceEvent(block, blockStorage, event.getBlockReplacedState(), event.getBlockAgainst(), event.getItemInHand(), event.getPlayer(), event.canBuild(), event.getHand());
127+
blockStorePlaceEvent.setCancelled(event.isCancelled());
127128
Bukkit.getPluginManager().callEvent(blockStorePlaceEvent);
128129
event.setCancelled(blockStorePlaceEvent.isCancelled());
129130

@@ -133,11 +134,13 @@ public void onBlockStoragePlace(BlockPlaceEvent event) {
133134
}
134135
}
135136

136-
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
137+
@EventHandler(priority = EventPriority.HIGHEST)
137138
public void onBlockPlaceMulti(BlockMultiPlaceEvent event) {
138139
WorldStorage worldStorage = persistentStorage.getOrCreateWorldStorage(event.getBlock().getWorld());
139140
List<BlockStorage> storages = event.getReplacedBlockStates().stream().map(state -> worldStorage.createBlockStorage(state.getLocation())).toList();
140141
var blockStorageMultiPlaceEvent = new BlockStorageMultiPlaceEvent(event.getReplacedBlockStates(), storages, event.getBlockAgainst(), event.getItemInHand(), event.getPlayer(), event.canBuild());
142+
blockStorageMultiPlaceEvent.setCancelled(event.isCancelled());
143+
Bukkit.getPluginManager().callEvent(blockStorageMultiPlaceEvent);
141144
event.setCancelled(blockStorageMultiPlaceEvent.isCancelled());
142145

143146
if (blockStorageMultiPlaceEvent.isCancelled()) return;
@@ -191,13 +194,14 @@ private void updatePistonBlocks(World world, List<Block> blocks, BlockFace direc
191194
}));
192195
}
193196

194-
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
197+
@EventHandler(priority = EventPriority.HIGHEST)
195198
public void onBlockStorageBreak(BlockBreakEvent event) {
196199
var block = event.getBlock();
197200
var worldStorage = persistentStorage.getOrCreateWorldStorage(block.getWorld());
198201
worldStorage.getBlock(block.getLocation()).ifPresent(store -> {
199202
if (!store.isEmpty()) {
200203
var blockStorageBreakEvent = new BlockStorageBreakEvent(event.getBlock(), store, event.getPlayer());
204+
blockStorageBreakEvent.setCancelled(event.isCancelled());
201205
Bukkit.getPluginManager().callEvent(blockStorageBreakEvent);
202206
if (blockStorageBreakEvent.isCancelled()) return;
203207
worldStorage.removeBlock(block.getLocation()).ifPresent(storage -> {

core/src/main/java/com/wolfyscript/utilities/bukkit/listeners/custom_item/CustomItemDataListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void onDropItems(BlockStorageDropItemsEvent event) {
5858
@EventHandler
5959
public void onPlaceBlock(BlockStoragePlaceEvent event) {
6060
var customItem = CustomItem.getByItemStack(event.getItemInHand());
61-
if (!ItemUtils.isAirOrNull(customItem) && customItem.getItemStack().getType().isBlock()) {
61+
if (!ItemUtils.isAirOrNull(customItem) && customItem.isBlock()) {
6262
if (customItem.isBlockPlacement()) {
6363
event.setCancelled(true);
6464
}

core/src/main/java/me/wolfyscript/utilities/api/inventory/custom_items/CustomItem.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@
5454
import me.wolfyscript.utilities.api.inventory.custom_items.references.APIReference;
5555
import me.wolfyscript.utilities.api.inventory.custom_items.references.VanillaRef;
5656
import me.wolfyscript.utilities.api.inventory.custom_items.references.WolfyUtilitiesRef;
57+
import me.wolfyscript.utilities.compatibility.plugins.ItemsAdderIntegration;
58+
import me.wolfyscript.utilities.compatibility.plugins.itemsadder.CustomStack;
59+
import me.wolfyscript.utilities.compatibility.plugins.itemsadder.ItemsAdderRef;
5760
import me.wolfyscript.utilities.registry.Registries;
5861
import me.wolfyscript.utilities.util.Keyed;
5962
import me.wolfyscript.utilities.util.NamespacedKey;
@@ -1492,6 +1495,11 @@ public void setAmount(int amount) {
14921495
getApiReference().setAmount(amount);
14931496
}
14941497

1498+
public boolean isBlock() {
1499+
return type.isBlock() || (getApiReference() instanceof ItemsAdderRef iaRef && WolfyCoreBukkit.getInstance().getCompatibilityManager().getPlugins()
1500+
.evaluateIfAvailable("ItemsAdder", ItemsAdderIntegration.class, ia -> ia.getStackInstance(iaRef.getItemID()).map(CustomStack::isBlock).orElse(false)));
1501+
}
1502+
14951503
@Override
14961504
public String toString() {
14971505
return "CustomItem{" +

core/src/main/java/me/wolfyscript/utilities/util/world/WorldCustomItemStore.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,20 @@ public void store(Location location, CustomItem customItem) {
6363
@Deprecated
6464
public void remove(Location location) {
6565
if (location == null || location.getWorld() == null) return;
66-
((WolfyCoreBukkit) WolfyCoreBukkit.getInstance()).getPersistentStorage().getOrCreateWorldStorage(location.getWorld()).removeBlock(location);
66+
WolfyCoreBukkit.getInstance().getPersistentStorage().getOrCreateWorldStorage(location.getWorld()).removeBlock(location);
6767
}
6868

6969
@Deprecated
7070
public boolean isStored(Location location) {
7171
if (location == null || location.getWorld() == null) return false;
72-
return ((WolfyCoreBukkit) WolfyCoreBukkit.getInstance()).getPersistentStorage().getOrCreateWorldStorage(location.getWorld()).getBlock(location).isPresent();
72+
return WolfyCoreBukkit.getInstance().getPersistentStorage().getOrCreateWorldStorage(location.getWorld()).getBlock(location).isPresent();
7373
}
7474

7575
@Deprecated
7676
@Nullable
7777
public BlockCustomItemStore get(Location location) {
7878
if (location == null || location.getWorld() == null) return null;
79-
return ((WolfyCoreBukkit) WolfyCoreBukkit.getInstance()).getPersistentStorage().getOrCreateWorldStorage(location.getWorld()).getBlock(location)
79+
return WolfyCoreBukkit.getInstance().getPersistentStorage().getOrCreateWorldStorage(location.getWorld()).getBlock(location)
8080
.flatMap(storage -> storage.getData(CustomItemBlockData.ID, CustomItemBlockData.class)).map(data -> new BlockCustomItemStore(data.getItem(), null)).orElse(null);
8181
}
8282

@@ -107,7 +107,7 @@ public boolean hasStoredEffect(Location location) {
107107
@Deprecated
108108
void setStore(Location location, BlockCustomItemStore blockStore) {
109109
if (location == null || location.getWorld() == null) return;
110-
ChunkStorage chunkStorage = ((WolfyCoreBukkit) WolfyCoreBukkit.getInstance()).getPersistentStorage().getOrCreateWorldStorage(location.getWorld()).getOrCreateChunkStorage(location);
110+
ChunkStorage chunkStorage = WolfyCoreBukkit.getInstance().getPersistentStorage().getOrCreateWorldStorage(location.getWorld()).getOrCreateChunkStorage(location);
111111
BlockStorage blockStorage = chunkStorage.getOrCreateBlockStorage(location);
112112
blockStorage.addOrSetData(new CustomItemBlockData(WolfyCoreBukkit.getInstance(), chunkStorage, blockStorage.getPos(), blockStore.getCustomItemKey()));
113113
chunkStorage.setBlockStorageIfAbsent(blockStorage);

plugin-compatibility/plugin-compatibility-artifact/src/main/java/me/wolfyscript/utilities/compatibility/plugins/ItemsAdderImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import me.wolfyscript.utilities.api.inventory.custom_items.references.APIReference;
2626
import me.wolfyscript.utilities.compatibility.PluginIntegrationAbstract;
2727
import me.wolfyscript.utilities.compatibility.plugins.itemsadder.CustomBlock;
28+
import me.wolfyscript.utilities.compatibility.plugins.itemsadder.CustomItemListener;
2829
import me.wolfyscript.utilities.compatibility.plugins.itemsadder.CustomBlockWrapper;
2930
import me.wolfyscript.utilities.compatibility.plugins.itemsadder.CustomStack;
3031
import me.wolfyscript.utilities.compatibility.plugins.itemsadder.CustomStackWrapper;
@@ -48,6 +49,7 @@ protected ItemsAdderImpl(WolfyUtilCore core) {
4849
public void init(Plugin plugin) {
4950
core.registerAPIReference(new ItemsAdderRefImpl.Parser());
5051
Bukkit.getPluginManager().registerEvents(this, core);
52+
Bukkit.getPluginManager().registerEvents(new CustomItemListener(this), core);
5153
}
5254

5355
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package me.wolfyscript.utilities.compatibility.plugins.itemsadder;
2+
3+
import com.wolfyscript.utilities.bukkit.WolfyCoreBukkit;
4+
import com.wolfyscript.utilities.bukkit.events.persistent.BlockStorageBreakEvent;
5+
import com.wolfyscript.utilities.bukkit.events.persistent.BlockStoragePlaceEvent;
6+
import com.wolfyscript.utilities.bukkit.listeners.PersistentStorageListener;
7+
import com.wolfyscript.utilities.bukkit.persistent.world.BlockStorage;
8+
import com.wolfyscript.utilities.bukkit.persistent.world.WorldStorage;
9+
import dev.lone.itemsadder.api.Events.CustomBlockBreakEvent;
10+
import dev.lone.itemsadder.api.Events.CustomBlockPlaceEvent;
11+
import me.wolfyscript.utilities.compatibility.plugins.ItemsAdderImpl;
12+
import org.bukkit.Bukkit;
13+
import org.bukkit.block.Block;
14+
import org.bukkit.event.EventHandler;
15+
import org.bukkit.event.Listener;
16+
import org.bukkit.inventory.EquipmentSlot;
17+
import org.bukkit.metadata.FixedMetadataValue;
18+
19+
public class CustomItemListener implements Listener {
20+
21+
private final ItemsAdderImpl iaImpl;
22+
private final WolfyCoreBukkit core;
23+
24+
public CustomItemListener(ItemsAdderImpl iaImpl) {
25+
this.iaImpl = iaImpl;
26+
this.core = WolfyCoreBukkit.getInstance();
27+
}
28+
29+
@EventHandler
30+
public void onBlockPlacement(CustomBlockPlaceEvent event) {
31+
/*
32+
Call the StoragePlaceEvent when placing IA blocks!
33+
*/
34+
if (event.isCanBuild()) {
35+
Block block = event.getBlock();
36+
WorldStorage worldStorage = WolfyCoreBukkit.getInstance().getPersistentStorage().getOrCreateWorldStorage(block.getWorld());
37+
BlockStorage blockStorage = worldStorage.createBlockStorage(block.getLocation());
38+
var blockStorePlaceEvent = new BlockStoragePlaceEvent(block, blockStorage, event.getReplacedBlockState(), event.getPlacedAgainst(), event.getItemInHand(), event.getPlayer(), event.isCanBuild(),
39+
// Since we do not get the hand used, we need to guess it.
40+
event.getItemInHand().isSimilar(event.getPlayer().getEquipment().getItemInMainHand()) ? EquipmentSlot.HAND : EquipmentSlot.OFF_HAND
41+
);
42+
blockStorePlaceEvent.setCancelled(event.isCancelled());
43+
Bukkit.getPluginManager().callEvent(blockStorePlaceEvent);
44+
event.setCancelled(blockStorePlaceEvent.isCancelled());
45+
46+
if (!blockStorage.isEmpty() && !blockStorePlaceEvent.isCancelled()) {
47+
worldStorage.setBlockStorageIfAbsent(blockStorage);
48+
}
49+
}
50+
}
51+
52+
@EventHandler
53+
public void onBlockBreak(CustomBlockBreakEvent event) {
54+
/*
55+
Doesn't look like this is actually required. Include it anyway just in case as it is just called if the stored data still exists!
56+
*/
57+
var block = event.getBlock();
58+
var worldStorage = WolfyCoreBukkit.getInstance().getPersistentStorage().getOrCreateWorldStorage(block.getWorld());
59+
worldStorage.getBlock(block.getLocation()).ifPresent(store -> {
60+
if (!store.isEmpty()) {
61+
var blockStorageBreakEvent = new BlockStorageBreakEvent(event.getBlock(), store, event.getPlayer());
62+
blockStorageBreakEvent.setCancelled(event.isCancelled());
63+
Bukkit.getPluginManager().callEvent(blockStorageBreakEvent);
64+
if (blockStorageBreakEvent.isCancelled()) return;
65+
worldStorage.removeBlock(block.getLocation()).ifPresent(storage -> {
66+
event.getBlock().setMetadata(PersistentStorageListener.PREVIOUS_BROKEN_STORE, new FixedMetadataValue(core, storage));
67+
});
68+
}
69+
});
70+
}
71+
72+
}

0 commit comments

Comments
 (0)