Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Am still getting this error when running the program on BlueJ . package org.bukk

ID: 3855045 • Letter: A

Question

Am still getting this error when running the program on BlueJ .   package org.bukkit.configuration.file does not exist

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import org.bukkit.configuration.file.FileConfiguration;

public class LotteryConfig
{
final private Lottery plugin;
private FileConfiguration config;
private double cost;
private double hours;
private long nextexec;
private boolean useiConomy;
private int material;
private double extraInPot;
private boolean broadcastBuying;
private int broadcastBuyingTime;
private boolean welcomeMessage;
private double netPayout;
private boolean clearExtraInPot;
private int maxTicketsEachUser;
private int ticketsAvailable;
private double jackpot;
private String lastwinner;
private double lastwinneramount;
private boolean buyingExtendDeadline;
private int buyingExtendRemaining;
private double buyingExtendBase;
private double buyingExtendMultiplier;
private String taxTarget;
private HashMap<String, List<String>> messages;

public LotteryConfig(final Lottery plugin)
{
this.plugin = plugin;
this.config = plugin.getConfig();
}


public void loadConfig()
{
plugin.reloadConfig();
config = plugin.getConfig();
debugMsg("Loading Lottery configuration");
hours = config.getDouble("config.hours", 24);
useiConomy = config.getBoolean("config.useiConomy", true);
material = config.getInt("config.material", 266);
broadcastBuying = config.getBoolean("config.broadcastBuying", true);
broadcastBuyingTime = config.getInt("config.broadcastBuyingTime", 120);
welcomeMessage = config.getBoolean("config.welcomeMessage", true);
extraInPot = config.getDouble("config.extraInPot", 0);
clearExtraInPot = config.getBoolean("config.clearExtraInPot", true);
netPayout = config.getDouble("config.netPayout", 100);
maxTicketsEachUser = config.getInt("config.maxTicketsEachUser", 1);
ticketsAvailable = config.getInt("config.numberOfTicketsAvailable", 0);
jackpot = config.getDouble("config.jackpot", 0);
nextexec = config.getLong("config.nextexec");
cost = Etc.formatAmount(config.getDouble("config.cost", 5), useiConomy);
lastwinner = config.getString("config.lastwinner", "");
lastwinneramount = config.getDouble("config.lastwinneramount", 0);
buyingExtendDeadline = config.getBoolean("config.buyingExtend.enabled", true);
buyingExtendRemaining = config.getInt("config.buyingExtend.secondsRemaining", 30);
buyingExtendBase = config.getDouble("config.buyingExtend.extendBase", 15);
buyingExtendMultiplier = config.getDouble("config.buyingExtend.extendMultiplier", 1.5);
taxTarget = config.getString("config.taxTarget", "");
// Load messages?
loadCustomMessages();
// Then lets save this stuff :)
plugin.saveConfig();
}
public void set(final String path, final Object value)
{
config.set(path, value);
plugin.saveConfig();
}
public void loadCustomMessages()
{
messages = new HashMap<String, List<String>>();
messages.put("prefix", formatCustomMessage("message.prefix", "&6[LOTTERY]&r"));
messages.put("Welcome", formatCustomMessage("message.Welcome", "%prefix% &fDraw in: &c%drawLong%"));
messages.put("ErrorPlugin", formatCustomMessage("message.ErrorPlugin", "%prefix% Sorry, we haven't found a money plugin yet.."));
messages.put("ErrorAccess", formatCustomMessage("message.ErrorAccess", "%prefix% You don't have access to that command."));
messages.put("ErrorCommand", formatCustomMessage("message.ErrorCommand", "%prefix% Hey, I don't recognize that command!"));
messages.put("ErrorConsole", formatCustomMessage("message.ErrorConsole", "%prefix% You're the console, I can't sell you tickets."));
messages.put("ErrorConsole2", formatCustomMessage("message.ErrorConsole2", "%prefix% You're the console, you don't have an inventory."));
messages.put("ErrorConsole3", formatCustomMessage("message.ErrorConsole3", "%prefix% You're the console, you can't change that."));
messages.put("ErrorNoAvailable", formatCustomMessage("message.ErrorNoAvailable", "%prefix% There are no more tickets available"));
messages.put("ErrorAtMax", formatCustomMessage("message.ErrorAtMax", "%prefix% You already have the maximum of %0% %1% already."));
messages.put("ErrorNotAfford", formatCustomMessage("message.ErrorNotAfford", "%prefix% You can't afford a ticket"));
messages.put("ErrorNumber", formatCustomMessage("message.ErrorNumber", "%prefix% Provide a number greater than zero (decimals accepted)"));
messages.put("ErrorClaim", formatCustomMessage("message.ErrorClaim", "%prefix% You did not have anything unclaimed."));
messages.put("TicketCommand", formatCustomMessage("message.TicketCommand", "%prefix% Buy a ticket for &c%cost% &rwith &c/lottery buy"));
messages.put("PotAmount", formatCustomMessage("message.PotAmount", "%prefix% There is currently &a%pot% &rin the pot."));
messages.put("YourTickets", formatCustomMessage("message.YourTickets", "%prefix% You have &c%0% &r%1%"));
messages.put("TicketRemaining", formatCustomMessage("message.TimeRemaining", "%prefix% There is &c%0% &r%1% left."));
messages.put("CommandHelp", formatCustomMessage("message.CommandHelp", "%prefix% &c/lottery help&r for other commands"));
messages.put("LastWinner", formatCustomMessage("message.LastWinner", "%prefix% Last winner: %0% %1%"));
messages.put("CheckClaim", formatCustomMessage("message.CheckClaim", "%prefix% Check if you have won with &c/lottery claim"));
messages.put("BoughtTicket", formatCustomMessage("message.BoughtTicket", "%prefix% You got &c%0% &r%1% for &c%2%"));
messages.put("BoughtTickets", formatCustomMessage("message.BoughtTickets", "%prefix% You now have &c%0% &r%1%"));
messages.put("BoughtAnnounceDraw", formatCustomMessage("message.BoughtAnnounceDraw", "%prefix% &r%0% &rjust bought %1% %2%! Draw in %3%"));
messages.put("BoughtAnnounce", formatCustomMessage("message.BoughtAnnounce", "%prefix% &r%0% &rjust bought %1% %2%!"));
messages.put("DrawIn", formatCustomMessage("message.DrawIn", "%prefix% Draw in: &c%0%"));
messages.put("DrawNow", formatCustomMessage("message.DrawNow", "%prefix% Lottery will be drawn at once."));
messages.put("DrawSoon", formatCustomMessage("message.DrawSoon", "Soon"));
messages.put("DrawSoonLong", formatCustomMessage("message.DrawSoonLong", "Draw will occur soon!"));
messages.put("PlayerClaim", formatCustomMessage("message.PlayerClaim", "%prefix You just claimed %0%"));
messages.put("MessagesEnabled", formatCustomMessage("message.MessagesEnabled", "%prefix% You will now receive Lottery broadcast messages."));
messages.put("MessagesDisabled", formatCustomMessage("message.MessagesDisabled", "%prefix% You will no longer receive Lottery broadcast messages."));
messages.put("NoWinnerTickets", formatCustomMessage("message.NoWinnerTickets", "%prefix% No tickets sold this round. That's a shame."));
messages.put(
"NoWinnerRollover", formatCustomMessage("message.NoWinnerRollover", "%prefix% No winner, we have a rollover! &a%0% &rwent to jackpot!"));
messages.put("WinnerCongrat", formatCustomMessage("message.WinnerCongrat", "%prefix% Congratulations go to %0% &rfor winning &c%1%&r with &c%2%&r %3%."));
messages.put("WinnerCongratClaim", formatCustomMessage("message.WinnerCongratClaim", "%prefix% Use &c/lottery claim &rto claim the winnings."));
messages.put("WinnerSummary", formatCustomMessage("message.WinnerSummary", "%prefix% There was a total of %0% %1% buying %2% %3%"));
messages.put("AddToPot", formatCustomMessage("message.AddToPot", "%prefix% Added &a%0% &rto pot. Extra total is &a%1%"));
messages.put("ConfigCost", formatCustomMessage("message.ConfigCost", "%prefix% Cost changed to &c%0%"));
messages.put("ConfigHours", formatCustomMessage("message.ConfigHours", "%prefix% Hours changed to &c%0%"));
messages.put("ConfigMax", formatCustomMessage("message.ConfigMax", "%prefix% Max amount of tickets changed to &c%0%"));
messages.put("ConfigReload", formatCustomMessage("message.ConfigReload", "%prefix% Config reloaded"));
messages.put(
"Help", formatCustomMessage(
"message.Help",
"%prefix% Help commands%newline%%prefix% &c/lottery&r : Basic lottery info.%newline%%prefix% &c/lottery buy <n>&r : Buy ticket(s)." +
"%newline%%prefix% &c/lottery claim&r : Claim outstanding wins.%newline%%prefix% &c/lottery winners&r : Check last winners."));
messages.put(
"HelpAdmin", formatCustomMessage(
"message.HelpAdmin",
"%prefix% &1/lottery draw&r : Draw lottery.%newline%%prefix% &1/lottery addtopot&r : Add number to pot.%newline%%prefix% &1/lottery " +
"config&r : Edit the config."));
messages.put("HelpPot", formatCustomMessage("message.HelpPot", "%prefix% /lottery addtopot <number>"));
messages.put(
"HelpConfig", formatCustomMessage(
"message.HelpConfig",
"%prefix% Edit config commands%newline%%prefix% &c/lottery config cost <i>%newline%%prefix% &c/lottery config hours <i>%newline%%prefix% " +
"&c/lottery config maxTicketsEachUser <i>%newline%%prefix% &c/lottery config reload"));
messages.put("ticket", formatCustomMessage("message.Ticket", "ticket"));
messages.put("tickets", formatCustomMessage("message.Tickets", "tickets"));
messages.put("player", formatCustomMessage("message.player", "player"));
messages.put("players", formatCustomMessage("message.players", "players"));
messages.put("day", formatCustomMessage("message.day", "day"));
messages.put("days", formatCustomMessage("message.days", "days"));
messages.put("hour", formatCustomMessage("message.hour", "hour"));
messages.put("hours", formatCustomMessage("message.hours", "hours"));
messages.put("minute", formatCustomMessage("message.minute", "minute"));
messages.put("minutes", formatCustomMessage("message.minutes", "minutes"));
messages.put("second", formatCustomMessage("message.second", "second"));
messages.put("seconds", formatCustomMessage("message.seconds", "seconds"));
}
public String getPlural(String word, int amount){
String tlkey = "";
if (word.equalsIgnoreCase("ticket"))
{
tlkey = amount == 1 ? "ticket" : "tickets";
}
if (word.equalsIgnoreCase("player"))
{
tlkey = amount == 1 ? "player" : "players";
}
if (word.equalsIgnoreCase("day"))
{
tlkey = amount == 1 ? "day" : "days";
}
if (word.equalsIgnoreCase("hour"))
{
tlkey = amount == 1 ? "hour" : "hours";
}
if (word.equalsIgnoreCase("minute"))
{
tlkey = amount == 1 ? "minute" : "minutes";
}
if (word.equalsIgnoreCase("second"))
{
tlkey = amount == 1 ? "second" : "seconds";
}
String pluralTl = "";
try {
for (String message : getMessage(tlkey)){
pluralTl = message;
}
return pluralTl;
} catch (Exception e) {
e.printStackTrace();
}
return pluralTl;
}
public List<String> getMessage(final String topic) throws Exception
{
if (!messages.containsKey(topic))
{
throw new Exception("Invalid Translation key");
}
return Collections.unmodifiableList(messages.get(topic));
}
public List<String> formatCustomMessage(final String node, final String def)
{
final List<String> fList = new ArrayList<String>();
// Lets find a msg.
final String msg = config.getString(node, def);
config.set(node, msg);
// Lets put this in a arrayList in case we want more than one line.
Collections.addAll(fList, msg.split("%newline%"));
return fList;
}
// Enable some debugging?
public void debugMsg(final String msg)
{
if (config.getBoolean("config.debug") && msg != null)
{
plugin.getLogger().log(Level.INFO, msg);
}
}
public double getCost()
{
return cost;
}
public void setCost(final double cost)
{
this.cost = cost;
set("config.cost", cost);
}
public double getHours()
{
return hours;
}
public void setHours(final double hours)
{
this.hours = hours;
set("config.hours", hours);
}
public long getNextexec()
{
return nextexec;
}
public void setNextexec(final long nextexec)
{
this.nextexec = nextexec;
set("config.nextexec", nextexec);
}
public boolean useiConomy()
{
return useiConomy;
}
public int getMaterial()
{
return material;
}
public double getExtraInPot()
{
return extraInPot;
}
public void setExtraInPot(final double extraInPot)
{
this.extraInPot = extraInPot;
set("config.extraInPot", extraInPot);
}
public void addExtraInPot(final double extra)
{
extraInPot += extra;
setExtraInPot(extraInPot);
}
public boolean useBroadcastBuying()
{
return broadcastBuying;
}
public int getBroadcastBuyingTime()
{
return broadcastBuyingTime;
}
public boolean useWelcomeMessage()
{
return welcomeMessage;
}
public double getNetPayout()
{
return netPayout;
}
public void setNetPayout(final double netPayout)
{
this.netPayout = netPayout;
set("config.netPayout", netPayout);
}
public boolean clearExtraInPot()
{
return clearExtraInPot;
}
public int getMaxTicketsEachUser()
{
return maxTicketsEachUser;
}
public void setMaxTicketsEachUser(final int maxTicketsEachUser)
{
this.maxTicketsEachUser = maxTicketsEachUser;
set("config.maxTicketsEachUser", maxTicketsEachUser);
}
public int getTicketsAvailable()
{
return ticketsAvailable;
}
public double getJackpot()
{
return jackpot;
}
public void setJackpot(final double jackpot)
{
this.jackpot = jackpot;
set("config.jackpot", jackpot);
}
public String getLastwinner()
{
return lastwinner;
}
public void setLastwinner(final String lastwinner)
{
this.lastwinner = lastwinner;
set("config.lastwinner", lastwinner);
}
public double getLastwinneramount()
{
return lastwinneramount;
}
public void setLastwinneramount(final double lastwinneramount)
{
this.lastwinneramount = lastwinneramount;
set("config.lastwinneramount", lastwinneramount);
}
public boolean isBuyingExtendDeadline()
{
return buyingExtendDeadline;
}
public int getBuyingExtendRemaining()
{
return buyingExtendRemaining;
}
public double getBuyingExtendBase()
{
return buyingExtendBase;
}
public double getBuyingExtendMultiplier()
{
return buyingExtendMultiplier;
}
public String getTaxTarget()
{
return taxTarget;
}
public String formatCurrency(double amount)
{
return plugin.Method.format(amount);
}
}

Explanation / Answer

There is probably nothing wrong with your code. All you need to do is tell blueJ where your package org.bukkit.configuration.file is present. So to use custom library in blueJ we can

The first way is via the "Preferences" dialog. Open the "Preferences" dialogue and select the "Libraries" tab. Then add the location where your classes are as a library path. Restart BlueJ - done. The selected libraries will now be available in all projects that you open.

The second way is via the "userlib" directory, found at <bluej-dir>/lib/userlib (that is, inside the "lib" folder which is itself found inside the folder in which BlueJ was installed). Any libraries placed in this directory will be loaded by BlueJ. This is intended to be a "system wide" method to use custom class libraries as it will apply to all users using the same installed copy of BlueJ, so it can be used for instance in a lab environment to make the libraries available to all students. These libraries must be .zip or .jar archives. Libraries loaded via this second method are listed in the "Libraries" tab of the "Preferences" dialog also, but libraries cannot be added to or removed from the userlib directory via the dialog. These libraries will be available in all projects.

The third way is via the "+libs" directory. If a directory called "+libs" is found inside a project when it is opened by BlueJ, then all the class libraries inside it will be on the classpath (and therefore available for use in the project). This is a convenient way to allow libraries to be loaded on a project-by-project basis. This comes in handy if you want to distribute a project with any libraries that might be needed for it to function. You can simply zip up the project directory and distribute the project.

It is adviseable to usse step 1 as a generic method. It is upto you to find the library and download, scince Chegg does not allow posting links, I cannot provide you with the jar library. Let me know if you need more help

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote