Soup Chest Help

Discussion in 'Plugin Development' started by ClockWorksMC, Sep 27, 2014.

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

    ClockWorksMC

    I'm setting up a PvP server, and of course, I need to have a /soup command. I was going on previous threads and I found this one that works, though it is a small chest of soup and I want to (a) be able to make it a large chest and (b) be able to put a custom title at the top of it. Any suggestions? Just in case, here's my code:
    Code:java
    1. package me.clockworks.amc.misc;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.Material;
    5. import org.bukkit.command.Command;
    6. import org.bukkit.command.CommandExecutor;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.inventory.InventoryType;
    10. import org.bukkit.inventory.Inventory;
    11. import org.bukkit.inventory.ItemStack;
    12.  
    13. public class SoupChest implements CommandExecutor {
    14. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    15. Player p = (Player) sender;
    16. if (cmd.getName().equalsIgnoreCase("soup")){
    17. if (args.length == 0){
    18. Inventory inv = Bukkit.createInventory(p, InventoryType.CHEST);
    19. for (int i = 0; i < inv.getSize(); i++){
    20. inv.setItem(i, new ItemStack(Material.MUSHROOM_SOUP, 1));
    21. }
    22. p.openInventory(inv);
    23. }
    24. }
    25. return true;
    26. }
    27. }
     
  2. Offline

    MinezBombz

    ClockWorksMC Instead of having
    Code:java
    1. Inventory inv = Bukkit.createInventory(p, InventoryType.CHEST);
    Have
    Code:java
    1. Inventory inv = Bukkit.createInventory(p, 54, "Soup");
    That makes it a double chest and enables you to name it.
     
  3. Offline

    ClockWorksMC

    Thanks! Now how do I set a delay for 30 seconds? Sorry I'm asking to be spoon fed... :3
     
  4. Offline

    MinezBombz

  5. Offline

    ClockWorksMC

    30 seconds is the delay time for when you can open soup. Like if you open a chest of soup, there's a 30 second delay before you can open another one.
     
  6. Offline

    Googlelover1234

    Code:java
    1. final Player p = (Player) sender;
    2.  
    3. if (cmd.getName().equalsIgnoreCase("soup")) {
    4. if (plugin.soup.contains(p.getName())) {
    5. MessageManager.getInstance().msg(
    6. p,
    7. MessageManager.getInstance().prefix
    8. + "&cYou must wait to use this!");
    9. return true;
    10. }
    11.  
    12. this.soup = Bukkit.getServer().createInventory(p, 36,
    13. ChatColor.RED + "Soup");
    14.  
    15. ItemStack soupi = new ItemStack(Material.MUSHROOM_SOUP);
    16. ItemMeta im = soupi.getItemMeta();
    17. im.setDisplayName(ChatColor.RED + "Soup");
    18. im.setLore(Arrays.asList(ChatColor.AQUA
    19. + "Drink this for 3.5 hearts back!"));
    20. soupi.setItemMeta(im);
    21.  
    22. for (int i = 0; i < soup.getSize(); i++) {
    23. soup.addItem(soupi);
    24. }
    25.  
    26. p.openInventory(soup);
    27. plugin.soup.add(p.getName());
    28. Bukkit.getScheduler().scheduleSyncDelayedTask(plugin,
    29. new Runnable() {
    30.  
    31. @Override
    32. public void run() {
    33. plugin.soup.remove(p.getName());
    34. MessageManager.getInstance().msg(
    35. p,
    36. MessageManager.getInstance().prefix
    37. + "&aYou can now use /soup again!");
    38.  
    39. }
    40.  
    41. }, 20 * 30);
    42. }


    That's just some code in my plugin, so it might have some errors at "MessageManager" and such. But the scheduler is what I'm getting at.

    One second, that kind of is a bad example. I'll show you a more detailed way.

    Code:java
    1. final Player p = (Player) sender;
    2. public ArrayList<String> soup = new ArrayList<String>();
    3. private Inventory soupinv;
    4.  
    5. if (cmd.getName().equalsIgnoreCase("soup")) {
    6. if (soup.contains(p.getName())) {
    7. // send msg saying they must wait
    8. return true; // Returns. If it does not return, that means they do not have to wait, since they haven't used it in the past 30 seconds.
    9. }
    10.  
    11. this.soupinv = Bukkit.getServer().createInventory(p, 36,
    12. ChatColor.RED + "Soup");
    13.  
    14. ItemStack soupi = new ItemStack(Material.MUSHROOM_SOUP);
    15. ItemMeta im = soupi.getItemMeta();
    16. im.setDisplayName(ChatColor.RED + "Soup");
    17. im.setLore(Arrays.asList(ChatColor.AQUA
    18. + "Drink this for 3.5 hearts back!"));
    19. soupi.setItemMeta(im);
    20.  
    21. for (int i = 0; i < soupinv.getSize(); i++) {
    22. soupinv.addItem(soupi);
    23. }
    24.  
    25. p.openInventory(soup);
    26. soup.add(p.getName());
    27. Bukkit.getScheduler().scheduleSyncDelayedTask(plugin,
    28. new Runnable() {
    29.  
    30. @Override
    31. public void run() {
    32. soup.remove(p.getName());
    33. // Send msg saying they can use the /soup command again.
    34. }
    35.  
    36. }, 20 * 30); // 20 ticks * 30 = 30 seconds.
    37. }


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

    ClockWorksMC

    I get this error whenever I try to reload...
    Code:
    9:28:41 PM [SEVERE] Error occurred while enabling ApocalypseMC v1.0 (Is it up to date?)
    9:28:42 PM java.lang.IllegalArgumentException: Plugin already initialized!
    9:28:42 PM    at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:98) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at me.clockworks.amc.misc.SoupChest.<init>(SoupChest.java:16) ~[?:?]
    9:28:42 PM    at me.clockworks.amc.ApocalypseMC.onEnable(ApocalypseMC.java:36) ~[?:?]
    9:28:42 PM    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:316) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:324) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugin(CraftServer.java:446) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.enablePlugins(CraftServer.java:380) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.reload(CraftServer.java:799) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.Bukkit.reload(Bukkit.java:288) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServer.java:701) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchServerCommand(CraftServer.java:688) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at net.minecraft.server.v1_7_R3.DedicatedServer.aB(DedicatedServer.java:296) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:261) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM Caused by: java.lang.IllegalStateException: Initial initialization
    9:28:42 PM    at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:101) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:42 PM    at me.clockworks.amc.ApocalypseMC.<init>(ApocalypseMC.java:21) ~[?:?]
    9:28:42 PM    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_20]
    9:28:42 PM    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_20]
    9:28:42 PM    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_20]
    9:28:42 PM    at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_20]
    9:28:42 PM    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_20]
    9:28:42 PM    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:52) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:43 PM    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:43 PM    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:328) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:43 PM    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:43 PM    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.loadPlugins(CraftServer.java:355) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:43 PM    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.reload(CraftServer.java:797) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.1-10-g8688bd4-b3092jnks]
    9:28:43 PM    ... 10 more
    
     
  8. Offline

    Googlelover1234

    Show me line "21" of your "ApocalypseMC" class please.
     
  9. Offline

    ClockWorksMC

    Code:java
    1. public class ApocalypseMC extends JavaPlugin implements Listener{


    I don't see what's wrong with it doe..
     
  10. Offline

    Googlelover1234

    Would you mind showing all/the /soup command part of the class?
     
  11. Offline

    ClockWorksMC

    here's my full apocalypsemc (main) class:
    Code:java
    1. package me.clockworks.amc;
    2.  
    3. import java.util.ArrayList;
    4.  
    5. import me.clockworks.amc.kits.KitArcher;
    6. import me.clockworks.amc.kits.KitPvP;
    7. import me.clockworks.amc.misc.PlayerVanish;
    8. import me.clockworks.amc.misc.ShowStaff;
    9. import me.clockworks.amc.misc.SoupChest;
    10. import me.clockworks.amc.punishments.PunishBan;
    11. import me.clockworks.amc.punishments.PunishKick;
    12. import me.clockworks.amc.teleports.TeleportBarFight;
    13. import me.clockworks.amc.teleports.TeleportHorseRace;
    14. import me.clockworks.amc.teleports.TeleportPotPvP;
    15. import me.clockworks.amc.teleports.TeleportPvPArena;
    16. import me.clockworks.amc.teleports.TeleportSpawn;
    17.  
    18. import org.bukkit.event.Listener;
    19. import org.bukkit.plugin.java.JavaPlugin;
    20.  
    21. public class ApocalypseMC extends JavaPlugin implements Listener{
    22.  
    23. public static ArrayList<String> KitUsed = new ArrayList<String>();
    24.  
    25. @Override
    26. public void onEnable() {
    27.  
    28. getCommand("archer").setExecutor(new KitArcher());
    29. getCommand("ban").setExecutor(new PunishBan());
    30. getCommand("barfight").setExecutor(new TeleportBarFight());
    31. getCommand("horserace").setExecutor(new TeleportHorseRace());
    32. getCommand("kick").setExecutor(new PunishKick());
    33. getCommand("potpvp").setExecutor(new TeleportPotPvP());
    34. getCommand("pvp").setExecutor(new KitPvP());
    35. getCommand("pvparena").setExecutor(new TeleportPvPArena());
    36. getCommand("soup").setExecutor(new SoupChest());
    37. getCommand("spawn").setExecutor(new TeleportSpawn());
    38. getCommand("staff").setExecutor(new ShowStaff());
    39. getCommand("vanish").setExecutor(new PlayerVanish());
    40.  
    41. getServer().getPluginManager().registerEvents(this, this);
    42.  
    43. }
    44.  
    45. public void onDisable() {
    46.  
    47. }
    48.  
    49. }

    And here's my soup class:
    Code:java
    1. package me.clockworks.amc.misc;
    2.  
    3. import java.util.ArrayList;
    4.  
    5. import org.bukkit.Bukkit;
    6. import org.bukkit.ChatColor;
    7. import org.bukkit.Material;
    8. import org.bukkit.Sound;
    9. import org.bukkit.command.Command;
    10. import org.bukkit.command.CommandExecutor;
    11. import org.bukkit.command.CommandSender;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.inventory.Inventory;
    14. import org.bukkit.inventory.ItemStack;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16. public class SoupChest extends JavaPlugin implements CommandExecutor {
    17. public ArrayList<String> soup = new ArrayList<String>();
    18. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    19. Player p = (Player) sender;
    20. if (cmd.getName().equalsIgnoreCase("soup")){
    21. if (args.length == 0){
    22. Inventory i = Bukkit.createInventory(p, 36, ChatColor.GOLD + "Soup");
    23. for (int n = 0; n < i.getSize(); n++){
    24. i.setItem(n, new ItemStack(Material.MUSHROOM_SOUP, 1));
    25. p.playSound(p.getLocation(), Sound.LEVEL_UP, 2, 1);
    26. p.openInventory(i);
    27. soup.add(p.getName());
    28. Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
    29. @Override
    30. public void run(){
    31. soup.remove(p.getName());
    32. }
    33. }, 20 * 30);
    34. }
    35. }
    36. }
    37. return true;
    38. }
    39. }
     
  12. Offline

    Googlelover1234

    How are you extending JavaPlugin in both classes o.o
     
  13. Offline

    ClockWorksMC

    wat should I do? :p
     
  14. Offline

    Gater12

    ClockWorksMC
    Only 1 of your class in your plugin should extend JavaPlugin and that is your main class.
     
  15. Offline

    ClockWorksMC

    what should I do with the soup class? whenever I try to remove javaplugin, it just has an error on "scheduleSyncDelayedTask"!
     
  16. Offline

    Gater12

    ClockWorksMC
    Pass in the instance of your main class through a constructor.

    Find more about constructors here.
     
  17. Offline

    ClockWorksMC

    Just fyi the quick fixes include:
    Cast argument 'this' to 'Plugin'
    Change to scheduleAsyncDelayedTask
    let 'SoupChest' implement 'Plugin'

    And I've spent a lot of time on other threads that I've created to no avail, please simply give me the line of code that I should put in my main class. :(

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

    Gater12

    ClockWorksMC
    The Constructor concept is best explained here as mentioned before. The tutorial also has examples.
     
  19. Offline

    d3v1n302418

    ClockWorksMC To put it in a nice way. You probably have no idea what your doing, considering this line...
    Please learn the Bukkit API before learning to create complicated kitpvp plugins. You should definately know the difference between a main class and a subclass.

    Now, in order to fix it, like Gater12 said, just create an instance of your main class via a constructor. If you don't know what a constructor is.. go learn java.
     
  20. Offline

    Skionz

    d3v1n302418 Completely off topic but I love your signature xD
     
    d3v1n302418 likes this.
  21. Offline

    d3v1n302418

    Skionz Thanks ;) I just tire of reading through threads of "sry i dont get it, gimme example code(a.k.a. write this plugin for me)". I mean, if you want to actually learn how to develop Bukkit plugins, you gotta think. I see you posting a lot, and thankfully you assist in stopping spoon feeding, so thank you.
     
  22. Offline

    Skionz

    d3v1n302418 I actually had someone offer to pay me $5 to spoonfeed lol
     
  23. Offline

    d3v1n302418

    Skionz No way... lol what exactly was so hard they needed to be spoon fed THAT badly? xD
     
  24. Offline

    ClockWorksMC

    Come on... please? I am a total newbie to this, but I really need this code! someone just put it in for me!
     
  25. Offline

    Skionz

    ClockWorksMC Use a scheduler to add a delay. 30 seconds would be 600 ticks.
    d3v1n302418 He wanted me to send him the code for a claim chunk plugin. He just wanted to part where you save the location to the config.
     
  26. Offline

    d3v1n302418

    Skionz But that's SO easy. I was expecting something like nms or packetz. :p
     
    Skionz likes this.
Thread Status:
Not open for further replies.

Share This Page