Advertisement
Guest User

Untitled

a guest
May 25th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. package de.blablubbabc.test2;
  2.  
  3. import java.text.DecimalFormat;
  4.  
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.Location;
  7. import org.bukkit.Material;
  8. import org.bukkit.block.Block;
  9. import org.bukkit.block.BlockFace;
  10. import org.bukkit.entity.Entity;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.entity.Villager;
  13. import org.bukkit.event.EventHandler;
  14. import org.bukkit.event.EventPriority;
  15. import org.bukkit.event.Listener;
  16. import org.bukkit.event.block.Action;
  17. import org.bukkit.event.player.PlayerInteractEvent;
  18. import org.bukkit.inventory.EquipmentSlot;
  19. import org.bukkit.plugin.java.JavaPlugin;
  20. import org.bukkit.scheduler.BukkitRunnable;
  21.  
  22. public class Test extends JavaPlugin implements Listener {
  23.  
  24. private Entity entity = null;
  25.  
  26. @Override
  27. public void onEnable() {
  28. Bukkit.getPluginManager().registerEvents(this, this);
  29. }
  30.  
  31. @Override
  32. public void onDisable() {
  33. }
  34.  
  35. @EventHandler(priority = EventPriority.MONITOR)
  36. void onBlockClicked(PlayerInteractEvent event) {
  37. if (event.getHand() != EquipmentSlot.HAND) return;
  38. Block block = event.getClickedBlock();
  39. if (block == null || event.getAction() == Action.LEFT_CLICK_BLOCK
  40. || (event.getItem() != null && event.getItem().getType() != Material.AIR)) return;
  41. if (entity != null) {
  42. // cleanup prev entity:
  43. entity.remove();
  44. entity = null;
  45. }
  46.  
  47. // spawning slightly above ground, to make sure this is not due to an edge case:
  48. Location spawnPos = block.getRelative(event.getBlockFace()).getLocation().add(0.5D, 0.1D, 0.5D);
  49. entity = block.getWorld().spawn(spawnPos, Villager.class, (e) -> {
  50. e.setAI(false); // no gravity by default
  51. });
  52. DecimalFormat df = new DecimalFormat("0.##");
  53. Player player = event.getPlayer();
  54. player.sendMessage("Start in 1 sec");
  55. new BukkitRunnable() {
  56.  
  57. int counter = 0;
  58. boolean end = false;
  59.  
  60. @Override
  61. public void run() {
  62. if (!player.isValid() || !entity.isValid()) {
  63. this.cancel();
  64. return;
  65. }
  66. counter++;
  67. Location cur = entity.getLocation();
  68. if (cur.getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR) {
  69. // teleport 1 block down:
  70. Location target = cur.add(0.0D, -1.0D, 0.0D);
  71. entity.teleport(target);
  72. player.sendMessage("Teleport to height: " + df.format(target.getY()));
  73. } else if (!end) {
  74. player.sendMessage("Last height: " + df.format(cur.getY()));
  75. end = true;
  76. }
  77. if (entity.getLocation().getBlock().getType() != Material.AIR) {
  78. // this is never reached in this experiment, the entity is only visually inside the block
  79. player.sendMessage("The entity is inside a block!");
  80. }
  81. // remove again after 5 sec or when we hit the ground
  82. if (counter > 100) {
  83. entity.remove();
  84. this.cancel();
  85. }
  86. }
  87. }.runTaskTimer(this, 20L, 1L);
  88. }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement