10
10
import com .rs2 .game .content .skills .SkillHandler ;
11
11
import com .rs2 .game .items .DeprecatedItems ;
12
12
import com .rs2 .game .objects .Object ;
13
+ import com .rs2 .game .objects .Objects ;
13
14
import com .rs2 .game .players .Player ;
14
15
import com .rs2 .game .players .PlayerHandler ;
15
16
import com .rs2 .util .Misc ;
17
+ import com .rs2 .world .clip .Region ;
16
18
17
19
public class Woodcutting {
18
20
@@ -227,6 +229,41 @@ public static boolean hasAxe(Player player) {
227
229
return false ;
228
230
}
229
231
232
+ private static boolean canReachTree (Player p , int treeX , int treeY , int id ) {
233
+ int pointerOffsetX = p .getMapRegionX ();
234
+ int pointerOffsetY = p .getMapRegionY ();
235
+
236
+ int treeRelX = treeX - (pointerOffsetX << 3 );
237
+ int treeRelY = treeY - (pointerOffsetY << 3 );
238
+ int playerOffsetX = p .getX () - (pointerOffsetX << 3 );
239
+ int playerOffsetY = p .getY () - (pointerOffsetY << 3 );
240
+
241
+ Region region = Region .getRegion (p .getX (), p .getY ());
242
+ int clipping = region .getClipping (p .getX (), p .getY (), p .heightLevel );
243
+
244
+ Objects tree = region .GetObjectAt (treeX , treeY , id );
245
+
246
+ int treeclipping = region .getClipping (treeX , treeY , p .heightLevel );
247
+
248
+ boolean reached = Region .reachedObject (playerOffsetX ,
249
+ playerOffsetY ,
250
+ treeRelX ,
251
+ treeRelY ,
252
+ tree .getObjectSize ()[0 ],
253
+ tree .getObjectSize ()[1 ],
254
+ treeclipping ,
255
+ clipping );
256
+
257
+ p .getPacketSender ().sendMessage ("Clipping: " + clipping );
258
+ p .getPacketSender ().sendMessage ("Reached: " + reached );
259
+
260
+ if (!reached ) {
261
+ p .getPacketSender ().sendMessage ("Can't reach the tree from here." );
262
+ }
263
+
264
+ return reached ;
265
+ }
266
+
230
267
public static void startWoodcutting (final Player p , final int objectId , final int x , final int y , final int type ) {
231
268
CycleEventHandler .getSingleton ().stopEvents (p , "WoodcuttingEvent" .hashCode ());
232
269
if (p .isWoodcutting || p .isFletching || p .isFiremaking || p .playerIsFletching ) {
@@ -244,6 +281,9 @@ public static void startWoodcutting(final Player p, final int objectId, final in
244
281
p .woodcuttingAxe = -1 ;
245
282
treeData tree = treeData .getTree (objectId );
246
283
p .turnPlayerTo (x , y );
284
+
285
+ if (!canReachTree (p , x , y , objectId )) return ;
286
+
247
287
if (tree .getLevelReq () > wcLevel ) {
248
288
p .getPacketSender ().sendMessage ("You need a Woodcutting level of " + tree .getLevelReq () + " to cut this tree." );
249
289
return ;
0 commit comments