@@ -76,48 +76,66 @@ public void on(PlayerQuitEvent e) {
76
76
totalMap .remove (p );
77
77
}
78
78
79
- @ EventHandler (priority = EventPriority .HIGHEST )
79
+ @ EventHandler (priority = EventPriority .HIGHEST , ignoreCancelled = true )
80
80
public void on (BlockPlaceEvent e ) {
81
- if (e .isCancelled ()) {
82
- return ;
83
- }
84
81
Player p = e .getPlayer ();
85
82
SoundPlayer sp = SoundPlayer .of (p );
83
+ if (!hasAdaptation (p ) || !p .isSneaking ())
84
+ return ;
86
85
87
- if (hasAdaptation (p ) && !totalMap .isEmpty () && totalMap .get (p ) != null && totalMap .get (p ).size () > 0 ) {
88
- ItemStack is = p .getInventory ().getItemInMainHand ().clone ();
89
- ItemStack hand = p .getInventory ().getItemInMainHand ();
90
- if (p .isSneaking () && is .getType ().isBlock ()) {
91
- double v = getValue (e .getBlock ());
92
- int handSizeAfter = is .getAmount () - totalMap .get (p ).size ();
93
- if (handSizeAfter >= 0 ) {
94
- for (Block b : totalMap .get (p ).keySet ()) { // Block Placer
95
- if (!canBlockPlace (p , b .getLocation ())) {
96
- Adapt .verbose ("Player " + p .getName () + " doesn't have permission." );
97
- continue ;
98
- }
99
- BlockFace face = totalMap .get (p ).get (b );
100
- if (b .getWorld ().getBlockAt (b .getRelative (face ).getLocation ()).getType () == Material .AIR ) {
101
- if (b .getRelative (face ).getLocation () != e .getBlock ().getLocation ()) {
102
- b .getWorld ().setBlockData (b .getRelative (face ).getLocation (), b .getBlockData ());
103
- getPlayer (p ).getData ().addStat ("blocks.placed" , 1 );
104
- getPlayer (p ).getData ().addStat ("blocks.placed.value" , v );
105
- sp .play (b .getLocation (), Sound .BLOCK_AZALEA_BREAK , 0.4f , 0.25f );
106
- xp (p , 2 );
107
- }
108
- }
109
- is .setAmount (is .getAmount () - 1 );
110
- hand .setAmount (is .getAmount ());
111
- }
112
- totalMap .remove (p );
113
- if (hand .getAmount () > 0 ) {
114
- runPlayerViewport (getBlockFace (p ), p .getTargetBlock (null , 5 ), p .getInventory ().getItemInMainHand ().getType (), p );
115
- }
116
- e .setCancelled (true );
117
- } else {
118
- Adapt .messagePlayer (p , C .RED + Localizer .dLocalize ("architect" , "placement" , "lore1" ) + " " + C .GREEN + totalMap .get (p ).size () + C .RED + " " + Localizer .dLocalize ("architect" , "placement" , "lore2" ));
119
- }
86
+ var blocks = totalMap .get (p );
87
+ if (blocks == null || blocks .isEmpty ())
88
+ return ;
89
+
90
+ ItemStack hand = e .getItemInHand ();
91
+ if (!hand .getType ().isBlock () || blocks .keySet ().getFirst ().getType () != hand .getType ())
92
+ return ;
93
+
94
+ double v = getValue (e .getBlock ());
95
+ Block ignored = blocks .keySet ()
96
+ .stream ()
97
+ .filter (b -> b .getRelative (blocks .get (b )).equals (e .getBlock ()))
98
+ .findFirst ()
99
+ .orElse (null );
100
+
101
+ if (hand .getAmount () < blocks .size ()) {
102
+ Adapt .messagePlayer (p , C .RED + Localizer .dLocalize ("architect" , "placement" , "lore1" ) + " " + C .GREEN + blocks .size () + C .RED + " " + Localizer .dLocalize ("architect" , "placement" , "lore2" ));
103
+ return ;
104
+ }
105
+
106
+ blocks .remove (ignored );
107
+ for (Block b : blocks .keySet ()) { // Block Placer
108
+ Block relative = b .getRelative (blocks .get (b ));
109
+ if (!relative .getType ().isAir ())
110
+ continue ;
111
+
112
+ if (!canBlockPlace (p , relative .getLocation ())) {
113
+ Adapt .verbose ("Player " + p .getName () + " doesn't have permission." );
114
+ continue ;
120
115
}
116
+
117
+ relative .setBlockData (b .getBlockData ());
118
+ getPlayer (p ).getData ().addStat ("blocks.placed" , 1 );
119
+ getPlayer (p ).getData ().addStat ("blocks.placed.value" , v );
120
+ sp .play (b .getLocation (), Sound .BLOCK_AZALEA_BREAK , 0.4f , 0.25f );
121
+ xp (p , 2 );
122
+
123
+ hand .setAmount (hand .getAmount () - 1 );
124
+ }
125
+
126
+ if (ignored != null ) {
127
+ e .getBlock ().setBlockData (ignored .getBlockData ());
128
+ getPlayer (p ).getData ().addStat ("blocks.placed" , 1 );
129
+ getPlayer (p ).getData ().addStat ("blocks.placed.value" , v );
130
+ sp .play (ignored .getLocation (), Sound .BLOCK_AZALEA_BREAK , 0.4f , 0.25f );
131
+ xp (p , 2 );
132
+
133
+ hand .setAmount (hand .getAmount () - 1 );
134
+ } else e .setCancelled (true );
135
+
136
+ totalMap .remove (p );
137
+ if (hand .getAmount () > 0 ) {
138
+ runPlayerViewport (getBlockFace (p ), p .getTargetBlock (null , 5 ), p .getInventory ().getItemInMainHand ().getType (), p );
121
139
}
122
140
}
123
141
0 commit comments