· 6 years ago · Jul 25, 2019, 03:48 PM
1import com.mojang.authlib.GameProfile;
2import com.mojang.authlib.properties.Property;
3import io.netty.channel.ChannelHandlerContext;
4import io.netty.channel.local.LocalAddress;
5import io.netty.util.concurrent.Future;
6import io.netty.util.concurrent.GenericFutureListener;
7import net.menoni.rd.RuntimeDebugger;
8import net.menoni.rd.model.Debugger;
9import net.minecraft.server.v1_14_R1.*;
10import org.bukkit.Bukkit;
11import org.bukkit.Location;
12import org.bukkit.command.CommandSender;
13import org.bukkit.craftbukkit.v1_14_R1.CraftServer;
14import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
15import org.bukkit.entity.Player;
16import org.bukkit.event.EventHandler;
17import org.bukkit.event.Listener;
18import org.bukkit.event.player.PlayerJoinEvent;
19import org.bukkit.event.player.PlayerTeleportEvent;
20
21import javax.crypto.SecretKey;
22import java.net.SocketAddress;
23import java.util.List;
24import java.util.Set;
25import java.util.UUID;
26
27public class FakePlayerTest implements Debugger, Debugger.Stoppable, Listener {
28
29 private static GameProfile GAME_PROFILE;
30 private static FakePlayer FAKE_PLAYER;
31 private static CraftPlayer FAKE_CRAFTPLAYER;
32 private static RuntimeDebugger plugin;
33
34 @Override
35 public void debug(RuntimeDebugger plugin, CommandSender cs) {
36 FakePlayerTest.plugin = plugin;
37 if (!(cs instanceof Player)) {
38 cs.sendMessage("Be a player");
39 return;
40 }
41 Player p = (Player) cs;
42 try {
43 initUser();
44 FakePlayer.server().getPlayerList().a(FAKE_PLAYER.getNetworkManager(), FAKE_PLAYER);
45 FAKE_CRAFTPLAYER = FAKE_PLAYER.getBukkitEntity();
46 Bukkit.getScheduler().runTaskLater(plugin, () -> {
47 runScript(p);
48 try {
49 runHideScript();
50 } catch (Exception e) {
51 e.printStackTrace();
52 }
53 }, 10L);
54 } catch (Exception e) {
55 e.printStackTrace();
56 stop();
57 }
58 }
59
60 @EventHandler
61 public void onPlayerJoin(PlayerJoinEvent event) {
62 if (event.getPlayer().getUniqueId().equals(GAME_PROFILE.getId())) {
63 event.setJoinMessage(null);
64 }
65 }
66
67 private void runHideScript() throws Exception {
68 // hide for online players
69 for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
70 if (onlinePlayer != FAKE_CRAFTPLAYER) {
71 onlinePlayer.hidePlayer(plugin, FAKE_CRAFTPLAYER);
72 }
73 }
74 // hide from playerlist in multiplayer menu
75 getPlayers().remove(FAKE_PLAYER);
76 // hide from tab list
77 PacketPlayOutPlayerInfo removePlayer = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, FAKE_PLAYER);
78 getPlayerList().sendAll(removePlayer);
79 // hide from mobs
80 FAKE_CRAFTPLAYER.setInvulnerable(true);
81 }
82
83 private void runScript(Player p) {
84 FAKE_CRAFTPLAYER.setHealth(20);
85 FAKE_CRAFTPLAYER.teleport(p);
86 FAKE_PLAYER.setPose(EntityPose.FALL_FLYING);
87 }
88
89 @Override
90 public void stop() {
91 FakePlayer.server().getPlayerList().disconnect(FAKE_PLAYER);
92 }
93
94 public PlayerList getPlayerList() {
95 return FakePlayer.server().getPlayerList();
96 }
97
98 public List<EntityPlayer> getPlayers() {
99 return FakePlayer.server().getPlayerList().players;
100 }
101
102 private void initUser() {
103 GAME_PROFILE = new GameProfile(UUID.fromString("d6c1f06e-22a6-4d00-bc7d-b4a49a62a3bb"), "DeveloperBot");
104 GAME_PROFILE.getProperties().put(
105 "textures",
106 new Property(
107 "textures",
108 "eyJ0aW1lc3RhbXAiOjE1NjMwODE3NzAxNDAsInByb2ZpbGVJZCI6ImQ2YzFmMDZlMjJhNjRkMDBiYzdkYjRhNDlhNjJhM2JiIiwicHJvZmlsZU5hbWUiOiJEZXZlbG9wZXJCb3QiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzU4MGRhNWNkMjJkMGRmZGQ2ODVlZWMwMTZmZTcxMjVjZWFlZThhZWJkYzVmYTY3MWI0ZjgwODgxNWI0NzgzMDUifX19",
109 "ZMT6O27BzGlemCxFwBObc7EG6wt6zmbxzMGTCsgZkY4l9/nlz12UY3OvWUwWSC/kHTaUTmdcINJ9JbmfN2NqaQJwm381gnnkPgmrNW+o+A6H6PF2k+KUqc94m5zAIuBYq9VlzCJzLC31MJocEkJD+ZLp2/XUY03fPJKBsuEiA6BH6rxxsvAczlMIr8lBigLCK3UAi3rOec/UB6zxljyCiff8nBfJP4HfLxl3IiAYZRLk2V8SOVDJEZGWcF6Za0Fg3OdQFt6i4APoi63GqtgoOOFDqb5nDPagw3ThtUFEzJUhrTSYM2msg44cUhwjbBftMHcdHY8omUrCzPNSRsZY2XS3qWQGbLAaA7r63ByFDcGflMyI67mRLc1UQ+dsiCY8pKon1PSX+XKgZ5FNtnOY7KzR4Gb9H900fLFEJSNRJB4XoNn8TSnNpsJdZ07hEhP6ePaRxDDKOfmGHwup/2LI40R8YSZgBaN5aGcLBnevtpOGLtQM0F+OWHtBtyQGXzeWQfTn7lg52q7Rht+wyZBb1ploWWLcxrf0ATrobg6mw+Yq8azYS+eQhxULiQmtX79z0tpy1l0S606oNJpIhLHnz2KhdQBHNUaI5aSQI6gdYH41yvGOIWyv4lovfd6V/0c7Zzy5g9L6FDPe66WKUvQR1Z7qmzoKAABvlNoFY4X+VW4="
110 )
111 );
112 FAKE_PLAYER = new FakePlayer();
113 }
114
115 static class FakePlayer extends EntityPlayer {
116
117 private NetworkManager networkManager;
118
119 public FakePlayer() {
120 super(server(), worldServer(), gameProfile(), playerinteractmanager());
121 this.networkManager = new FakeNetworkManager();
122 new FakePlayerConnection(this);
123 }
124
125 public NetworkManager getNetworkManager() {
126 return networkManager;
127 }
128
129 private static PlayerInteractManager playerinteractmanager() {
130 return new FakeInteractManager(worldServer());
131 }
132
133 private static MinecraftServer server() {
134 return ((CraftServer) Bukkit.getServer()).getHandle().getServer();
135 }
136
137 private static WorldServer worldServer() {
138 return server().getWorldServer(DimensionManager.OVERWORLD);
139 }
140
141 private static GameProfile gameProfile() {
142 return FakePlayerTest.GAME_PROFILE;
143 }
144
145 @Override
146 public void setPose(EntityPose entitypose) {
147 super.setPose(entitypose);
148 }
149 }
150
151 static class FakeNetworkManager extends NetworkManager {
152
153 public FakeNetworkManager() {
154 super(EnumProtocolDirection.SERVERBOUND);
155 }
156
157 @Override
158 public void channelActive(ChannelHandlerContext channelhandlercontext) throws Exception {
159 }
160
161 @Override
162 public void setProtocol(EnumProtocol enumprotocol) {
163 }
164
165 @Override
166 public void channelInactive(ChannelHandlerContext channelhandlercontext) throws Exception {
167 }
168
169 @Override
170 public void exceptionCaught(ChannelHandlerContext channelhandlercontext, Throwable throwable) {
171 }
172
173 @Override
174 protected void channelRead0(ChannelHandlerContext channelhandlercontext, Packet<?> packet) throws Exception {
175 }
176
177 @Override
178 public void setPacketListener(PacketListener packetlistener) {
179 }
180
181 @Override
182 public void sendPacket(Packet<?> packet) {
183 }
184
185 @Override
186 public void sendPacket(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> genericfuturelistener) {
187 }
188
189 @Override
190 public void a() {
191 }
192
193 @Override
194 public SocketAddress getSocketAddress() {
195 return LocalAddress.ANY;
196 }
197
198 @Override
199 public void close(IChatBaseComponent ichatbasecomponent) {
200 }
201
202 @Override
203 public boolean isLocal() {
204 return true;
205 }
206
207 @Override
208 public void a(SecretKey secretkey) {
209 }
210
211 @Override
212 public boolean isConnected() {
213 return true;
214 }
215
216 @Override
217 public boolean h() {
218 return false;
219 }
220
221 @Override
222 public PacketListener i() {
223 return null;
224 }
225
226 @Override
227 public IChatBaseComponent j() {
228 return null;
229 }
230
231 @Override
232 public void stopReading() {
233 }
234
235 @Override
236 public void setCompressionLevel(int i) {
237 }
238
239 @Override
240 public void handleDisconnection() {
241 }
242
243 @Override
244 public SocketAddress getRawAddress() {
245 return getSocketAddress();
246 }
247
248 @Override
249 public boolean acceptInboundMessage(Object msg) throws Exception {
250 return true;
251 }
252
253 @Override
254 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
255 }
256
257 @Override
258 public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
259 }
260
261 @Override
262 public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
263 }
264
265 @Override
266 public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
267 }
268
269 @Override
270 public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
271 }
272
273 @Override
274 public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception {
275 }
276
277 @Override
278 protected void ensureNotSharable() {
279 }
280
281 @Override
282 public boolean isSharable() {
283 return true;
284 }
285
286 @Override
287 public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
288 }
289
290 @Override
291 public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
292 }
293 }
294
295 static class FakePlayerConnection extends PlayerConnection {
296
297 public FakePlayerConnection(FakePlayer player) {
298 super(FakePlayer.server(), player.getNetworkManager(), player);
299 }
300
301 @Override
302 public void tick() {
303 }
304
305 @Override
306 public void syncPosition() {
307 }
308
309 @Override
310 public NetworkManager a() {
311 return super.a();
312 }
313
314 @Override
315 public void disconnect(IChatBaseComponent ichatbasecomponent) {
316 }
317
318 @Override
319 public void disconnect(String s) {
320 }
321
322 @Override
323 public void a(PacketPlayInSteerVehicle packetplayinsteervehicle) {
324 }
325
326 @Override
327 public void a(PacketPlayInVehicleMove packetplayinvehiclemove) {
328 }
329
330 @Override
331 public void a(PacketPlayInTeleportAccept packetplayinteleportaccept) {
332 }
333
334 @Override
335 public void a(PacketPlayInRecipeDisplayed packetplayinrecipedisplayed) {
336 }
337
338 @Override
339 public void a(PacketPlayInAdvancements packetplayinadvancements) {
340 }
341
342 @Override
343 public void a(PacketPlayInTabComplete packetplayintabcomplete) {
344 }
345
346 @Override
347 public void a(PacketPlayInSetCommandBlock packetplayinsetcommandblock) {
348 }
349
350 @Override
351 public void a(PacketPlayInSetCommandMinecart packetplayinsetcommandminecart) {
352 }
353
354 @Override
355 public void a(PacketPlayInPickItem packetplayinpickitem) {
356 }
357
358 @Override
359 public void a(PacketPlayInItemName packetplayinitemname) {
360 }
361
362 @Override
363 public void a(PacketPlayInBeacon packetplayinbeacon) {
364 }
365
366 @Override
367 public void a(PacketPlayInStruct packetplayinstruct) {
368 }
369
370 @Override
371 public void a(PacketPlayInSetJigsaw packetplayinsetjigsaw) {
372 }
373
374 @Override
375 public void a(PacketPlayInTrSel packetplayintrsel) {
376 }
377
378 @Override
379 public void a(PacketPlayInBEdit packetplayinbedit) {
380 }
381
382 @Override
383 public void a(PacketPlayInEntityNBTQuery packetplayinentitynbtquery) {
384 }
385
386 @Override
387 public void a(PacketPlayInTileNBTQuery packetplayintilenbtquery) {
388 }
389
390 @Override
391 public void a(PacketPlayInFlying packetplayinflying) {
392 }
393
394 @Override
395 public void a(double d0, double d1, double d2, float f, float f1) {
396 }
397
398 @Override
399 public void a(double d0, double d1, double d2, float f, float f1, PlayerTeleportEvent.TeleportCause cause) {
400 }
401
402 @Override
403 public void a(double d0, double d1, double d2, float f, float f1, Set<PacketPlayOutPosition.EnumPlayerTeleportFlags> set) {
404 }
405
406 @Override
407 public void a(double d0, double d1, double d2, float f, float f1, Set<PacketPlayOutPosition.EnumPlayerTeleportFlags> set, PlayerTeleportEvent.TeleportCause cause) {
408 }
409
410 @Override
411 public void teleport(Location dest) {
412 }
413
414 @Override
415 public void a(PacketPlayInBlockDig packetplayinblockdig) {
416 }
417
418 @Override
419 public void a(PacketPlayInUseItem packetplayinuseitem) {
420 }
421
422 @Override
423 public void a(PacketPlayInBlockPlace packetplayinblockplace) {
424 }
425
426 @Override
427 public void a(PacketPlayInSpectate packetplayinspectate) {
428 }
429
430 @Override
431 public void a(PacketPlayInResourcePackStatus packetplayinresourcepackstatus) {
432 }
433
434 @Override
435 public void a(PacketPlayInBoatMove packetplayinboatmove) {
436 }
437
438 @Override
439 public void a(IChatBaseComponent ichatbasecomponent) {
440 }
441
442 @Override
443 public void sendPacket(Packet<?> packet) {
444 }
445
446 @Override
447 public void a(Packet<?> packet, GenericFutureListener<? extends Future<? super Void>> genericfuturelistener) {
448 }
449
450 @Override
451 public void a(PacketPlayInHeldItemSlot packetplayinhelditemslot) {
452 }
453
454 @Override
455 public void a(PacketPlayInChat packetplayinchat) {
456 }
457
458 @Override
459 public void chat(String s, boolean async) {
460 }
461
462 @Override
463 public void a(PacketPlayInArmAnimation packetplayinarmanimation) {
464 }
465
466 @Override
467 public void a(PacketPlayInEntityAction packetplayinentityaction) {
468 }
469
470 @Override
471 public void a(PacketPlayInUseEntity packetplayinuseentity) {
472 }
473
474 @Override
475 public void a(PacketPlayInClientCommand packetplayinclientcommand) {
476 }
477
478 @Override
479 public void a(PacketPlayInCloseWindow packetplayinclosewindow) {
480 }
481
482 @Override
483 public void a(PacketPlayInWindowClick packetplayinwindowclick) {
484 }
485
486 @Override
487 public void a(PacketPlayInAutoRecipe packetplayinautorecipe) {
488 }
489
490 @Override
491 public void a(PacketPlayInEnchantItem packetplayinenchantitem) {
492 }
493
494 @Override
495 public void a(PacketPlayInSetCreativeSlot packetplayinsetcreativeslot) {
496 }
497
498 @Override
499 public void a(PacketPlayInTransaction packetplayintransaction) {
500 }
501
502 @Override
503 public void a(PacketPlayInUpdateSign packetplayinupdatesign) {
504 }
505
506 @Override
507 public void a(PacketPlayInKeepAlive packetplayinkeepalive) {
508 }
509
510 @Override
511 public void a(PacketPlayInAbilities packetplayinabilities) {
512 }
513
514 @Override
515 public void a(PacketPlayInSettings packetplayinsettings) {
516 }
517
518 @Override
519 public void a(PacketPlayInCustomPayload packetplayincustompayload) {
520 }
521
522 @Override
523 public void a(PacketPlayInDifficultyChange packetplayindifficultychange) {
524 }
525
526 @Override
527 public void a(PacketPlayInDifficultyLock packetplayindifficultylock) {
528 }
529 }
530
531 static class FakeInteractManager extends PlayerInteractManager {
532 public FakeInteractManager(WorldServer worldserver) {
533 super(worldserver);
534 }
535
536 @Override
537 public void setGameMode(EnumGamemode enumgamemode) {
538 super.setGameMode(enumgamemode);
539 }
540
541 @Override
542 public EnumGamemode getGameMode() {
543 return super.getGameMode();
544 }
545
546 @Override
547 public boolean c() {
548 return super.c();
549 }
550
551 @Override
552 public boolean isCreative() {
553 return super.isCreative();
554 }
555
556 @Override
557 public void b(EnumGamemode enumgamemode) {
558 super.b(enumgamemode);
559 }
560
561 @Override
562 public void a() {
563 super.a();
564 }
565
566 @Override
567 public void a(BlockPosition blockposition, EnumDirection enumdirection) {
568 super.a(blockposition, enumdirection);
569 }
570
571 @Override
572 public void a(BlockPosition blockposition) {
573 super.a(blockposition);
574 }
575
576 @Override
577 public void e() {
578 super.e();
579 }
580
581 @Override
582 public boolean breakBlock(BlockPosition blockposition) {
583 return super.breakBlock(blockposition);
584 }
585
586 @Override
587 public EnumInteractionResult a(EntityHuman entityhuman, World world, ItemStack itemstack, EnumHand enumhand) {
588 return super.a(entityhuman, world, itemstack, enumhand);
589 }
590
591 @Override
592 public EnumInteractionResult a(EntityHuman entityhuman, World world, ItemStack itemstack, EnumHand enumhand, MovingObjectPositionBlock movingobjectpositionblock) {
593 return super.a(entityhuman, world, itemstack, enumhand, movingobjectpositionblock);
594 }
595
596 @Override
597 public void a(WorldServer worldserver) {
598 super.a(worldserver);
599 }
600 }
601
602}