44import com .github .retrooper .packetevents .manager .server .ServerVersion ;
55import me .xginko .aef .modules .AEFModule ;
66import me .xginko .aef .utils .enums .Platform ;
7+ import org .bukkit .Material ;
78import org .bukkit .event .EventHandler ;
89import org .bukkit .event .EventPriority ;
910import org .bukkit .event .HandlerList ;
1011import org .bukkit .event .Listener ;
1112import org .bukkit .event .inventory .InventoryClickEvent ;
1213
14+ import java .util .EnumSet ;
15+ import java .util .Objects ;
16+ import java .util .Set ;
17+ import java .util .stream .Collectors ;
18+ import java .util .stream .Stream ;
19+
1320public class TridentDupe extends AEFModule implements Listener {
1421
22+ private final Set <Material > dupePreventedMaterial ;
23+
1524 public TridentDupe () {
1625 super ("dupe-preventions.trident-dupe" ,
1726 Platform .getServerVersion ().isOlderThanOrEquals (ServerVersion .V_1_21_4 )
1827 && Platform .getServerVersion ().isNewerThan (ServerVersion .V_1_12_2 ),
1928 "Prevents trident dupe from working in 1.13 - 1.21.4\n " +
2029 "This dupe was originally found by Autism inc and turned into\n " +
2130 "a mod by Killet, Laztec, and Ionar." );
31+ this .dupePreventedMaterial = config .getList (configPath + ".materials" ,
32+ Stream .of (XMaterial .TRIDENT , XMaterial .ARROW , XMaterial .TIPPED_ARROW ,
33+ XMaterial .SPECTRAL_ARROW , XMaterial .EGG , XMaterial .WIND_CHARGE )
34+ .filter (XMaterial ::isSupported ).map (XMaterial ::get ).map (Enum ::name ).collect (Collectors .toList ()))
35+ .stream ()
36+ .map (configuredMaterial -> {
37+ try {
38+ return Material .valueOf (configuredMaterial );
39+ } catch (IllegalArgumentException e ) {
40+ notRecognized (Material .class , configuredMaterial );
41+ return null ;
42+ }
43+ })
44+ .filter (Objects ::nonNull )
45+ .collect (Collectors .toCollection (() -> EnumSet .noneOf (Material .class )));
2246 }
2347
2448 @ Override
@@ -34,7 +58,7 @@ public void disable() {
3458 @ EventHandler (priority = EventPriority .HIGHEST , ignoreCancelled = true )
3559 private void onInventoryClick (InventoryClickEvent event ) {
3660 if (event .getWhoClicked ().getActiveItem () != null
37- && event .getWhoClicked ().getActiveItem ().getType () != XMaterial . AIR . get ( )) {
61+ && dupePreventedMaterial . contains ( event .getWhoClicked ().getActiveItem ().getType ())) {
3862 event .setCancelled (true );
3963 }
4064 }
0 commit comments