Does anyone know how to do something like this? xD

Discussion in 'Plugin Development' started by DoggyCode™, Jul 5, 2015.

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

    DoggyCode™

    Does anyone know how to do this? If you have any method, then please share! Only the potions thing.

    Screenshot_1.png
     
  2. Offline

    CrystallFTW

    @DoggyCode™ Maybe that's just me but I don't understand what you are looking for. Explain please.
     
  3. @DoggyCode™
    Does that show the potions of the player? If so, you can create an inventory and put an itemstack with the active potions as lore in it (Player#getActivePotionEffects()) in the inventory.
     
  4. Offline

    DoggyCode™

    Yeh, it's the potion effects of a player... but I want it all attached to one item, in the lore. Like displayed in the picture..

    For example:

    ITEM
    Speed IV (time left)
    Regeneration III (time left)

    and so on, like in the lore, under each other.

    @megamichiel @CrystallFTW
     
  5. @DoggyCode™
    For the roman numbers, I once created this method that you could use (goes up to 100 only):
    Code (open)
    Code:
    
        private String toRomanNumbers(int value) {
            if(value == 100) return "" + '\u262f'; //Yin Yang
            String s = ""+value;
            int len0 = Integer.parseInt("" + s.charAt(0));
            int len1 = Integer.parseInt("" + (value >= 10 ? s.charAt(1) : s.charAt(0)));
            String out = "";
            if(value >= 10) {
                switch(len0) {
                case 1: out += "X"; break;
                case 2: out += "XX"; break;
                case 3: out += "XXX"; break;
                case 4: out += "XL"; break;
                case 5: out += "L"; break;
                case 6: out += "LX"; break;
                case 7: out += "LXX"; break;
                case 8: out += "LXXX"; break;
                case 9: out += "XC"; break;
                }
            } {
                switch(len1) {
                case 1: out += "I"; break;
                case 2: out += "II"; break;
                case 3: out += "III"; break;
                case 4: out += "IV"; break;
                case 5: out += "V"; break;
                case 6: out += "VI"; break;
                case 7: out += "VII"; break;
                case 8: out += "VIII"; break;
                case 9: out += "IX"; break;
                }
            }
            return out;
        }

    For the lore you could do something like this
    Code:
    List<String> lore = new ArrayList<>();
    for(PotionEffect effect : player.getActivePotionEffects()) {
      String name = effect.getType().name().toLowerCase();
      name = name.substring(0, 1).toUpperCase() + name.substring(1);
      long left = effect.getDuration() * 50L; //Ticks to milliseconds
      Calendar time = Calendar.getInstance();
      time.setTimeInMillis(left);
      String timeLeft = new SimpleDataFormat("someformatstring").format(time);
      String line = name + " " + toRomanNumbers(effect.getAmpflier()) + "(" + timeLeft + ")";
      lore.add(line);
    }
    Visit this link for possible date formats.
     
  6. Offline

    DoggyCode™

    @megamichiel Thanks, but I still get one error:

    Screenshot_1.png
     

    Attached Files:

  7. Offline

    poepdrolify

    Its SimpleDateFormat not data
     
  8. Offline

    DoggyCode™

    Huh?.

    @poepdrolify
     
  9. Offline

    WesJD

    @DoggyCode™ Use SimpleDateFormat, not SimpleDataFormat(no such thing).
     
  10. Offline

    DoggyCode™

    Ok, but do you now know how I can add this to a item? This lore?

    Code:
      //Active Potions Effects
      List<String> lore = new ArrayList<>();
      for(PotionEffect effect : p.getActivePotionEffects()) {
      String name = effect.getType().getName().toLowerCase();
      name = name.substring(0, 1).toUpperCase() + name.substring(1);
      long left = effect.getDuration() * 50L; //Ticks to milliseconds
      Calendar time = Calendar.getInstance();
      time.setTimeInMillis(left);
      String timeLeft = new SimpleDateFormat("someformatstring").format(time);
      String line = name + " " + toRomanNumbers(effect.getAmplifier()) + "(" + timeLeft + ")";
      lore.add(line);
      }
    @megamichiel btw, that roman numbers thing, thanks!
     
  11. Offline

    poepdrolify

    Code:
    ItemStack is = new ItemStack(Material.POTION);
    ItemMeta im = is.getItemMeta();
    im.setLore(lore)
    im.setDisplayName("lol");
    is.setItemMeta(im);
    Not tested but should work
     
    DoggyCode™ likes this.
  12. Offline

    DoggyCode™

    I tried... It worked, the item was there and everything.. until I added a potion effect to the player.. the inventory won't open and I get this error in the console.

    @poepdrolify

    bump

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 12, 2016
  13. Offline

    Ungemonstert

    DoggyCode™ likes this.
  14. Offline

    DoggyCode™

    It says that it could to pass PlayerInteractEntityEvent from (plugin_name) (plugin_version).
     
  15. @DoggyCode™
    That's a simple EventException, send us the stacktrace. If you're using windows console you can right click and click "Mark" to select stuff.
    EDIT: I'm guessing you left the "someformatstring" there.
     
  16. Offline

    DoggyCode™

    I'll just give you what I have:

    Code:
        private String toRomanNumbers(int value) {
        if(value == 100) return "" + '\u262f';
        String s = ""+value;
        int len0 = Integer.parseInt("" + s.charAt(0));
        int len1 = Integer.parseInt("" + (value >= 10 ? s.charAt(1) : s.charAt(0)));
        String out = "";
        if(value >= 10) {
        switch(len0) {
        case 1: out += "X"; break;
        case 2: out += "XX"; break;
        case 3: out += "XXX"; break;
        case 4: out += "XL"; break;
        case 5: out += "L"; break;
        case 6: out += "LX"; break;
        case 7: out += "LXX"; break;
        case 8: out += "LXXX"; break;
        case 9: out += "XC"; break;
        }
        } {
        switch(len1) {
        case 1: out += "I"; break;
        case 2: out += "II"; break;
        case 3: out += "III"; break;
        case 4: out += "IV"; break;
        case 5: out += "V"; break;
        case 6: out += "VI"; break;
        case 7: out += "VII"; break;
        case 8: out += "VIII"; break;
        case 9: out += "IX"; break;
        }
        }
        return out;
        }
    
      public Inventory InspectPlayer(Player p){
      //Defining the Player interface above
      //Creating a Player Inventory and setting the name  
      Inventory inv = Bukkit.createInventory(p, 18,"§6Inspecting: §e" + p.getName());
      
      //Making and editing properties of custom item
      //You Can Copy paste this part as much items as you want and set each item to a different slot in the inventory
      
      
      //Active Potions Effects
      List<String> lore = new ArrayList<>();
      for(PotionEffect effect : p.getActivePotionEffects()) {
      String name = effect.getType().getName().toLowerCase();
      name = name.substring(0, 1).toUpperCase() + name.substring(1);
      long left = effect.getDuration() * 50L; //Ticks to milliseconds
      Calendar time = Calendar.getInstance();
      time.setTimeInMillis(left);
      String timeLeft = new SimpleDateFormat().format(time);
      String line = name + " " + toRomanNumbers(effect.getAmplifier()) + "(" + timeLeft + ")";
      lore.add(line);
      
      }
      
      //Active Potion Effects Item
      ItemStack potionEffects = new ItemStack(Material.BREWING_STAND_ITEM);
      ItemMeta im = potionEffects.getItemMeta();
      im.setLore(lore);
      im.setDisplayName("§6Active Potion Effects");
      potionEffects.setItemMeta(im);
    
    then under a lot of things you don't have to see, I have:

    Code:
    inv.setItem(8, potionEffects);
    
     
  17. Offline

    DoggyCode™

    Yeh, here:

    [20:18:05 ERROR]: Could not pass event PlayerInteractEntityEvent to StaffModeAle
    xay v1
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:294) ~[Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62) ~[Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:501) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:486) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java
    :1072) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.PacketPlayInUseEntity.a(SourceFile:55) [
    Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.PacketPlayInUseEntity.handle(SourceFile:
    10) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157
    ) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [Craf
    tbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:6
    67) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:2
    60) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:5
    58) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java
    :469) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:6
    28) [Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
    Caused by: java.lang.IllegalArgumentException: Cannot format given Object as a D
    ate
    at java.text.DateFormat.format(Unknown Source) ~[?:1.8.0_45]
    at java.text.Format.format(Unknown Source) ~[?:1.8.0_45]
    at me.pvpdog.staffmodealexay.EventHandlers.InspectPlayer(EventHandlers.j
    ava:120) ~[?:?]
    at me.pvpdog.staffmodealexay.EventHandlers.onPlayerClick(EventHandlers.j
    ava:252) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0
    _45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0
    _45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
    .8.0_45]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_45]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:292) ~[Craftbukkit.jar:git-Bukkit-1.7.9-R0.2-10-ge6cd8c0-b3096jnks]
     
  18. Offline

    DoggyCode™

Thread Status:
Not open for further replies.

Share This Page