diff --git a/README.md b/README.md index 063cd41..5705c9e 100644 --- a/README.md +++ b/README.md @@ -11,20 +11,23 @@ your custom virtual inventories with ease. FakeInventory inventory = new FakeInventory(InventoryType.CHEST, "Custom inventory"); inventory.setDefaultItemHandler((item, event) -> { - event.setCancelled(true); + event.setCancelled(); Player target = event.getTransaction().getSource(); - target.sendMessage("is default item handler"); + target.sendMessage("This is default item handler"); }); inventory.setItem(5, Item.get(Item.DIAMOND), (item, event) -> { - event.setCancelled(true); + event.setCancelled(); Player target = event.getTransaction().getSource(); - target.sendMessage("is custom item handler"); + target.sendMessage("This is custom item handler"); target.removeWindow(inventory); }); +inventory.setOpenHandler(player -> player.sendMessage("You opened inventory")); +inventory.setCloseHandler(player -> player.sendMessage("You closed inventory")); + player.addWindow(inventory); ``` @@ -45,7 +48,7 @@ Adding dependency: com.luminiadev.fakeinventories fakeinventories - 1.2.0 + 1.2.1 ``` @@ -60,5 +63,5 @@ maven { Adding dependency: ```kts -compileOnly("com.luminiadev.fakeinventories:fakeinventories:1.2.0") +compileOnly("com.luminiadev.fakeinventories:fakeinventories:1.2.1") ``` \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index d8b2963..27c4936 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "com.luminiadev.fakeinventories" -version = "1.2.0" +version = "1.2.1" java { toolchain { diff --git a/src/main/java/me/iwareq/fakeinventories/FakeInventory.java b/src/main/java/me/iwareq/fakeinventories/FakeInventory.java index e72062a..22870fc 100644 --- a/src/main/java/me/iwareq/fakeinventories/FakeInventory.java +++ b/src/main/java/me/iwareq/fakeinventories/FakeInventory.java @@ -13,19 +13,23 @@ import lombok.Setter; import me.iwareq.fakeinventories.block.FakeBlock; import me.iwareq.fakeinventories.util.ItemHandler; +import me.iwareq.fakeinventories.util.SimplePlayerHandler; import java.util.HashMap; -import java.util.List; import java.util.Map; +import java.util.Optional; +@Setter public class FakeInventory extends BaseInventory { @Getter @Setter private String title; - @Setter private ItemHandler defaultItemHandler; + private SimplePlayerHandler openHandler; + private SimplePlayerHandler closeHandler; + private final Map handlers = new HashMap<>(); private final FakeBlock fakeBlock; @@ -49,21 +53,24 @@ public void onOpen(Player player) { packet.windowId = player.getWindowId(this); packet.type = this.getType().getNetworkType(); - List positions = this.fakeBlock.getPlacePositions(player); - if (positions.isEmpty()) { - return; + Optional first = this.fakeBlock.getLastPositions(player).stream().findFirst(); + if (first.isPresent()) { + Vector3 position = first.get(); + packet.x = position.getFloorX(); + packet.y = position.getFloorY(); + packet.z = position.getFloorZ(); + player.dataPacket(packet); + + super.onOpen(player); + this.sendContents(player); + } else { + this.fakeBlock.remove(player); } - - Vector3 position = positions.get(0); - packet.x = position.getFloorX(); - packet.y = position.getFloorY(); - packet.z = position.getFloorZ(); - player.dataPacket(packet); - - super.onOpen(player); - - this.sendContents(player); }, 2); + + if (this.openHandler != null) { + this.openHandler.handle(player); + } } @Override @@ -75,6 +82,10 @@ public void onClose(Player player) { super.onClose(player); this.fakeBlock.remove(player); + + if (this.closeHandler != null) { + this.closeHandler.handle(player); + } } public void setItem(int index, Item item, ItemHandler handler) { @@ -83,6 +94,10 @@ public void setItem(int index, Item item, ItemHandler handler) { } } + public void setItemHandler(int index, ItemHandler handler) { + this.handlers.put(index, handler); + } + public void handle(int index, Item item, InventoryTransactionEvent event) { ItemHandler handler = this.handlers.getOrDefault(index, this.defaultItemHandler); if (handler == null) { diff --git a/src/main/java/me/iwareq/fakeinventories/util/SimplePlayerHandler.java b/src/main/java/me/iwareq/fakeinventories/util/SimplePlayerHandler.java new file mode 100644 index 0000000..4fd0c90 --- /dev/null +++ b/src/main/java/me/iwareq/fakeinventories/util/SimplePlayerHandler.java @@ -0,0 +1,8 @@ +package me.iwareq.fakeinventories.util; + +import cn.nukkit.Player; + +@FunctionalInterface +public interface SimplePlayerHandler { + void handle(Player player); +}