Skip to content

Commit a7c3341

Browse files
committed
equip feature and permissions
1 parent d12832c commit a7c3341

File tree

5 files changed

+91
-6
lines changed

5 files changed

+91
-6
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<modelVersion>4.0.0</modelVersion>
33
<groupId>project</groupId>
44
<artifactId>items</artifactId>
5-
<version>1.2.0</version>
5+
<version>1.3.0</version>
66
<name>BendingItems</name>
77

88
<repositories>

src/me/simplicitee/project/items/ItemCommand.java

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import com.projectkorra.projectkorra.command.PKCommand;
1212

13+
import me.simplicitee.project.items.BendingItem.Usage;
1314
import me.simplicitee.project.items.gui.ItemGui;
1415
import net.md_5.bungee.api.ChatColor;
1516

@@ -18,7 +19,7 @@ public class ItemCommand extends PKCommand {
1819
private ItemGui gui;
1920

2021
public ItemCommand() {
21-
super("item", "/bending item <give <item> [player] / list / gui>", "Do many things with bending items!", new String[] {"item"});
22+
super("item", "/bending item <give <item> [player] / list / gui / stats <item>>", "Do many things with bending items!", new String[] {"item"});
2223
gui = new ItemGui(ItemManager.listItems());
2324
}
2425

@@ -29,7 +30,9 @@ public void execute(CommandSender sender, List<String> args) {
2930
}
3031

3132
if (args.get(0).equalsIgnoreCase("give")) {
32-
if (args.size() < 2) {
33+
if (!hasPermission(sender, "give")) {
34+
return;
35+
} else if (args.size() < 2) {
3336
sender.sendMessage(ChatColor.RED + "Not enough arguments!");
3437
return;
3538
}
@@ -61,7 +64,9 @@ public void execute(CommandSender sender, List<String> args) {
6164

6265
sender.sendMessage(ItemManager.listItems().stream().map((b) -> "- " + ChatColor.BOLD + b.getInternalName() + ChatColor.RESET + " [" + b.getDisplayName() + ChatColor.RESET + "]").collect(Collectors.toList()).toArray(new String[0]));
6366
} else if (args.get(0).equalsIgnoreCase("gui")) {
64-
if (!(sender instanceof Player)) {
67+
if (!hasPermission(sender, "gui")) {
68+
return;
69+
} else if (!(sender instanceof Player)) {
6570
sender.sendMessage(ChatColor.RED + "Player only command!");
6671
return;
6772
} else if (args.size() > 1) {
@@ -98,6 +103,35 @@ public void execute(CommandSender sender, List<String> args) {
98103
stats.add("Usage: " + item.getUsage().toString());
99104
stats.addAll(item.listMods());
100105
sender.sendMessage(stats.toArray(new String[0]));
106+
} else if (args.get(0).equalsIgnoreCase("equip")) {
107+
if (!hasPermission(sender, "equip")) {
108+
return;
109+
} else if (!(sender instanceof Player)) {
110+
sender.sendMessage(ChatColor.RED + "Player only command!");
111+
return;
112+
} else if (args.size() > 1) {
113+
sender.sendMessage(ChatColor.RED + "Too many arguments!");
114+
return;
115+
}
116+
117+
Player player = (Player) sender;
118+
BendingItem item = ItemManager.get(player.getInventory().getItemInMainHand());
119+
120+
if (item == null) {
121+
sender.sendMessage(ChatColor.RED + "Invalid bending item!");
122+
return;
123+
} else if (item.getUsage() != Usage.HOLDING) {
124+
sender.sendMessage(ChatColor.RED + "Can only equip items used by HOLDING!");
125+
return;
126+
}
127+
128+
if (!ItemManager.equipped(player)) {
129+
sender.sendMessage(ChatColor.GREEN + "Equipped");
130+
ItemManager.equip(player, item);
131+
} else {
132+
sender.sendMessage(ChatColor.GREEN + "Unequipped");
133+
ItemManager.unequip(player);
134+
}
101135
} else {
102136
sender.sendMessage(ChatColor.RED + "Unknown argument given!");
103137
return;

src/me/simplicitee/project/items/ItemManager.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ private ItemManager() {}
3232
private static final NamespacedKey namespace = new NamespacedKey(JavaPlugin.getPlugin(ItemsPlugin.class), "itemid");
3333
private static final Map<String, BendingItem> NAME_CACHE = new HashMap<>();
3434
private static final Map<Integer, BendingItem> ID_CACHE = new HashMap<>();
35+
private static final Map<Player, BendingItem> EQUIPPED = new HashMap<>();
3536

3637
private static final String DISPLAY_PATH = "Display";
3738
private static final String LORE_PATH = "Lore";
@@ -40,6 +41,22 @@ private ItemManager() {}
4041
private static final String USAGE_PATH = "Usage";
4142
private static final String ELEMENT_PATH = "Element";
4243

44+
public static void equip(Player player, BendingItem item) {
45+
EQUIPPED.put(player, item);
46+
}
47+
48+
public static void unequip(Player player) {
49+
EQUIPPED.remove(player);
50+
}
51+
52+
public static boolean equipped(Player player) {
53+
return EQUIPPED.containsKey(player);
54+
}
55+
56+
public static boolean matches(Player player, ItemStack item) {
57+
return EQUIPPED.containsKey(player) && EQUIPPED.get(player).isSimilar(item);
58+
}
59+
4360
public static List<BendingItem> listActive(Player player) {
4461
List<BendingItem> actives = new ArrayList<>();
4562

src/me/simplicitee/project/items/ItemsPlugin.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package me.simplicitee.project.items;
22

3+
import org.bukkit.entity.Player;
34
import org.bukkit.event.EventHandler;
45
import org.bukkit.event.EventPriority;
56
import org.bukkit.event.Listener;
7+
import org.bukkit.event.player.PlayerItemHeldEvent;
8+
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
9+
import org.bukkit.inventory.ItemStack;
610
import org.bukkit.plugin.java.JavaPlugin;
711

812
import com.projectkorra.projectkorra.ability.CoreAbility;
@@ -31,4 +35,27 @@ public void onAbilityStart(AbilityStartEvent event) {
3135
item.applyMods((CoreAbility) event.getAbility());
3236
}
3337
}
38+
39+
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
40+
public void onSlotChange(PlayerItemHeldEvent event) {
41+
Player player = event.getPlayer();
42+
43+
if (ItemManager.equipped(player)) {
44+
ItemStack equip = player.getInventory().getItem(event.getPreviousSlot());
45+
46+
if (!ItemManager.matches(player, equip)) {
47+
ItemManager.unequip(player);
48+
return;
49+
}
50+
51+
player.getInventory().setItem(event.getPreviousSlot(), event.getPlayer().getInventory().getItem(event.getNewSlot()));
52+
player.getInventory().setItem(event.getNewSlot(), equip);
53+
player.updateInventory();
54+
}
55+
}
56+
57+
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
58+
public void onOffhand(PlayerSwapHandItemsEvent event) {
59+
event.setCancelled(ItemManager.equipped(event.getPlayer()));
60+
}
3461
}

src/plugin.yml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
name: BendingItems
22
author: Simplicitee
33
api-version: 1.16
4-
version: 1.2.0
4+
version: 1.3.0
55
main: me.simplicitee.project.items.ItemsPlugin
6-
depend: [ProjectKorra]
6+
depend: [ProjectKorra]
7+
permissions:
8+
bending.items:
9+
default: op
10+
children:
11+
bending.command.item.give: true
12+
bending.command.item.gui: true
13+
bending.command.item.equip: true

0 commit comments

Comments
 (0)