A claim plugin based on FTB Chunks
1package dev.keii.keiichunks.events;
2
3import dev.keii.keiichunks.PlayerChunk;
4import dev.keii.keiichunks.saveload.User;
5import dev.keii.keiichunks.inventories.InventoryChunkPermission;
6import dev.keii.keiichunks.inventories.InventoryMap;
7import dev.keii.keiichunks.inventories.InventoryModifyChunk;
8import dev.keii.keiichunks.inventories.InventoryModifyChunkPermission;
9import net.kyori.adventure.text.Component;
10import net.kyori.adventure.text.format.NamedTextColor;
11import org.bukkit.Bukkit;
12import org.bukkit.Chunk;
13import org.bukkit.entity.Player;
14import org.bukkit.event.EventHandler;
15import org.bukkit.event.Listener;
16import org.bukkit.event.inventory.InventoryClickEvent;
17import org.bukkit.inventory.Inventory;
18import org.joml.Vector2i;
19
20import java.util.HashMap;
21import java.util.List;
22import java.util.Map;
23import java.util.Objects;
24
25public class InventoryClick implements Listener {
26 public static Map<String, Vector2i> modifyChunk = new HashMap<>();
27 public static Map<String, Integer> modifyChunkPermissionUser = new HashMap<>();
28
29 @EventHandler
30 public void onInventoryClick(InventoryClickEvent event)
31 {
32 Inventory inventory = event.getInventory();
33
34 if(inventory.getHolder() instanceof InventoryMap) {
35 event.setCancelled(true);
36 Player player = (Player)event.getWhoClicked();
37
38 if(event.getCurrentItem() == null)
39 {
40 return;
41 }
42
43 List<String> lore = Objects.requireNonNull(event.getCurrentItem()).getLore();
44
45 Integer chunkX = null;
46 Integer chunkZ = null;
47
48 for(String line : Objects.requireNonNull(lore))
49 {
50 if(line.startsWith("ChunkX")) {
51 String[] split = line.split(",");
52 chunkX = Integer.parseInt(split[0].substring(8));
53 chunkZ = Integer.parseInt(split[1].substring(9));
54 }
55 }
56
57 if(chunkX != null)
58 {
59 String owner = PlayerChunk.getChunkOwnerUUID(event.getWhoClicked().getWorld().getChunkAt(chunkX, chunkZ));
60 if(owner != null) {
61 if(owner.equals(player.getUniqueId().toString())) {
62 player.closeInventory();
63 InventoryModifyChunk mc = new InventoryModifyChunk();
64 InventoryClick.modifyChunk.remove(player.getUniqueId().toString());
65 InventoryClick.modifyChunk.put(player.getUniqueId().toString(), new Vector2i(chunkX, chunkZ));
66 player.openInventory(mc.getInventory());
67 }
68 return;
69 }
70
71 if(PlayerChunk.claimChunk(player, event.getWhoClicked().getWorld().getChunkAt(chunkX, chunkZ))) {
72 PlayerChunk.addChunkPermissionsForUser(player, null, event.getWhoClicked().getWorld().getChunkAt(chunkX, chunkZ));
73 player.sendMessage(Component.text("Claimed Chunk").color(NamedTextColor.YELLOW));
74 } else {
75 player.sendMessage(Component.text("Failed to claim chunk").color(NamedTextColor.RED));
76 }
77
78 player.closeInventory();
79 InventoryMap map = new InventoryMap(player);
80 player.openInventory(map.getInventory());
81 }
82 } else if(inventory.getHolder() instanceof InventoryModifyChunk) {
83 event.setCancelled(true);
84
85 int slot = event.getSlot();
86 if(slot > 17)
87 {
88 slot -= 9;
89 }
90 if(slot > 8)
91 {
92 slot -= 9;
93 }
94
95 Player player = (Player) event.getWhoClicked();
96
97 Chunk chunk = event.getWhoClicked().getWorld().getChunkAt(modifyChunk.get(player.getUniqueId().toString()).x, modifyChunk.get(player.getUniqueId().toString()).y);
98
99 if(slot > 5)
100 {
101 if(PlayerChunk.unClaimChunk(player, chunk)) {
102 player.sendMessage(Component.text("Unclaimed chunk").color(NamedTextColor.YELLOW));
103 player.closeInventory();
104
105 InventoryMap map = new InventoryMap(player);
106 player.openInventory(map.getInventory());
107 } else {
108 player.sendMessage(Component.text("Failed to unclaim chunk").color(NamedTextColor.RED));
109 }
110 } else if(slot > 2)
111 {
112 if(!PlayerChunk.toggleExplosionPolicy(player, chunk))
113 {
114 player.sendMessage(Component.text("Failed to toggle explosions for chunk").color(NamedTextColor.RED));
115 return;
116 }
117
118 if(PlayerChunk.getExplosionPolicy(chunk))
119 {
120 player.sendMessage(Component.text("Enabled explosions in chunk").color(NamedTextColor.YELLOW));
121 } else
122 {
123 player.sendMessage(Component.text("Disabled explosions in chunk").color(NamedTextColor.YELLOW));
124 }
125
126
127 } else {
128 player.closeInventory();
129 InventoryChunkPermission cp = new InventoryChunkPermission(chunk);
130 player.openInventory(cp.getInventory());
131 }
132
133 } else if(inventory.getHolder() instanceof InventoryChunkPermission)
134 {
135 event.setCancelled(true);
136
137 if(event.getCurrentItem() == null)
138 {
139 return;
140 }
141
142 Player player = (Player) event.getWhoClicked();
143 Chunk chunk = event.getWhoClicked().getWorld().getChunkAt(modifyChunk.get(player.getUniqueId().toString()).x, modifyChunk.get(player.getUniqueId().toString()).y);
144
145 if(event.getCurrentItem().displayName().toString().contains("Everyone")) {
146// player.sendMessage("Found");
147 modifyChunkPermissionUser.put(player.getUniqueId().toString(), null);
148
149 player.closeInventory();
150 InventoryModifyChunkPermission mcp = new InventoryModifyChunkPermission(null, chunk);
151 player.openInventory(mcp.getInventory());
152 } else if (!event.getCurrentItem().displayName().toString().contains("Add User")) {
153 String userid = null;
154 for(var i : Objects.requireNonNull(event.getCurrentItem().lore()))
155 {
156 if(i.toString().contains("User")) {
157 userid = i.toString().split("\"")[1].split(":")[1];
158 }
159 }
160 if(userid == null)
161 {
162 return;
163 }
164
165 modifyChunkPermissionUser.put(player.getUniqueId().toString(), Integer.parseInt(userid.trim()));
166
167 player.closeInventory();
168 InventoryModifyChunkPermission mcp = new InventoryModifyChunkPermission(User.getUUIDFromID(Integer.parseInt(userid.trim())), chunk);
169 player.openInventory(mcp.getInventory());
170 } else {
171 PlayerChat.chunkListener.put(player.getUniqueId().toString(), new ChunkPermissionAddPlayer(chunk));
172 player.sendMessage(Component.text("Type name of player you wish to add permissions for in chat!").color(NamedTextColor.YELLOW));
173 player.closeInventory();
174 }
175 } else if(inventory.getHolder() instanceof InventoryModifyChunkPermission)
176 {
177 event.setCancelled(true);
178
179 Player player = (Player) event.getWhoClicked();
180 Chunk chunk = event.getWhoClicked().getWorld().getChunkAt(modifyChunk.get(player.getUniqueId().toString()).x, modifyChunk.get(player.getUniqueId().toString()).y);
181
182 if(event.getCurrentItem() == null)
183 {
184 return;
185 }
186
187 String displayName = event.getCurrentItem().displayName().toString();
188
189 if(modifyChunkPermissionUser.get(player.getUniqueId().toString()) != null) {
190 if (displayName.contains("Interact")) {
191 PlayerChunk.setClaimPermission(player, chunk, User.getUUIDFromID(modifyChunkPermissionUser.get(player.getUniqueId().toString())), PlayerChunk.ChunkPermission.Interact, displayName.contains("Enable"));
192 } else if (displayName.contains("Block Break")) {
193 PlayerChunk.setClaimPermission(player, chunk, User.getUUIDFromID(modifyChunkPermissionUser.get(player.getUniqueId().toString())), PlayerChunk.ChunkPermission.BlockBreak, displayName.contains("Enable"));
194 } else if (displayName.contains("Block Place")) {
195 PlayerChunk.setClaimPermission(player, chunk, User.getUUIDFromID(modifyChunkPermissionUser.get(player.getUniqueId().toString())), PlayerChunk.ChunkPermission.BlockPlace, displayName.contains("Enable"));
196 } else if (displayName.contains("Bucket Empty")) {
197 PlayerChunk.setClaimPermission(player, chunk, User.getUUIDFromID(modifyChunkPermissionUser.get(player.getUniqueId().toString())), PlayerChunk.ChunkPermission.BucketEmpty, displayName.contains("Enable"));
198 } else if (displayName.contains("Bucket Fill")) {
199 PlayerChunk.setClaimPermission(player, chunk, User.getUUIDFromID(modifyChunkPermissionUser.get(player.getUniqueId().toString())), PlayerChunk.ChunkPermission.BucketFill, displayName.contains("Enable"));
200 }
201 } else {
202 if (displayName.contains("Interact")) {
203 PlayerChunk.setClaimPermission(player, chunk, null, PlayerChunk.ChunkPermission.Interact, displayName.contains("Enable"));
204 } else if (displayName.contains("Block Break")) {
205 PlayerChunk.setClaimPermission(player, chunk, null, PlayerChunk.ChunkPermission.BlockBreak, displayName.contains("Enable"));
206 } else if (displayName.contains("Block Place")) {
207 PlayerChunk.setClaimPermission(player, chunk, null, PlayerChunk.ChunkPermission.BlockPlace, displayName.contains("Enable"));
208 } else if (displayName.contains("Bucket Empty")) {
209 PlayerChunk.setClaimPermission(player, chunk, null, PlayerChunk.ChunkPermission.BucketEmpty, displayName.contains("Enable"));
210 } else if (displayName.contains("Bucket Fill")) {
211 PlayerChunk.setClaimPermission(player, chunk, null, PlayerChunk.ChunkPermission.BucketFill, displayName.contains("Enable"));
212 }
213 }
214
215 if(displayName.contains("Back"))
216 {
217 player.closeInventory();
218 InventoryChunkPermission cp = new InventoryChunkPermission(chunk);
219 player.openInventory(cp.getInventory());
220 return;
221 }
222
223 player.closeInventory();
224 if(modifyChunkPermissionUser.get(player.getUniqueId().toString()) != null) {
225 InventoryModifyChunkPermission mcp = new InventoryModifyChunkPermission(User.getUUIDFromID(modifyChunkPermissionUser.get(player.getUniqueId().toString())), chunk);
226 player.openInventory(mcp.getInventory());
227 } else {
228 InventoryModifyChunkPermission mcp = new InventoryModifyChunkPermission(null, chunk);
229 player.openInventory(mcp.getInventory());
230 }
231 }
232 }
233}