|
3 | 3 | import de.lars.apimanager.apis.chunkAPI.ChunkAPI; |
4 | 4 | import de.lars.apimanager.apis.languageAPI.LanguageAPI; |
5 | 5 | import de.lars.apimanager.apis.rankAPI.RankAPI; |
6 | | -import de.lars.utilsmanager.UtilsManager; |
7 | | -import de.lars.utilsmanager.util.Statements; |
| 6 | +import de.lars.utilsmanager.utils.Statements; |
8 | 7 | import net.kyori.adventure.text.Component; |
9 | 8 | import net.kyori.adventure.text.format.NamedTextColor; |
10 | 9 | import org.bukkit.*; |
11 | 10 | import org.bukkit.block.Block; |
| 11 | +import org.bukkit.block.data.BlockData; |
| 12 | +import org.bukkit.block.data.Openable; |
| 13 | +import org.bukkit.block.data.type.Bed; |
| 14 | +import org.bukkit.block.data.type.Switch; |
12 | 15 | import org.bukkit.entity.*; |
13 | 16 | import org.bukkit.event.EventHandler; |
14 | 17 | import org.bukkit.event.Listener; |
|
19 | 22 | import org.bukkit.event.entity.*; |
20 | 23 | import org.bukkit.event.player.PlayerInteractEvent; |
21 | 24 |
|
22 | | -import java.util.Iterator; |
23 | | -import java.util.List; |
24 | | -import java.util.Objects; |
25 | | -import java.util.UUID; |
26 | | -import java.util.concurrent.atomic.AtomicBoolean; |
| 25 | +import java.util.*; |
27 | 26 |
|
28 | 27 | public class ChunkOwnerListener implements Listener { |
29 | 28 |
|
| 29 | + private static final Set<Material> SAFE_INTERACTABLES = EnumSet.of( |
| 30 | + Material.OAK_DOOR, Material.SPRUCE_DOOR, Material.BIRCH_DOOR, Material.JUNGLE_DOOR, |
| 31 | + Material.ACACIA_DOOR, Material.DARK_OAK_DOOR, Material.CRIMSON_DOOR, Material.WARPED_DOOR, |
| 32 | + Material.IRON_DOOR, |
| 33 | + Material.OAK_TRAPDOOR, Material.SPRUCE_TRAPDOOR, Material.BIRCH_TRAPDOOR, |
| 34 | + Material.JUNGLE_TRAPDOOR, Material.ACACIA_TRAPDOOR, Material.DARK_OAK_TRAPDOOR, |
| 35 | + Material.CRIMSON_TRAPDOOR, Material.WARPED_TRAPDOOR, Material.IRON_TRAPDOOR, |
| 36 | + Material.OAK_FENCE_GATE, Material.SPRUCE_FENCE_GATE, Material.BIRCH_FENCE_GATE, |
| 37 | + Material.JUNGLE_FENCE_GATE, Material.ACACIA_FENCE_GATE, Material.DARK_OAK_FENCE_GATE, |
| 38 | + Material.CRIMSON_FENCE_GATE, Material.WARPED_FENCE_GATE, |
| 39 | + |
| 40 | + Material.LEVER, |
| 41 | + Material.STONE_BUTTON, Material.OAK_BUTTON, Material.SPRUCE_BUTTON, Material.BIRCH_BUTTON, |
| 42 | + Material.JUNGLE_BUTTON, Material.ACACIA_BUTTON, Material.DARK_OAK_BUTTON, |
| 43 | + Material.CRIMSON_BUTTON, Material.WARPED_BUTTON, |
| 44 | + |
| 45 | + Material.BELL, Material.CAULDRON, Material.WATER_CAULDRON, |
| 46 | + Material.LAVA_CAULDRON, Material.POWDER_SNOW_CAULDRON |
| 47 | + ); |
| 48 | + |
| 49 | + private static final Set<Material> ITEM_STORAGE_BLOCKS = EnumSet.of( |
| 50 | + Material.CHEST, Material.TRAPPED_CHEST, Material.BARREL, |
| 51 | + Material.SHULKER_BOX, Material.WHITE_SHULKER_BOX, Material.ORANGE_SHULKER_BOX, |
| 52 | + Material.MAGENTA_SHULKER_BOX, Material.LIGHT_BLUE_SHULKER_BOX, Material.YELLOW_SHULKER_BOX, |
| 53 | + Material.LIME_SHULKER_BOX, Material.PINK_SHULKER_BOX, Material.GRAY_SHULKER_BOX, |
| 54 | + Material.LIGHT_GRAY_SHULKER_BOX, Material.CYAN_SHULKER_BOX, Material.PURPLE_SHULKER_BOX, |
| 55 | + Material.BLUE_SHULKER_BOX, Material.BROWN_SHULKER_BOX, Material.GREEN_SHULKER_BOX, |
| 56 | + Material.RED_SHULKER_BOX, Material.BLACK_SHULKER_BOX, |
| 57 | + Material.HOPPER, Material.DROPPER, Material.DISPENSER, |
| 58 | + Material.BLAST_FURNACE, Material.FURNACE, Material.SMOKER, |
| 59 | + Material.BREWING_STAND, Material.LECTERN, Material.COMPOSTER |
| 60 | + ); |
| 61 | + |
30 | 62 | @EventHandler |
31 | 63 | public void onBlockBreak(BlockBreakEvent event) { |
32 | 64 | Chunk chunk = event.getBlock().getChunk(); |
@@ -87,83 +119,73 @@ public void onBlockPlace(BlockPlaceEvent event) { |
87 | 119 |
|
88 | 120 | @EventHandler |
89 | 121 | public void onPlayerInteract(PlayerInteractEvent event) { |
90 | | - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; |
91 | | - if (event.getClickedBlock() == null) return; |
92 | | - |
93 | 122 | Player player = event.getPlayer(); |
94 | | - Block clicked = event.getClickedBlock(); |
95 | | - |
96 | | - if (!isContainer(clicked)) return; |
97 | 123 |
|
98 | | - if (player.hasPermission("plugin.maintenance")) return; |
99 | | - |
100 | | - Chunk chunk = clicked.getChunk(); |
101 | | - UUID owner = ChunkAPI.getApi().getChunkOwner(chunk); |
102 | | - if (owner == null) return; |
| 124 | + if (event.getClickedBlock() == null) { |
| 125 | + return; |
| 126 | + } |
| 127 | + if (RankAPI.getApi().getRankId(player) >= 9) { |
| 128 | + return; |
| 129 | + } |
103 | 130 |
|
104 | | - String uuidStr = player.getUniqueId().toString(); |
105 | | - List<String> friends = ChunkAPI.getApi().getFriends(chunk); |
| 131 | + Block block = event.getClickedBlock(); |
| 132 | + Chunk chunk = block.getChunk(); |
106 | 133 |
|
107 | | - if (friends.contains(uuidStr) || friends.contains("*")) return; |
108 | | - if (owner.toString().equals(uuidStr)) return; |
| 134 | + if (ChunkAPI.getApi().getChunkOwner(chunk) == null) { |
| 135 | + return; |
| 136 | + } |
109 | 137 |
|
110 | | - event.setCancelled(true); |
111 | | - OfflinePlayer offOwner = Bukkit.getOfflinePlayer(owner); |
112 | | - if (LanguageAPI.getApi().getLanguage(player) == 2) { |
113 | | - player.sendMessage(Statements.getPrefix() |
114 | | - .append(Component.text("Der Chunk gehört nicht dir und du bist auch kein Freund oder Vertrauter! Besitzer: ", NamedTextColor.RED)) |
115 | | - .append(Component.text(offOwner.getName() + "!", NamedTextColor.DARK_PURPLE)) |
116 | | - .append(Component.text("(" + chunk + ")", NamedTextColor.YELLOW))); |
117 | | - } else { |
118 | | - player.sendMessage(Statements.getPrefix() |
119 | | - .append(Component.text("This chunk isn´t yours and you aren´t a friend or trusted! Owner: ", NamedTextColor.RED)) |
120 | | - .append(Component.text(offOwner.getName() + "!", NamedTextColor.DARK_PURPLE)) |
121 | | - .append(Component.text("(" + chunk + ")", NamedTextColor.YELLOW))); |
| 138 | + if (ChunkAPI.getApi().getFriends(chunk).contains(player.getUniqueId().toString()) || ChunkAPI.getApi().getFriends(chunk).contains("*")) { |
| 139 | + return; |
122 | 140 | } |
123 | | - } |
124 | 141 |
|
125 | | - @EventHandler |
126 | | - public void onEntityExplode(EntityExplodeEvent event) { |
127 | | - Entity entity = event.getEntity(); |
128 | | - List<org.bukkit.block.Block> blocks = event.blockList(); |
| 142 | + if (Objects.equals(ChunkAPI.getApi().getChunkOwner(chunk).toString(), player.getUniqueId().toString())) { |
| 143 | + return; |
| 144 | + } |
129 | 145 |
|
130 | | - Iterator<Block> iterator = blocks.iterator(); |
131 | | - while (iterator.hasNext()) { |
132 | | - org.bukkit.block.Block block = iterator.next(); |
133 | | - Chunk chunk = block.getChunk(); |
134 | | - UUID owner = ChunkAPI.getApi().getChunkOwner(chunk); |
| 146 | + Material type = block.getType(); |
135 | 147 |
|
136 | | - if (owner != null) { |
137 | | - iterator.remove(); |
| 148 | + if (ITEM_STORAGE_BLOCKS.contains(type)) { |
| 149 | + OfflinePlayer owner = Bukkit.getOfflinePlayer(ChunkAPI.getApi().getChunkOwner(chunk)); |
| 150 | + if (LanguageAPI.getApi().getLanguage(player) == 2) { |
| 151 | + player.sendMessage(Statements.getPrefix().append(Component.text("Der Chunk gehört nicht dir und du bist auch kein Freund oder Vertrauter! Besitzer: ", NamedTextColor.RED)) |
| 152 | + .append(Component.text(owner.getName() + "!", NamedTextColor.DARK_PURPLE)) |
| 153 | + .append(Component.text("(" + chunk + ")", NamedTextColor.YELLOW))); |
| 154 | + } else { |
| 155 | + player.sendMessage(Statements.getPrefix().append(Component.text("This chunk isn´t yours and you aren´t a friend or trusted! Owner: ", NamedTextColor.RED)) |
| 156 | + .append(Component.text(owner.getName() + "!", NamedTextColor.DARK_PURPLE)) |
| 157 | + .append(Component.text("(" + chunk + ")", NamedTextColor.YELLOW))); |
138 | 158 | } |
| 159 | + event.setCancelled(true); |
| 160 | + return; |
139 | 161 | } |
140 | | - } |
141 | | - |
142 | | - @EventHandler |
143 | | - public void onBlockExplode(BlockExplodeEvent event) { |
144 | | - List<org.bukkit.block.Block> blocks = event.blockList(); |
145 | 162 |
|
146 | | - Iterator<org.bukkit.block.Block> iterator = blocks.iterator(); |
147 | | - while (iterator.hasNext()) { |
148 | | - org.bukkit.block.Block block = iterator.next(); |
149 | | - Chunk chunk = block.getChunk(); |
150 | | - UUID owner = ChunkAPI.getApi().getChunkOwner(chunk); |
| 163 | + if (isSafeBlock(block)) { |
| 164 | + return; |
| 165 | + } |
151 | 166 |
|
152 | | - if (owner != null) { |
153 | | - iterator.remove(); |
154 | | - } |
| 167 | + OfflinePlayer owner = Bukkit.getOfflinePlayer(ChunkAPI.getApi().getChunkOwner(chunk)); |
| 168 | + if (LanguageAPI.getApi().getLanguage(player) == 2) { |
| 169 | + player.sendMessage(Statements.getPrefix().append(Component.text("Der Chunk gehört nicht dir und du bist auch kein Freund oder Vertrauter! Besitzer: ", NamedTextColor.RED)) |
| 170 | + .append(Component.text(owner.getName() + "!", NamedTextColor.DARK_PURPLE)) |
| 171 | + .append(Component.text("(" + chunk + ")", NamedTextColor.YELLOW))); |
| 172 | + } else { |
| 173 | + player.sendMessage(Statements.getPrefix().append(Component.text("This chunk isn´t yours and you aren´t a friend or trusted! Owner: ", NamedTextColor.RED)) |
| 174 | + .append(Component.text(owner.getName() + "!", NamedTextColor.DARK_PURPLE)) |
| 175 | + .append(Component.text("(" + chunk + ")", NamedTextColor.YELLOW))); |
155 | 176 | } |
| 177 | + event.setCancelled(true); |
156 | 178 | } |
157 | 179 |
|
158 | | - public static boolean isContainer(Block block) { |
159 | | - if (block == null) return false; |
160 | | - Material m = block.getType(); |
161 | | - return m == Material.CHEST |
162 | | - || m == Material.TRAPPED_CHEST |
163 | | - || m == Material.BARREL |
164 | | - || m == Material.SHULKER_BOX |
165 | | - || m == Material.WHITE_SHULKER_BOX |
166 | | - || m == Material.LECTERN; |
| 180 | + private boolean isSafeBlock(Block block) { |
| 181 | + Material mat = block.getType(); |
| 182 | + BlockData data = block.getBlockData(); |
| 183 | + |
| 184 | + if (SAFE_INTERACTABLES.contains(mat)) return true; |
| 185 | + if (data instanceof Openable) return true; |
| 186 | + if (data instanceof Switch) return true; |
| 187 | + if (data instanceof Bed) return true; |
| 188 | + return false; |
167 | 189 | } |
168 | 190 |
|
169 | 191 | /*@EventHandler |
|
0 commit comments