Trouble with using Ints

Discussion in 'Plugin Development' started by candyfloss20, Jun 8, 2014.

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

    candyfloss20

    So im makeing a UHC plugin for me and some m8ts but the bossbar stays at 0 even if some has voted! can you help me solve the problem ?

    The Commands Code:
    Code:java
    1. package com.candyfloss20.UHC.Commands;
    2.  
    3. import com.candyfloss20.UHC.UHCCore;
    4. import com.candyfloss20.UHC.Util.GameState;
    5. import me.confuser.barapi.BarAPI;
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.Material;
    8. import org.bukkit.command.Command;
    9. import org.bukkit.command.CommandExecutor;
    10. import org.bukkit.command.CommandSender;
    11. import org.bukkit.command.ConsoleCommandSender;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.event.EventHandler;
    14. import org.bukkit.event.Listener;
    15. import org.bukkit.event.player.PlayerInteractEvent;
    16. import org.bukkit.event.player.PlayerMoveEvent;
    17.  
    18. import java.util.ArrayList;
    19. import java.util.List;
    20.  
    21. public class VoteNetherCommands implements CommandExecutor, Listener {
    22. int YesVotes;
    23. int NoVotes;
    24. private List<String> Voted = new ArrayList<String>();
    25.  
    26. @Override
    27. public boolean onCommand(CommandSender sender, Command command, String string, String[] args) {
    28. if (command.getName().equalsIgnoreCase("vote")) {
    29. if (sender instanceof ConsoleCommandSender) {
    30. sender.sendMessage(UHCCore.TAG + "Not For You!");
    31. } else {
    32. if (UHCCore.getState() != GameState.LOGINTIME) {
    33. sender.sendMessage(UHCCore.TAG + "You can only vote for nether to be on/off in lobby mode!");
    34. } else if (args.length != 1) {
    35. sender.sendMessage(UHCCore.TAG + "Not the right args try: §a§o/vote <yes> <no>");
    36. } else if (args[0].equalsIgnoreCase("yes")) {
    37. if (!Voted.contains(sender.getName())) {
    38. Voted.add(sender.getName());
    39. YesVotes++;
    40. sender.sendMessage(UHCCore.TAG + "You have vote for the nether to be ON!");
    41. } else if (Voted.contains(sender.getName())) {
    42. sender.sendMessage(UHCCore.TAG + "You have vote already §a(#YOVO)");
    43. }
    44. } else if (args[0].equalsIgnoreCase("no")) {
    45. if (!Voted.contains(sender.getName())) {
    46. Voted.add(sender.getName());
    47. NoVotes++;
    48. sender.sendMessage(UHCCore.TAG + "You have vote for the nether to be OFF!");
    49. } else if (Voted.contains(sender.getName())) {
    50. sender.sendMessage(UHCCore.TAG + "You have vote already §a(#YOVO)");
    51. }
    52. }
    53. }
    54. }
    55. return true;
    56. }
    57.  
    58.  
    59. @EventHandler
    60. public void onFire(PlayerInteractEvent event) {
    61. if (event.getPlayer().getItemInHand().getType() == Material.FLINT_AND_STEEL && event.getClickedBlock().getType() == Material.OBSIDIAN) {
    62. if (YesVotes > NoVotes) {
    63. event.setCancelled(false);
    64. } else if (NoVotes > YesVotes) {
    65. event.setCancelled(true);
    66. event.getPlayer().sendMessage(UHCCore.TAG + "The Nether is disabled! due to more NO votes then YES votes!");
    67. } else if (NoVotes == YesVotes) {
    68. event.setCancelled(true);
    69. event.getPlayer().sendMessage(UHCCore.TAG + "The vote to disable the Nether was a tie so it has been disable by the developer");
    70. }
    71. }
    72. }
    73.  
    74. @EventHandler
    75. public void onMove(PlayerMoveEvent event) {
    76. if (UHCCore.getState() == GameState.LOGINTIME) {
    77. for (Player allplayers : Bukkit.getOnlinePlayers()) {
    78. BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes);
    79. }
    80. }
    81. }
    82. }
    83.  


    Regards candyfloss20 :)
     
  2. Offline

    Acer_Mortem

    candyfloss20

    Going to the BarAPI Bukkit Plugin Page, I see this:

    Code:
    BarAPI.setMessage(Player player, String message)
     
    Set a message for the player. It will remain there until the player logs off or another plugin overrides it.
     
    BarAPI.setMessage(Player player, String message, float percent)
     
    Same as above except you can set the % of the health bar. 100 shows the entire health bar, 50 shows half the health bar and so on.
    What you've been doing, is you've been filling in two arguments, player and message, but not the float percent.

    So, instead of using:

    Code:
     BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes);
    You could use like:

    Code:
    float percent = 20F;
    BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes, percent);
    to make the bar fill up 20% of the way.

    candyfloss20
    If you wanted to make a ratio of yes to no show up on the bar (with yes being on the right), simply use this formula:

    Code:
    float percent = (yes/(yes + no));
    But, from what I've messed with floats doing something similar to yours, floats a bit wonky, so you might want to make floats progress throughout the ENTIRE code, so EVERYWHERE the yes and no values are floats, and not ints. (you can cast int to them during the String message in your BarAPI.setMessage() argument, so there is no decimal)

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Nov 2, 2016
  3. Offline

    candyfloss20

    Acer_Mortem, Thats not the bug the bar displays fine but the ints it shows are ALLWAYS 0 even if some has voted to +1 to the int.

    Any ideas
     
  4. Offline

    Acer_Mortem


    You never set the initial value for the votes at zero. So when you define the integers, set them equal to zero.
     
  5. Offline

    candyfloss20

    @Acer_Mortem, I Have this now and on the bar it still stays at 0:

    Code:java
    1. package com.candyfloss20.UHC.Commands;
    2.  
    3. import com.candyfloss20.UHC.UHCCore;
    4. import com.candyfloss20.UHC.Util.GameState;
    5. import me.confuser.barapi.BarAPI;
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.Material;
    8. import org.bukkit.command.Command;
    9. import org.bukkit.command.CommandExecutor;
    10. import org.bukkit.command.CommandSender;
    11. import org.bukkit.command.ConsoleCommandSender;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.event.EventHandler;
    14. import org.bukkit.event.Listener;
    15. import org.bukkit.event.player.PlayerInteractEvent;
    16. import org.bukkit.event.player.PlayerMoveEvent;
    17.  
    18. import java.util.ArrayList;
    19. import java.util.List;
    20.  
    21. public class VoteNetherCommands implements CommandExecutor, Listener {
    22. int YesVotes = 0;
    23. int NoVotes = 0;
    24. private List<String> Voted = new ArrayList<String>();
    25.  
    26. @Override
    27. public boolean onCommand(CommandSender sender, Command command, String string, String[] args) {
    28. if (command.getName().equalsIgnoreCase("vote")) {
    29. if (sender instanceof ConsoleCommandSender) {
    30. sender.sendMessage(UHCCore.TAG + "Not For You!");
    31. } else {
    32. if (UHCCore.getState() != GameState.LOGINTIME) {
    33. sender.sendMessage(UHCCore.TAG + "You can only vote for nether to be on/off in lobby mode!");
    34. } else if (args.length != 1) {
    35. sender.sendMessage(UHCCore.TAG + "Not the right args try: §a§o/vote <yes> <no>");
    36. } else if (args[0].equalsIgnoreCase("yes")) {
    37. if (!Voted.contains(sender.getName())) {
    38. Voted.add(sender.getName());
    39. YesVotes++;
    40. sender.sendMessage(UHCCore.TAG + "You have vote for the nether to be ON!");
    41. } else if (Voted.contains(sender.getName())) {
    42. sender.sendMessage(UHCCore.TAG + "You have vote already §a(#YOVO)");
    43. }
    44. } else if (args[0].equalsIgnoreCase("no")) {
    45. if (!Voted.contains(sender.getName())) {
    46. Voted.add(sender.getName());
    47. NoVotes++;
    48. sender.sendMessage(UHCCore.TAG + "You have vote for the nether to be OFF!");
    49. } else if (Voted.contains(sender.getName())) {
    50. sender.sendMessage(UHCCore.TAG + "You have vote already §a(#YOVO)");
    51. }
    52. }
    53. }
    54. }
    55. return true;
    56. }
    57.  
    58.  
    59. @EventHandler
    60. public void onFire(PlayerInteractEvent event) {
    61. if (event.getPlayer().getItemInHand().getType() == Material.FLINT_AND_STEEL && event.getClickedBlock().getType() == Material.OBSIDIAN) {
    62. if (YesVotes > NoVotes) {
    63. event.setCancelled(false);
    64. } else if (NoVotes > YesVotes) {
    65. event.setCancelled(true);
    66. event.getPlayer().sendMessage(UHCCore.TAG + "The Nether is disabled! due to more NO votes then YES votes!");
    67. } else if (NoVotes == YesVotes) {
    68. event.setCancelled(true);
    69. event.getPlayer().sendMessage(UHCCore.TAG + "The vote to disable the Nether was a tie so it has been disable by the developer");
    70. }
    71. }
    72. }
    73.  
    74. @EventHandler
    75. public void onMove(PlayerMoveEvent event) {
    76. if (UHCCore.getState() == GameState.LOGINTIME) {
    77. for (Player allplayers : Bukkit.getOnlinePlayers()) {
    78. BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes);
    79. }
    80. }
    81. }
    82. }
    83.  
     
  6. Offline

    spy_1134

    You are using BarAPI.setMessage(player, string).
    You should be using BarAPI.setMessage(player, string, percent).

    Code:java
    1. BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes, (YesVotes / (YesVotes + NoVotes));
     
  7. Offline

    candyfloss20

    Thanks spy_1134,
    I will try that.

    spy_1134
    get this error:
    HTML:
    [17:39:02 ERROR]: Could not pass event PlayerMoveEvent to UHCPlus v2.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:294) ~[craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62) ~[craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:501) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:486) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java
    :235) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.PacketPlayInFlying.a(SourceFile:137) [cr
    aftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.PacketPlayInPosition.handle(SourceFile:6
    3) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157
    ) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craf
    tbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:6
    67) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:2
    60) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:5
    58) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java
    :469) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:6
    28) [craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    Caused by: java.lang.ArithmeticException: / by zero
            at com.candyfloss20.UHC.Commands.VoteForNetherCommand.onMove(VoteForNeth
    erCommand.java:78) ~[?:?]
            at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source) ~[?:?]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
    .8.0_05]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_05]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:292) ~[craftbukkit.java:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
            ... 13 more
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Nov 2, 2016
  8. Offline

    LordVakar

    candyfloss20
    If you read the stacktrace, you will see this:
    Caused by: java.lang.ArithmeticException: / by zero
    This means it is dividing something by zero.
    This is caused by the line:
    1. BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes, (YesVotes / (YesVotes + NoVotes));
    I suggest you change the float percent.
    Are you the only one online voting?
     
  9. Offline

    candyfloss20

    LordVakar yes im only using this one command and how would i use the float thing haven't used BarAPI that much
     
  10. Offline

    MeRPG

    Easy. When the player first moves, there aren't any votes. Change:
    BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes, (YesVotes / (YesVotes + NoVotes));
    To:
    BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes, (YesVotes / denominator);
    And add this before that:
    int denominator = YesVotes+NoVotes;
    if(denominator == 0) {
    denominator=1;
    }


    So:
    int denominator = YesVotes+NoVotes;
    if(denominator == 0) {
    denominator=1;
    }
    BarAPI.setMessage(allplayers, "§7Votes: §aYes: §7" + YesVotes + " §7|| §aNo: §7" + NoVotes, (YesVotes / denominator);

    This will prevent the denominator from being 0.
     
Thread Status:
Not open for further replies.

Share This Page