Leash a block

Discussion in 'Plugin Development' started by CheesyFreezy, Mar 1, 2015.

Thread Status:
Not open for further replies.
  1. Offline

    CheesyFreezy

    Heey heey developers,

    I'm trying to create a plugin where you can spawn a pole with horses attached to it. I have no idea how to leash a horse to a fence.

    Code:
    Code:
                                  if(player.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.GREEN + "Horse Bungee")) {
                                    final Location startLocation = player.getLocation();
                                    Block startBlock = startLocation.getBlock();
                                    startBlock.setType(Material.FENCE);
                                 
                                    for(Player players : Bukkit.getOnlinePlayers()) {
                                        players.playEffect(startLocation, Effect.STEP_SOUND, Material.WOOD);
                                    }
                                 
                                    final HashMap<UUID, Integer> taskID = new HashMap<UUID, Integer>();
                                    final HashMap<UUID, Integer> y = new HashMap<UUID, Integer>();
                                    y.put(player.getUniqueId(), (int) startLocation.getY() + 1);
                                 
                                    taskID.put(player.getUniqueId(), Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(core, new BukkitRunnable() {
                                        public void run() {
                                            if(y.get(player.getUniqueId()) < 9 + startLocation.getY()) {
                                                Location loc = new Location(startLocation.getWorld(), startLocation.getX(), y.get(player.getUniqueId()), startLocation.getZ());
                                             
                                                y.put(player.getUniqueId(), y.get(player.getUniqueId()) + 1);
                                             
                                                loc.getBlock().setType(Material.FENCE);
                                                for(Player players : Bukkit.getOnlinePlayers()) {
                                                    players.playEffect(loc, Effect.STEP_SOUND, Material.WOOD);
                                                }
                                            } else {
                                                Bukkit.getServer().getScheduler().cancelTask(taskID.get(player.getUniqueId()));
                                             
                                                //TODO Spawn horses attached to a leash on the pole.
                                            }
                                        }
                                    }, 15, 15));
                                }
     
  2. Offline

    Zombie_Striker

    • Create an EntityType.LEASH_HITCH on the fencepost
    • get your horse and set it's leashholder to the Hitch.
    That is it.
     
  3. Offline

    CheesyFreezy

    @Zombie_Striker, thank you for your help but now i'm getting this error.

    Console Error (open)

    [17:06:25 WARN]: [ArcictMC] Task #8 for ArcictMC v0.0.9 generated an exception
    java.lang.NullPointerException
    at org.bukkit.craftbukkit.v1_8_R1.CraftWorld.spawn(CraftWorld.java:1060)
    ~[craftbukkit_1_8.jar:git-Bukkit-0899683]
    at org.bukkit.craftbukkit.v1_8_R1.CraftWorld.spawn(CraftWorld.java:839)
    ~[craftbukkit_1_8.jar:git-Bukkit-0899683]
    at me.CheesyFreezy.Lobby.LobbyListener$10.run(LobbyListener.java:647) ~[
    ?:?]
    at org.bukkit.craftbukkit.v1_8_R1.scheduler.CraftTask.run(CraftTask.java
    :53) ~[craftbukkit_1_8.jar:git-Bukkit-0899683]
    at org.bukkit.craftbukkit.v1_8_R1.scheduler.CraftScheduler.mainThreadHea
    rtbeat(CraftScheduler.java:349) [craftbukkit_1_8.jar:git-Bukkit-0899683]
    at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:6
    53) [craftbukkit_1_8.jar:git-Bukkit-0899683]
    at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:2
    84) [craftbukkit_1_8.jar:git-Bukkit-0899683]
    at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:5
    98) [craftbukkit_1_8.jar:git-Bukkit-0899683]
    at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java
    :506) [craftbukkit_1_8.jar:git-Bukkit-0899683]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_31]


    Current (part of) code:
    Code:
    final Location startLocation = player.getLocation();
                                    Block startBlock = startLocation.getBlock();
                                    startBlock.setType(Material.FENCE);
                                  
                                    for(Player players : Bukkit.getOnlinePlayers()) {
                                        players.playEffect(startLocation, Effect.STEP_SOUND, Material.WOOD);
                                    }
                                  
                                    final HashMap<UUID, Integer> taskID = new HashMap<UUID, Integer>();
                                    final HashMap<UUID, Integer> y = new HashMap<UUID, Integer>();
                                    y.put(player.getUniqueId(), (int) startLocation.getY() + 1);
                                  
                                    taskID.put(player.getUniqueId(), Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(core, new BukkitRunnable() {
                                        public void run() {
                                            if(y.get(player.getUniqueId()) < 9 + startLocation.getY()) {
                                                Location loc = new Location(startLocation.getWorld(), startLocation.getX(), y.get(player.getUniqueId()), startLocation.getZ());
                                              
                                                y.put(player.getUniqueId(), y.get(player.getUniqueId()) + 1);
                                              
                                                loc.getBlock().setType(Material.FENCE);
                                                for(Player players : Bukkit.getOnlinePlayers()) {
                                                    players.playEffect(loc, Effect.STEP_SOUND, Material.WOOD);
                                                }
                                            } else {
                                                Horse h1 = (Horse) startLocation.getWorld().spawnEntity(new Location(startLocation.getWorld(), startLocation.getX(), startLocation.getY() + 8, startLocation.getZ()), EntityType.HORSE);
                                                LeashHitch hitch = (LeashHitch) startLocation.getWorld().spawn(new Location(startLocation.getWorld(), startLocation.getX(), startLocation.getY() + 8, startLocation.getZ()), LeashHitch.class);
                                          
                                                h1.setLeashHolder(hitch);
                                              
                                                Bukkit.getServer().getScheduler().cancelTask(taskID.get(player.getUniqueId()));
                                            }
                                        }
                                    }, 15, 15));
    In the console it's saying there is an error at line 647. In this code line 647 is line 26
     
  4. Offline

    Zombie_Striker

    First, don't use the .spawn(), instead use .spawnCreature();

    Secondly, the error says that there is a nullpointer on that line. Debug to see which variable is null.
     
  5. Offline

    CheesyFreezy

  6. Offline

    CheesyFreezy

  7. Offline

    Zombie_Striker

    Change getY() to getBlockY();. getY returns a double while getBlockY returns an int.
     
  8. Offline

    CheesyFreezy

  9. Offline

    Zombie_Striker

    It seems that you are casting EntityType to a LivingEntity(The Leash). Does your Map accept LivingEntitys instead on an EntityType?
     
Thread Status:
Not open for further replies.

Share This Page