Get Creator of Iron Golem

Discussion in 'Spigot Plugin Development' started by Leniency, Dec 17, 2016.

Thread Status:
Not open for further replies.
  1. I know how to check when an iron golem is build by a player, I just don't know how to get who built it. I am assuming it has to do with MetaData values, but I don't know which tag (if it is). Could someone help me?
     
  2. Doesn't look like there's any simple way to get the creator, as whether or not it was player-created is stored as a boolean (IronGolem#isPlayerCreated()).
     
  3. Yea, that is the issue i am having.
     
  4. Hey,
    I made a little function to handel it.
    I Don't know if you can use it... But i hope i can help you with this.

    Code (Text):
    @EventHandler
        public void onSpawn(BlockPlaceEvent e){
            Player p = e.getPlayer();
            if(e.getBlock().getType().equals(Material.PUMPKIN)){
                Location loc = e.getBlock().getLocation();
             
                Location B1 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1, loc.getZ());
                Location B2 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 2, loc.getZ());
             
             
                Location B3 = new Location(loc.getWorld(), loc.getX() - 1, loc.getY() - 1, loc.getZ());
                Location B4 = new Location(loc.getWorld(), loc.getX() + 1, loc.getY() - 1, loc.getZ());
             
             
                Location B5 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1, loc.getZ() - 1);
                Location B6 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1, loc.getZ() + 1);
             
                if(B1.getBlock().getType().equals(Material.IRON_BLOCK) && B2.getBlock().getType().equals(Material.IRON_BLOCK)){
                    if(B3.getBlock().getType().equals(Material.IRON_BLOCK) && B4.getBlock().getType().equals(Material.IRON_BLOCK)){
                        e.setCancelled(true);
                        loc.getBlock().setType(Material.AIR);
                        B1.getBlock().setType(Material.AIR);
                        B2.getBlock().setType(Material.AIR);
                        B3.getBlock().setType(Material.AIR);
                        B4.getBlock().setType(Material.AIR);
                     
                        Location golem = p.getLocation();
                     
                        golem.getWorld().spawnEntity(golem, EntityType.IRON_GOLEM);
                        Bukkit.broadcastMessage(p.getName() + " Has Spawnd a Golem");
                     
                    }else if(B5.getBlock().getType().equals(Material.IRON_BLOCK) && B6.getBlock().getType().equals(Material.IRON_BLOCK)){
                        e.setCancelled(true);
                        loc.getBlock().setType(Material.AIR);
                        B1.getBlock().setType(Material.AIR);
                        B2.getBlock().setType(Material.AIR);
                        B5.getBlock().setType(Material.AIR);
                        B6.getBlock().setType(Material.AIR);
                     
                        Location golem = p.getLocation();
                     
                        golem.getWorld().spawnEntity(golem, EntityType.IRON_GOLEM);
                        Bukkit.broadcastMessage(p.getName() + " Has Spawnd a Golem");
                     
                    }
                }
            }
        }
     
    • Funny Funny x 2
  5. CreatureSpawnEvent
    Check if it's an iron golem
    Cast entity to iron golem
    IronGolem#isPlayerCreated
    Check nearby entities for a player
    $$$ Profit $$$
     
    • Funny Funny x 1
    • Creative Creative x 1
  6. Already thought about it. Might be inaccurate if it is surrounded with a crowd.
    Hope you know that they can change the order of things around. Other than that, it is not a bad idea.
     
    • Agree Agree x 2
  7. A player could place it from 4 blocks away while someone else is standing a block from the structure. Just use the code I linked, I've used it and it works flawlessly.
     
  8. Ah you guys are right, I didn't take that into consideration.
     
  9. Actually, just tested it and they can NOT change the order around. They have to place the pumpkin last. I never knew this, thanks for the idea @Designly (although your thing is kinda wrong because of orientation.
     
    • Friendly Friendly x 1
  10. Thx.
    I know... im Working at the order problem...
    Its only an idee... i Never used a function like that before...
     
  11. It's Definitiv not the smartest way. But i don't know how to make it Shorter.

    I added a few methodes to check everythig

    added:
    Code (Text):
    int i;
    Location T1 = null;

    Methode to change in to a golem if everything is fine
    Code (Text):

    public void Golem(Location l, Player p){
            Location loc = l;
         
            Location B1 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1, loc.getZ());
            Location B2 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 2, loc.getZ());
         
         
            Location B3 = new Location(loc.getWorld(), loc.getX() - 1, loc.getY() - 1, loc.getZ());
            Location B4 = new Location(loc.getWorld(), loc.getX() + 1, loc.getY() - 1, loc.getZ());
         
         
            Location B5 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1, loc.getZ() - 1);
            Location B6 = new Location(loc.getWorld(), loc.getX(), loc.getY() - 1, loc.getZ() + 1);
         
            if(B1.getBlock().getType().equals(Material.IRON_BLOCK) && B2.getBlock().getType().equals(Material.IRON_BLOCK)){
                if(B3.getBlock().getType().equals(Material.IRON_BLOCK) && B4.getBlock().getType().equals(Material.IRON_BLOCK)){
                    loc.getBlock().setType(Material.AIR);
                    B1.getBlock().setType(Material.AIR);
                    B2.getBlock().setType(Material.AIR);
                    B3.getBlock().setType(Material.AIR);
                    B4.getBlock().setType(Material.AIR);
                 
                    Location golem = p.getLocation();
                 
                    golem.getWorld().spawnEntity(golem, EntityType.IRON_GOLEM);
                    Bukkit.broadcastMessage(p.getName() + " Has Spawnd a Golem");
                 
                }else if(B5.getBlock().getType().equals(Material.IRON_BLOCK) && B6.getBlock().getType().equals(Material.IRON_BLOCK)){
                    loc.getBlock().setType(Material.AIR);
                    B1.getBlock().setType(Material.AIR);
                    B2.getBlock().setType(Material.AIR);
                    B5.getBlock().setType(Material.AIR);
                    B6.getBlock().setType(Material.AIR);
                 
                    Location golem = p.getLocation();
                 
                    golem.getWorld().spawnEntity(golem, EntityType.IRON_GOLEM);
                    Bukkit.broadcastMessage(p.getName() + " Has Spawnd a Golem");
                 
                }
            }
    }
     

    Checks if the target block is a Pumpkin
    Code (Text):

    public void check(Location loc, Location T1, Player p){
            if(loc.getWorld().getBlockAt(T1).getType().equals(Material.PUMPKIN)){
                Golem(T1, p);
                i = 0;
            }
    }
     

    Reset the location T1
    Code (Text):

    public void T1reset(Location loc){
            T1 = new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ());
    }
     

    And Finaly the Event
    I Know that ther must be a way to make it shorter...
    but i don't know that way so i did it this way.
    it is a little long. But it works fine!
    Code (Text):

    Player p = e.getPlayer();
            if(e.getBlock().getType().equals(Material.PUMPKIN)){
                Location loc = e.getBlock().getLocation();
                Golem(loc, p);
            }
            if(e.getBlock().getType().equals(Material.IRON_BLOCK)){
                i = 1;
                Location loc = e.getBlock().getLocation();
             
                T1reset(loc);
             
                T1.add(+1, 0, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(-1, 0, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(+2, 0, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(-2, 0, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +1, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, -1, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +2, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, -2, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, 0, +1);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, 0, -1);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, 0, +2);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, 0, -2);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(+1, +1, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(-1, +1, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(+2, +1, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(-2, +1, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             

                T1reset(loc);
             
                T1.add(+1, +2, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(-1, +2, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(+2, +2, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(-2, +2, 0);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
             
                T1reset(loc);
             
                T1.add(0, +1, +1);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +1, -1);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +1, +2);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +1, -2);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +2, +1);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +2, -1);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +2, +2);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
             
                T1reset(loc);
             
                T1.add(0, +2, -2);
                check(loc, T1, p);
                if(i == 0){
                    return;
                }
            }
     
     
    • Funny Funny x 2
  12. You could make a simple double for look to shorten that
     
    • Agree Agree x 1
Thread Status:
Not open for further replies.