4
4
import dev .aurelium .auraskills .api .skill .Skill ;
5
5
import dev .aurelium .auraskills .bukkit .AuraSkills ;
6
6
import dev .aurelium .auraskills .bukkit .item .SkillsItem ;
7
+ import dev .aurelium .auraskills .bukkit .requirement .blocks .BlockRequirement ;
8
+ import dev .aurelium .auraskills .bukkit .requirement .blocks .RequirementNode ;
7
9
import dev .aurelium .auraskills .bukkit .util .armor .ArmorEquipEvent ;
8
10
import dev .aurelium .auraskills .common .config .Option ;
11
+ import dev .aurelium .auraskills .common .hooks .PlaceholderHook ;
9
12
import dev .aurelium .auraskills .common .message .MessageKey ;
10
13
import dev .aurelium .auraskills .common .message .type .CommandMessage ;
14
+ import dev .aurelium .auraskills .common .user .User ;
11
15
import dev .aurelium .auraskills .common .util .math .RomanNumber ;
12
16
import dev .aurelium .auraskills .common .util .text .TextUtil ;
17
+ import dev .aurelium .slate .text .TextFormatter ;
13
18
import org .bukkit .Material ;
14
19
import org .bukkit .entity .Player ;
15
20
import org .bukkit .event .*;
16
21
import org .bukkit .event .block .BlockBreakEvent ;
17
22
import org .bukkit .event .block .BlockPlaceEvent ;
18
23
import org .bukkit .event .entity .EntityDamageByEntityEvent ;
19
24
import org .bukkit .event .entity .EntityShootBowEvent ;
25
+ import org .bukkit .event .player .PlayerHarvestBlockEvent ;
20
26
import org .bukkit .event .player .PlayerInteractEvent ;
21
27
import org .bukkit .inventory .ItemStack ;
22
28
@@ -96,6 +102,9 @@ public void onBlockBreak(BlockBreakEvent event) {
96
102
if (item .getType () == Material .AIR ) return ;
97
103
checkItemRequirements (player , item , event );
98
104
}
105
+
106
+ if (plugin .configBoolean (Option .REQUIREMENT_BLOCKS_ENABLED )) return ;
107
+ checkBlockRequirements (event .getPlayer (), event .getBlock ().getType (), event );
99
108
}
100
109
101
110
@ EventHandler (priority = EventPriority .HIGH )
@@ -107,8 +116,19 @@ public void onPlace(BlockPlaceEvent event) {
107
116
if (item .getType () == Material .AIR ) return ;
108
117
checkItemRequirements (player , item , event );
109
118
}
119
+
120
+ if (plugin .configBoolean (Option .REQUIREMENT_BLOCKS_ENABLED )) return ;
121
+ checkBlockRequirements (event .getPlayer (), event .getBlock ().getType (), event );
110
122
}
111
123
124
+ @ EventHandler (priority = EventPriority .HIGH )
125
+ public void onHarvest (PlayerHarvestBlockEvent event ) {
126
+ if (event .isCancelled ()) return ;
127
+ if (plugin .configBoolean (Option .REQUIREMENT_BLOCKS_ENABLED )) return ;
128
+ checkBlockRequirements (event .getPlayer (), event .getHarvestedBlock ().getType (), event );
129
+ }
130
+
131
+
112
132
@ EventHandler (priority = EventPriority .HIGH )
113
133
public void onAttack (EntityDamageByEntityEvent event ) {
114
134
if (event .isCancelled ()) return ;
@@ -163,4 +183,40 @@ private void checkItemRequirements(Player player, ItemStack item, Cancellable ev
163
183
}
164
184
}
165
185
186
+ private void checkBlockRequirements (Player player , Material material , Cancellable event ) {
187
+ BlockRequirement blockRequirement = null ;
188
+
189
+ for (BlockRequirement block : manager .getBlocks ()) {
190
+ if (block .getMaterial () == material ) {
191
+ blockRequirement = block ;
192
+ break ;
193
+ }
194
+ }
195
+
196
+ if (blockRequirement != null ) {
197
+ if (event instanceof BlockBreakEvent ) {
198
+ if (!blockRequirement .checksBreaking ()) return ;
199
+ } else if (event instanceof BlockPlaceEvent ) {
200
+ if (!blockRequirement .checksPlacing ()) return ;
201
+ }
202
+
203
+ for (RequirementNode node : blockRequirement .getNodes ()) {
204
+ if (!node .check (player )) {
205
+ event .setCancelled (true );
206
+ String message = node .getDenyMessage ();
207
+ if (!message .isEmpty ()) {
208
+ TextFormatter formatter = new TextFormatter ();
209
+ User user = plugin .getUser (player );
210
+
211
+ if (plugin .getHookManager ().isRegistered (PlaceholderHook .class )) {
212
+ message = plugin .getHookManager ().getHook (PlaceholderHook .class ).setPlaceholders (user , message );
213
+ }
214
+
215
+ user .sendMessage (formatter .toComponent (message ));
216
+ }
217
+ break ;
218
+ }
219
+ }
220
+ }
221
+ }
166
222
}
0 commit comments