Advertisement
Guest User

Untitled

a guest
Dec 13th, 2017
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.82 KB | None | 0 0
  1. package com.ewoudje.spigotplugintests;
  2.  
  3. //Made by ewoudje
  4.  
  5. import net.minecraft.server.v1_12_R1.*;
  6. import org.bukkit.Location;
  7. import org.bukkit.Material;
  8. import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
  9. import org.bukkit.craftbukkit.v1_12_R1.util.CraftMagicNumbers;
  10. import org.bukkit.entity.Player;
  11. import org.bukkit.event.EventHandler;
  12. import org.bukkit.event.Listener;
  13. import org.bukkit.event.block.BlockBreakEvent;
  14. import org.bukkit.event.player.PlayerJoinEvent;
  15. import org.bukkit.event.player.PlayerQuitEvent;
  16. import org.bukkit.scheduler.BukkitTask;
  17.  
  18. import java.lang.reflect.Field;
  19. import java.util.ArrayList;
  20. import java.util.HashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23.  
  24. public class StrengthChanger implements Listener {
  25.  
  26. private Map<Player, BukkitTask> task;
  27. private Field pim_f, pim_k, pim_d, pim_h, pim_lastdig, pim_currentdig;
  28.  
  29. private static List<Block> changedBlocks;
  30. private static Field strength;
  31. private final Main plugin;
  32.  
  33. public StrengthChanger(Main plugin) {
  34. this.plugin = plugin;
  35. task = new HashMap<>();
  36. changedBlocks = new ArrayList<>();
  37. try {
  38. strength = Block.class.getDeclaredField("strength");
  39. pim_f = PlayerInteractManager.class.getDeclaredField("f");
  40. pim_k = PlayerInteractManager.class.getDeclaredField("k");
  41. pim_d = PlayerInteractManager.class.getDeclaredField("d");
  42. pim_h = PlayerInteractManager.class.getDeclaredField("h");
  43. pim_lastdig = PlayerInteractManager.class.getDeclaredField("lastDigTick");
  44. pim_currentdig = PlayerInteractManager.class.getDeclaredField("currentTick");
  45. strength.setAccessible(true);
  46. pim_f.setAccessible(true);
  47. pim_k.setAccessible(true);
  48. pim_d.setAccessible(true);
  49. pim_h.setAccessible(true);
  50. pim_lastdig.setAccessible(true);
  51. pim_currentdig.setAccessible(true);
  52. } catch (Exception e) {
  53. e.printStackTrace();
  54. }
  55.  
  56. }
  57.  
  58. public static void setStrength(Block block, float strengthValue) {
  59. try {
  60. strength.set(block, strengthValue);
  61. changedBlocks.add(block);
  62. } catch (IllegalAccessException e) {
  63. e.printStackTrace();
  64. }
  65. }
  66.  
  67. @EventHandler
  68. public void onJoin(PlayerJoinEvent event) {
  69. final CraftPlayer player = (CraftPlayer) event.getPlayer();
  70. final EntityPlayer handle = player.getHandle();
  71. task.put(event.getPlayer(), plugin.getServer().getScheduler().runTaskTimer(plugin, new Runnable() {
  72. boolean wasMining = false;
  73. @Override
  74. public void run() {
  75. try {
  76. int k = pim_k.getInt(handle.playerInteractManager);
  77. if ((pim_h.getBoolean(handle.playerInteractManager) || pim_d.getBoolean(handle.playerInteractManager) && changedBlocks.contains(handle.world.getType((BlockPosition) pim_f.get(handle.playerInteractManager)).getBlock()))) {
  78. handle.playerConnection.sendPacket(new PacketPlayOutBlockBreakAnimation(0, (BlockPosition) pim_f.get(handle.playerInteractManager), k));
  79. if (k >= 10) {
  80.  
  81. handle.playerInteractManager.a((BlockPosition) pim_f.get(handle.playerInteractManager));
  82. }
  83. wasMining = true;
  84. } else if (wasMining) {
  85. wasMining = false;
  86. handle.playerConnection.sendPacket(new PacketPlayOutBlockBreakAnimation(0, (BlockPosition) pim_f.get(handle.playerInteractManager), -1));
  87. }
  88. } catch (IllegalAccessException e) {
  89. e.printStackTrace();
  90. }
  91. }
  92. }, 0, 1));
  93.  
  94. }
  95.  
  96. @EventHandler
  97. public void onLeave(PlayerQuitEvent event) {
  98. if (task.get(event.getPlayer()) != null) task.remove(event.getPlayer());
  99. }
  100.  
  101. @EventHandler
  102. public void onBlockBreak(BlockBreakEvent event) {
  103. Location loc = event.getBlock().getLocation();
  104. EntityPlayer handle = ((CraftPlayer) event.getPlayer()).getHandle();
  105. handle.playerConnection.sendPacket(new PacketPlayOutWorldEvent(2001, new BlockPosition(loc.getX(), loc.getY(), loc.getZ()), Block.getCombinedId(CraftMagicNumbers.getBlock(event.getBlock()).getBlockData()), false));
  106. plugin.getServer().getScheduler().runTaskLater(plugin, () -> {
  107.  
  108. try {
  109. event.getBlock().setType(Material.COAL_BLOCK);
  110. pim_lastdig.set(handle.playerInteractManager, pim_currentdig.get(handle.playerInteractManager));
  111. } catch (IllegalAccessException e) {
  112. e.printStackTrace();
  113. }
  114. }, 3);
  115. }
  116.  
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement