Skip to content

Commit 96dec22

Browse files
committed
feat: Prevent selling StorageBox
1 parent 7f773c9 commit 96dec22

3 files changed

Lines changed: 89 additions & 1 deletion

File tree

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group = "net.azisaba"
12-
version = "6.20.1+1.15.2"
12+
version = "6.20.2+1.15.2"
1313

1414
java {
1515
toolchain.languageVersion.set(JavaLanguageVersion.of(11))

src/main/java/com/github/mori01231/lifecore/LifeCore.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ class LifeCore : JavaPlugin() {
332332
pm.registerEvents(WandItemListener(this), this)
333333
pm.registerEvents(EscapeLobbyListener(this), this)
334334
pm.registerEvents(PreventOpenMerchantMenuListener(), this)
335+
pm.registerEvents(PreventStorageBoxSellListener(this), this)
335336
pm.registerEvents(CancelMythicItemPlaceListener(), this)
336337
pm.registerEvents(GameModeChangeLoggerListener(this), this)
337338
pm.registerEvents(FixMythicItemListener, this)
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.github.mori01231.lifecore.listener;
2+
3+
import com.github.mori01231.lifecore.LifeCore;
4+
import com.github.mori01231.lifecore.util.ItemUtil;
5+
import org.bukkit.ChatColor;
6+
import org.bukkit.event.EventHandler;
7+
import org.bukkit.event.Listener;
8+
import org.bukkit.event.inventory.InventoryClickEvent;
9+
import org.bukkit.event.inventory.InventoryDragEvent;
10+
import org.bukkit.inventory.ItemStack;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
public class PreventStorageBoxSellListener implements Listener {
14+
private final LifeCore plugin;
15+
16+
public PreventStorageBoxSellListener(@NotNull LifeCore plugin) {
17+
this.plugin = plugin;
18+
}
19+
20+
@EventHandler
21+
public void onInventoryClick(InventoryClickEvent event) {
22+
// Check if the inventory title contains "Menu" and "Sell"
23+
if (event.getView().getTitle().contains("Menu") && event.getView().getTitle().contains("Sell")) {
24+
// Check if player is moving an item TO the sell screen (clicked inventory is the top inventory)
25+
if (event.getClickedInventory() != null && event.getClickedInventory().equals(event.getView().getTopInventory())) {
26+
ItemStack item = null;
27+
28+
// Handle different click types
29+
switch (event.getAction()) {
30+
case PLACE_ALL:
31+
case PLACE_ONE:
32+
case PLACE_SOME:
33+
case SWAP_WITH_CURSOR:
34+
item = event.getCursor();
35+
break;
36+
case MOVE_TO_OTHER_INVENTORY:
37+
item = event.getCurrentItem();
38+
break;
39+
default:
40+
// For shift-click from player inventory
41+
if (event.isShiftClick() && event.getClickedInventory().equals(event.getView().getBottomInventory())) {
42+
item = event.getCurrentItem();
43+
}
44+
break;
45+
}
46+
47+
if (item != null && hasStorageBoxType(item)) {
48+
event.setCancelled(true);
49+
event.getWhoClicked().sendMessage(ChatColor.RED + "StorageBoxは売却できません。");
50+
}
51+
}
52+
53+
// Handle shift-clicking from player inventory to sell screen
54+
if (event.isShiftClick() && event.getClickedInventory() != null
55+
&& event.getClickedInventory().equals(event.getView().getBottomInventory())) {
56+
ItemStack item = event.getCurrentItem();
57+
if (item != null && hasStorageBoxType(item)) {
58+
event.setCancelled(true);
59+
event.getWhoClicked().sendMessage(ChatColor.RED + "ストレージボックスは売却できません。");
60+
}
61+
}
62+
}
63+
}
64+
65+
@EventHandler
66+
public void onInventoryDrag(InventoryDragEvent event) {
67+
// Check if the inventory title contains "Menu" and "Sell"
68+
if (event.getView().getTitle().contains("Menu") && event.getView().getTitle().contains("Sell")) {
69+
// Check if any of the dragged slots are in the top inventory
70+
boolean isDraggingToSellScreen = event.getRawSlots().stream()
71+
.anyMatch(slot -> slot < event.getView().getTopInventory().getSize());
72+
73+
if (isDraggingToSellScreen) {
74+
ItemStack item = event.getOldCursor();
75+
if (item != null && hasStorageBoxType(item)) {
76+
event.setCancelled(true);
77+
event.getWhoClicked().sendMessage(ChatColor.RED + "ストレージボックスは売却できません。");
78+
}
79+
}
80+
}
81+
}
82+
83+
private boolean hasStorageBoxType(@NotNull ItemStack item) {
84+
String storageBoxType = ItemUtil.getStringTag(item, "storageBoxType");
85+
return storageBoxType != null && !storageBoxType.isEmpty();
86+
}
87+
}

0 commit comments

Comments
 (0)