Solved Neep help with Red Wool ~ :D

Discussion in 'Plugin Development' started by RapidTurtle, Jun 14, 2015.

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

    RapidTurtle

    Well, I'm making a plugin which launches you at different velocity each block
    Red wool = 3
    White wool = 5
    Green wool = 7

    I have got everything about the code right, all i need help with is how to make
    "Material.WOOL" Red wool instead of plain white.

    When i start up my server there is no errors etc.

    MAIN (open)

    package me.luka.launchpad;

    import org.bukkit.plugin.java.JavaPlugin;

    public class Launchpad extends JavaPlugin {

    @Override
    public void onEnable() {
    new Red(this);
    new White (this);
    }

    @Override
    public void onDisable() {

    }
    }

    RED (open)

    package me.luka.launchpad;

    import java.util.ArrayList;

    import org.bukkit.DyeColor;
    import org.bukkit.Material;
    import org.bukkit.block.BlockFace;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageEvent;
    import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.util.Vector;

    public class Red implements Listener {

    public Red(Launchpad plugin) {
    plugin.getServer().getPluginManager().registerEvents(this, plugin);
    }

    private ArrayList<Player> jumpers = new ArrayList<Player>();

    public void onEnable() {
    }

    // THE PART I NEED HELP ON
    @EventHandler
    public void onPlayerMove(PlayerMoveEvent e) {
    if (e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() == Material.WOOL);
    e.getPlayer().setVelocity(e.getPlayer().getLocation().getDirection().multiply(3));
    e.getPlayer().setVelocity(new Vector(e.getPlayer().getVelocity().getX(), 1.0D, e.getPlayer().getVelocity().getZ()));
    jumpers.add(e.getPlayer());
    }

    @EventHandler
    public void onPlayerDamage(EntityDamageEvent e) {
    if (e.getEntity() instanceof Player) {
    Player p = (Player) e.getEntity();
    if (e.getCause() == DamageCause.FALL && jumpers.contains(p)) {
    e.setDamage(0.0);
    jumpers.remove(p);
    }
    }
    }
    }

    WHITE (open)

    package me.luka.launchpad;

    import java.util.ArrayList;

    import org.bukkit.Material;
    import org.bukkit.block.BlockFace;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageEvent;
    import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.util.Vector;

    public class White implements Listener {

    public White(Launchpad plugin) {
    plugin.getServer().getPluginManager().registerEvents(this, plugin);
    }

    private ArrayList<Player> jumpers = new ArrayList<Player>();

    public void onEnable() {
    }

    @EventHandler
    public void onPlayerMove(PlayerMoveEvent e) {
    if (e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() == Material.WOOL) {
    e.getPlayer().setVelocity(e.getPlayer().getLocation().getDirection().multiply(5));
    e.getPlayer().setVelocity(new Vector(e.getPlayer().getVelocity().getX(), 1.0D, e.getPlayer().getVelocity().getZ()));
    jumpers.add(e.getPlayer());
    }
    }

    @EventHandler
    public void onPlayerDamage(EntityDamageEvent e) {
    if (e.getEntity() instanceof Player) {
    Player p = (Player) e.getEntity();
    if (e.getCause() == DamageCause.FALL && jumpers.contains(p)) {
    e.setDamage(0.0);
    jumpers.remove(p);
    }
    }
    }
    }


    So yeah, i mainly need help on how to use Data values i guess?
    With the fix of red, it will also fix future problems with green :)
    (EDIT)
    I fixed by adding

    Wool wool = new Wool(DyeColor.RED);
    wool.toItemStack(6);
     
    Last edited: Jun 14, 2015
  2. ItemStack hi = new ItemStack(Material.WOOL, AMOUNT, (short) 14);
     
  3. Offline

    mine-care

    Few notes:
    1. do NOT store Player objects in memory for long term storage (that excludes method life circles ect.)
    2. Classes implementing Listener do not contain onEnable method, so in your code (Red and White) it is pointless unless you call it manually.
    3.
    Code:
    // THE PART I NEED HELP ON
    @EventHandler
    public void onPlayerMove(PlayerMoveEvent e) {
    if (e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() == Material.WOOL);
    e.getPlayer().setVelocity(e.getPlayer().getLocation().getDirection().multiply(3));
    e.getPlayer().setVelocity(new Vector(e.getPlayer().getVelocity().getX(), 1.0D, e.getPlayer().getVelocity().getZ()));
    jumpers.add(e.getPlayer());
    }
    The problem is very simple to solve :p you dont have a body for the If statement and also the way it is written (with the semi colin at the end) it has no function at all other than checking... so remove the ';' and put a proper body to surrond the code. the same piece of code is correct in the class called "White".

    To make your code more efficient and less resource consuming you can check if the wool is red or white in the same listener and have just one List to hold the on-flight players (less ram consumption).

    Now back to the problem, if you want to check the color of the wool, you can use:
    AnItemStackObject#getData()#getData() that will return a value that can then be compared with DyeColor.WHATEVER_COLOR_YOU_LIKE.getWoolData(); and if they are equal, KaBoom! xD
     
Thread Status:
Not open for further replies.

Share This Page