From 3db6d38638df701f94f0291967cb938e4221a34e Mon Sep 17 00:00:00 2001 From: A5H73Y Date: Wed, 1 Apr 2020 21:06:56 +0100 Subject: [PATCH] Code tidy up Renamed config files --- README.md | 1 + .../a5h73y/commands/CarzAutoTabCompleter.java | 1 - .../github/a5h73y/commands/CarzCommands.java | 6 +- .../a5h73y/commands/CarzConsoleCommands.java | 4 +- .../github/a5h73y/configuration/Settings.java | 31 ++++---- .../a5h73y/controllers/CarController.java | 6 +- .../a5h73y/controllers/FuelController.java | 7 +- ...pe.java => CreateCarTypeConversation.java} | 4 +- .../java/io/github/a5h73y/enums/Commands.java | 8 +- .../a5h73y/listeners/PlayerListener.java | 2 +- .../github/a5h73y/listeners/SignListener.java | 49 ++++++++---- .../a5h73y/listeners/VehicleListener.java | 6 +- .../io/github/a5h73y/model/CarDetails.java | 3 +- .../io/github/a5h73y/plugin/EconomyAPI.java | 19 +++-- .../github/a5h73y/plugin/PluginWrapper.java | 2 +- .../github/a5h73y/purchases/CarPurchase.java | 6 +- .../github/a5h73y/purchases/Purchasable.java | 31 ++++++-- .../a5h73y/purchases/RefuelPurchase.java | 10 ++- .../a5h73y/purchases/UpgradePurchase.java | 10 ++- .../io/github/a5h73y/utility/CarUtils.java | 1 - .../a5h73y/utility/ValidationUtils.java | 77 +++++++++++++++---- 21 files changed, 187 insertions(+), 97 deletions(-) rename src/main/java/io/github/a5h73y/conversation/{CreateCarType.java => CreateCarTypeConversation.java} (98%) diff --git a/README.md b/README.md index 9292948..5266f07 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@

Carz Logo

+[![discord server](https://img.shields.io/discord/328154925949517824.svg)](https://discord.gg/h9d2fSd) [![travis-ci](https://travis-ci.org/A5H73Y/Carz.svg?branch=master)](https://travis-ci.org/A5H73Y/Carz/branches) [![tutorials](https://img.shields.io/badge/tutorials-github-brightgreen.svg)](https://a5h73y.github.io/Carz/) [![bStats](https://img.shields.io/badge/statistics-bstats-brightgreen.svg)](https://bstats.org/plugin/bukkit/Carz) diff --git a/src/main/java/io/github/a5h73y/commands/CarzAutoTabCompleter.java b/src/main/java/io/github/a5h73y/commands/CarzAutoTabCompleter.java index 4e32770..aa80929 100644 --- a/src/main/java/io/github/a5h73y/commands/CarzAutoTabCompleter.java +++ b/src/main/java/io/github/a5h73y/commands/CarzAutoTabCompleter.java @@ -56,7 +56,6 @@ public List onTabComplete(CommandSender sender, Command command, String allowedCommands.add("addCB"); } - for (String allowedCommand : allowedCommands) { if (allowedCommand.startsWith(args[args.length - 1])) { filteredCommands.add(allowedCommand); diff --git a/src/main/java/io/github/a5h73y/commands/CarzCommands.java b/src/main/java/io/github/a5h73y/commands/CarzCommands.java index 86b3ded..e655b07 100644 --- a/src/main/java/io/github/a5h73y/commands/CarzCommands.java +++ b/src/main/java/io/github/a5h73y/commands/CarzCommands.java @@ -1,7 +1,7 @@ package io.github.a5h73y.commands; import io.github.a5h73y.Carz; -import io.github.a5h73y.conversation.CreateCarType; +import io.github.a5h73y.conversation.CreateCarTypeConversation; import io.github.a5h73y.enums.Commands; import io.github.a5h73y.enums.Permissions; import io.github.a5h73y.model.Car; @@ -77,7 +77,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return false; } - if (!ValidationUtils.canPurchaseCar(player, args)) { + if (!ValidationUtils.canPurchaseCar(player, args.length > 1 ? args[1] : DEFAULT_CAR)) { return false; } @@ -132,7 +132,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return false; } - new CreateCarType(player).begin(); + new CreateCarTypeConversation(player).begin(); break; case "cartypes": diff --git a/src/main/java/io/github/a5h73y/commands/CarzConsoleCommands.java b/src/main/java/io/github/a5h73y/commands/CarzConsoleCommands.java index cf9bc6f..dc392e6 100644 --- a/src/main/java/io/github/a5h73y/commands/CarzConsoleCommands.java +++ b/src/main/java/io/github/a5h73y/commands/CarzConsoleCommands.java @@ -1,7 +1,7 @@ package io.github.a5h73y.commands; import io.github.a5h73y.Carz; -import io.github.a5h73y.conversation.CreateCarType; +import io.github.a5h73y.conversation.CreateCarTypeConversation; import io.github.a5h73y.enums.Commands; import io.github.a5h73y.other.AbstractPluginReceiver; import io.github.a5h73y.other.PluginUtils; @@ -77,7 +77,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St break; case "createtype": - new CreateCarType((ConsoleCommandSender) sender).begin(); + new CreateCarTypeConversation((ConsoleCommandSender) sender).begin(); break; case "cmds": diff --git a/src/main/java/io/github/a5h73y/configuration/Settings.java b/src/main/java/io/github/a5h73y/configuration/Settings.java index afa65bc..9931c6a 100644 --- a/src/main/java/io/github/a5h73y/configuration/Settings.java +++ b/src/main/java/io/github/a5h73y/configuration/Settings.java @@ -51,24 +51,33 @@ private void setupConfig() { carz.getConfig().addDefault("Key.Glow", true); carz.getConfig().addDefault("Key.GiveOnCarEnter", true); carz.getConfig().addDefault("Key.RequireCarzKey", true); + carz.getConfig().addDefault("Key.ManualLocking.Enabled", true); + carz.getConfig().addDefault("Key.ManualLocking.ShiftAction", true); - carz.getConfig().addDefault("Speed.Start", 50.0); carz.getConfig().addDefault("Speed.Upgrade.Increment", 25.0); carz.getConfig().addDefault("Speed.Upgrade.Max", 200.0); - carz.getConfig().addDefault("Command.Spawn", true); - carz.getConfig().addDefault("Command.Purchase", true); - carz.getConfig().addDefault("Command.Refuel", true); - carz.getConfig().addDefault("Command.Upgrade", true); + carz.getConfig().addDefault("CommandEnabled.Spawn", true); + carz.getConfig().addDefault("CommandEnabled.Purchase", true); + carz.getConfig().addDefault("CommandEnabled.Refuel", true); + carz.getConfig().addDefault("CommandEnabled.Upgrade", true); - carz.getConfig().addDefault("Fuel.Enable", true); + carz.getConfig().addDefault("Fuel.Enabled", true); carz.getConfig().addDefault("Fuel.ScaleCost", true); carz.getConfig().addDefault("Fuel.StartAmount", 3000.0); carz.getConfig().addDefault("Fuel.GaugeScale", 40); + carz.getConfig().addDefault("ClimbBlocks.AllBlocks", true); carz.getConfig().addDefault("ClimbBlocks.Materials", new String[]{"GOLD_BLOCK"}); carz.getConfig().addDefault("ClimbBlocks.Strength", 0.05D); + carz.getConfig().addDefault("Vault.Enabled", true); + carz.getConfig().addDefault("Vault.ConfirmPurchases", true); + carz.getConfig().addDefault("Vault.Cost.Upgrade", 8.0); + carz.getConfig().addDefault("Vault.Cost.Refuel", 2.0); + + carz.getConfig().addDefault("BountifulAPI.Enabled", true); + carz.getConfig().addDefault("Other.ControlCarsWhileFalling", true); carz.getConfig().addDefault("Other.DamageEntities.Enabled", true); carz.getConfig().addDefault("Other.DamageEntities.Damage", 20.0); @@ -80,12 +89,6 @@ private void setupConfig() { carz.getConfig().addDefault("Other.UseEffects", true); carz.getConfig().addDefault("Other.UsePermissions", true); - carz.getConfig().addDefault("Other.BountifulAPI.Enabled", true); - carz.getConfig().addDefault("Other.Vault.Enabled", true); - carz.getConfig().addDefault("Other.Vault.ConfirmPurchases", true); - carz.getConfig().addDefault("Other.Vault.Cost.Upgrade", 8.0); - carz.getConfig().addDefault("Other.Vault.Cost.Refuel", 2.0); - carz.getConfig().addDefault("CarTypes.default.StartMaxSpeed", 60.0); carz.getConfig().addDefault("CarTypes.default.MaxUpgradeSpeed", 200.0); carz.getConfig().addDefault("CarTypes.default.Acceleration", 5.0); @@ -205,10 +208,6 @@ public boolean isFuelScaleCost() { return carz.getConfig().getBoolean("Fuel.ScaleCost"); } - public double getStartSpeed() { - return carz.getConfig().getDouble("Speed.Start"); - } - public double getUpgradeIncrement() { return carz.getConfig().getDouble("Speed.Upgrade.Increment"); } diff --git a/src/main/java/io/github/a5h73y/controllers/CarController.java b/src/main/java/io/github/a5h73y/controllers/CarController.java index 4126c6c..e19c815 100644 --- a/src/main/java/io/github/a5h73y/controllers/CarController.java +++ b/src/main/java/io/github/a5h73y/controllers/CarController.java @@ -212,13 +212,13 @@ private void upgradeCarSpeed(Vehicle vehicle) { Car car = getCar(vehicle.getEntityId()); double currentMax = car.getMaxSpeed(); double maxSpeed = car.getCarDetails().getMaxUpgradeSpeed(); - double upgradeBy = carz.getSettings().getUpgradeIncrement(); + double upgradeAmount = carz.getSettings().getUpgradeIncrement(); - if ((currentMax + upgradeBy) > maxSpeed) {//&& !event.getPlayer().hasPermission("Carz.Admin")) + if ((currentMax + upgradeAmount) > maxSpeed) {//&& !event.getPlayer().hasPermission("Carz.Admin")) return; } - car.setMaxSpeed(currentMax + upgradeBy); + car.setMaxSpeed(currentMax + upgradeAmount); carz.getItemMetaUtils().setValue(VEHICLE_SPEED, vehicle, String.valueOf(car.getMaxSpeed())); } diff --git a/src/main/java/io/github/a5h73y/controllers/FuelController.java b/src/main/java/io/github/a5h73y/controllers/FuelController.java index 569debb..6cc0bf1 100644 --- a/src/main/java/io/github/a5h73y/controllers/FuelController.java +++ b/src/main/java/io/github/a5h73y/controllers/FuelController.java @@ -23,7 +23,7 @@ public class FuelController extends AbstractPluginReceiver { */ public FuelController(final Carz carz) { super(carz); - USE_FUEL = carz.getConfig().getBoolean("Fuel.Enable"); + USE_FUEL = carz.getConfig().getBoolean("Fuel.Enabled"); MAX_FUEL = carz.getConfig().getDouble("Fuel.StartAmount"); GAUGE_SCALE = carz.getConfig().getInt("Fuel.GaugeScale"); } @@ -62,11 +62,6 @@ public void refuel(Car car) { car.setCurrentFuel(MAX_FUEL); } - public void refuel(Car car, Player player) { - refuel(car); - TranslationUtils.sendTranslation("Car.Refuel", player); - } - /** * Build a formatted string of the fuel gauge, to resemble how much fuel is remaining * @param car diff --git a/src/main/java/io/github/a5h73y/conversation/CreateCarType.java b/src/main/java/io/github/a5h73y/conversation/CreateCarTypeConversation.java similarity index 98% rename from src/main/java/io/github/a5h73y/conversation/CreateCarType.java rename to src/main/java/io/github/a5h73y/conversation/CreateCarTypeConversation.java index 63451d7..d061232 100644 --- a/src/main/java/io/github/a5h73y/conversation/CreateCarType.java +++ b/src/main/java/io/github/a5h73y/conversation/CreateCarTypeConversation.java @@ -17,7 +17,7 @@ import org.bukkit.conversations.Prompt; import org.bukkit.conversations.StringPrompt; -public class CreateCarType extends CarzConversation { +public class CreateCarTypeConversation extends CarzConversation { private static final String SESSION_CAR_TYPE = "carType"; @@ -32,7 +32,7 @@ public class CreateCarType extends CarzConversation { new CarDetailQuestion("Fill Material", "FillMaterial", "AIR", STRING_PATTERN) ); - public CreateCarType(Conversable player) { + public CreateCarTypeConversation(Conversable player) { super(player); } diff --git a/src/main/java/io/github/a5h73y/enums/Commands.java b/src/main/java/io/github/a5h73y/enums/Commands.java index 52ee264..ab3ec8f 100644 --- a/src/main/java/io/github/a5h73y/enums/Commands.java +++ b/src/main/java/io/github/a5h73y/enums/Commands.java @@ -6,10 +6,10 @@ */ public enum Commands { - SPAWN("Command.Spawn"), - PURCHASE("Command.Purchase"), - REFUEL("Command.Refuel"), - UPGRADE("Command.Upgrade"); + SPAWN("CommandEnabled.Spawn"), + PURCHASE("CommandEnabled.Purchase"), + REFUEL("CommandEnabled.Refuel"), + UPGRADE("CommandEnabled.Upgrade"); private final String configPath; diff --git a/src/main/java/io/github/a5h73y/listeners/PlayerListener.java b/src/main/java/io/github/a5h73y/listeners/PlayerListener.java index fe16518..5ee9b5a 100644 --- a/src/main/java/io/github/a5h73y/listeners/PlayerListener.java +++ b/src/main/java/io/github/a5h73y/listeners/PlayerListener.java @@ -2,9 +2,9 @@ import io.github.a5h73y.Carz; import io.github.a5h73y.enums.Permissions; +import io.github.a5h73y.other.AbstractPluginReceiver; import io.github.a5h73y.other.DelayTasks; import io.github.a5h73y.other.XMaterial; -import io.github.a5h73y.other.AbstractPluginReceiver; import io.github.a5h73y.utility.PermissionUtils; import io.github.a5h73y.utility.PlayerUtils; import io.github.a5h73y.utility.TranslationUtils; diff --git a/src/main/java/io/github/a5h73y/listeners/SignListener.java b/src/main/java/io/github/a5h73y/listeners/SignListener.java index 85b8b8c..3b55f0b 100644 --- a/src/main/java/io/github/a5h73y/listeners/SignListener.java +++ b/src/main/java/io/github/a5h73y/listeners/SignListener.java @@ -21,6 +21,8 @@ import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.player.PlayerInteractEvent; +import static io.github.a5h73y.controllers.CarController.DEFAULT_CAR; + public class SignListener extends AbstractPluginReceiver implements Listener { public SignListener(Carz carz) { @@ -44,31 +46,43 @@ public void onSignCreate(SignChangeEvent event) { Player player = event.getPlayer(); if (!PermissionUtils.hasPermission(player, Permissions.CREATE_SIGN)) { - event.getBlock().breakNaturally(); - event.setCancelled(true); + breakSignAndCancelEvent(event); return; } // if it's a valid command, break, otherwise it's unknown, so cancel switch (event.getLine(1).toLowerCase()) { - case "refuel": case "purchase": + if (ValidationUtils.isStringValid(event.getLine(2)) + && !carz.getCarController().doesCarTypeExist(event.getLine(2))) { + player.sendMessage(Carz.getPrefix() + "That doesn't exist."); + breakSignAndCancelEvent(event); + return; + } + case "refuel": case "upgrade": break; default: TranslationUtils.sendTranslation("Error.UnknownSignCommand", player); player.sendMessage(Carz.getPrefix() + "Valid signs: refuel, purchase, upgrade"); - event.getBlock().breakNaturally(); - event.setCancelled(true); + breakSignAndCancelEvent(event); + return; + } + + if (ValidationUtils.isStringValid(event.getLine(3))) { + if (ValidationUtils.isDouble(event.getLine(3))) { + event.setLine(3, ChatColor.RED + event.getLine(3)); + + } else { + player.sendMessage(Carz.getPrefix() + "The Cost override must be numeric"); + breakSignAndCancelEvent(event); return; + } } - //TODO handle each one String title = StringUtils.standardizeText(event.getLine(1)); player.sendMessage(Carz.getPrefix() + title + " sign created"); - event.setLine(0, Carz.getInstance().getSettings().getSignHeader()); -// event.setLine(3, ChatColor.RED + String.valueOf(PurchaseType.fromString(title).getCost())); } /** @@ -142,18 +156,20 @@ public void onSignInteract(PlayerInteractEvent event) { } event.setCancelled(true); + boolean hasOverriddenPrice = ValidationUtils.isDouble(lines[3]); switch (lines[1].toLowerCase()) { case "purchase": - if (!ValidationUtils.canPurchaseCar(player, new String[0])) { + String carType = ValidationUtils.isStringValid(lines[2]) ? lines[2].toLowerCase() : DEFAULT_CAR; + if (!ValidationUtils.canPurchaseCar(player, carType, hasOverriddenPrice)) { return; } - carz.getEconomyAPI().requestPurchase(player, new CarPurchase(lines[2])); + carz.getEconomyAPI().requestPurchase(player, new CarPurchase(carType)); break; case "upgrade": - if (!ValidationUtils.canPurchaseUpgrade(player)) { + if (!ValidationUtils.canPurchaseUpgrade(player, hasOverriddenPrice)) { return; } @@ -162,7 +178,7 @@ public void onSignInteract(PlayerInteractEvent event) { break; case "refuel": - if (!ValidationUtils.canPurchaseFuel(player)) { + if (!ValidationUtils.canPurchaseFuel(player, hasOverriddenPrice)) { return; } @@ -175,8 +191,13 @@ public void onSignInteract(PlayerInteractEvent event) { return; } - if (ValidationUtils.isDouble(lines[3]) && carz.getEconomyAPI().isPurchasing(player)) { - carz.getEconomyAPI().getPurchasing(player).setCost(Double.parseDouble(lines[3])); + if (hasOverriddenPrice && carz.getEconomyAPI().isPurchasing(player)) { + carz.getEconomyAPI().getPurchasing(player).setCostOverride(Double.parseDouble(lines[3])); } } + + private void breakSignAndCancelEvent(SignChangeEvent event) { + event.getBlock().breakNaturally(); + event.setCancelled(true); + } } diff --git a/src/main/java/io/github/a5h73y/listeners/VehicleListener.java b/src/main/java/io/github/a5h73y/listeners/VehicleListener.java index ccef3bb..7b2d6ca 100644 --- a/src/main/java/io/github/a5h73y/listeners/VehicleListener.java +++ b/src/main/java/io/github/a5h73y/listeners/VehicleListener.java @@ -12,6 +12,7 @@ import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.data.type.Slab; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Minecart; @@ -215,6 +216,7 @@ public void onVehicleUpdate(VehicleUpdateEvent event) { if (drivingCar.isFuelConsumed()) { carz.getCarController().removeDriver(player.getName()); + carz.getItemMetaUtils().setValue(VEHICLE_FUEL, event.getVehicle(), "0"); TranslationUtils.sendTranslation("Car.FuelEmpty", player); return; } @@ -233,11 +235,11 @@ public void onVehicleUpdate(VehicleUpdateEvent event) { playerLocation.setPitch(0f); Location twoBlocksAhead = playerLocation.add(playerLocation.getDirection().multiply(2)); - //TODO set Y to minecart + offset twoBlocksAhead.setY(Math.max(playerLocation.getY() + 1, twoBlocksAhead.getY())); // if there is a block ahead of us - if (twoBlocksAhead.getBlock().getType() != Material.AIR) { + if (twoBlocksAhead.getBlock().getType() != Material.AIR + || twoBlocksAhead.getBlock().getBlockData() instanceof Slab) { Location above = twoBlocksAhead.add(0, 1, 0); // if the block above it is AIR, allow to climb diff --git a/src/main/java/io/github/a5h73y/model/CarDetails.java b/src/main/java/io/github/a5h73y/model/CarDetails.java index 6027d6c..26ed45b 100644 --- a/src/main/java/io/github/a5h73y/model/CarDetails.java +++ b/src/main/java/io/github/a5h73y/model/CarDetails.java @@ -55,8 +55,7 @@ public Material getFillMaterial() { @Override public String toString() { - return - "\nstartMaxSpeed = " + startMaxSpeed + + return "\nstartMaxSpeed = " + startMaxSpeed + ", \nmaxUpgradeSpeed = " + maxUpgradeSpeed + ", \nacceleration = " + acceleration + ", \nfuelUsage = " + fuelUsage + diff --git a/src/main/java/io/github/a5h73y/plugin/EconomyAPI.java b/src/main/java/io/github/a5h73y/plugin/EconomyAPI.java index c872299..1611811 100644 --- a/src/main/java/io/github/a5h73y/plugin/EconomyAPI.java +++ b/src/main/java/io/github/a5h73y/plugin/EconomyAPI.java @@ -4,7 +4,6 @@ import java.util.Map; import io.github.a5h73y.Carz; -import io.github.a5h73y.model.Car; import io.github.a5h73y.other.PluginUtils; import io.github.a5h73y.purchases.Purchasable; import io.github.a5h73y.utility.StringUtils; @@ -42,7 +41,7 @@ protected void initialise() { getServer().getServicesManager().getRegistration(Economy.class); if (economyProvider == null) { - PluginUtils.log("[Economy] Carz failed to connect to Economy service. Disabling Economy.", 2); + PluginUtils.log("[Economy] Carz failed to connect to Vault's Economy service. Disabling Economy.", 2); enabled = false; return; } @@ -102,7 +101,7 @@ public void requestPurchase(Player player, Purchasable purchasable) { } // if the user has to confirm their purchases - if (enabled && Carz.getInstance().getConfig().getBoolean("Other.Vault.ConfirmPurchases")) { + if (enabled && Carz.getInstance().getConfig().getBoolean("Vault.ConfirmPurchases")) { purchasable.sendConfirmationMessage(player); purchasing.put(player.getName(), purchasable); @@ -175,14 +174,14 @@ private boolean purchase(Player player, double cost) { /** * Calculate the cost of refueling. * If the settings enable cost scaling, use the remaining Car's fuel to determine the cost to fully refuel. - * @param car + * @param remainingFuel * @return refuel cost */ - public double getRefuelCost(Car car) { - double cost = Carz.getInstance().getConfig().getDouble("Other.Vault.Cost.Refuel"); + public double getRefuelCost(double remainingFuel) { + double cost = Carz.getInstance().getConfig().getDouble("Vault.Cost.Refuel"); if (Carz.getInstance().getSettings().isFuelScaleCost()) { - cost *= Carz.getInstance().getFuelController().determineScaleOfCostMultiplier(car.getCurrentFuel()); + cost *= Carz.getInstance().getFuelController().determineScaleOfCostMultiplier(remainingFuel); } return cost; @@ -203,9 +202,9 @@ public void sendInformation(Player player) { if (enabled) { FileConfiguration config = Carz.getInstance().getConfig(); player.sendMessage("Economy: " + economy.getName()); - player.sendMessage("Purchase Confirmation: " + config.getBoolean("Other.Vault.ConfirmPurchases")); - player.sendMessage("Upgrade Cost: " + config.getDouble("Other.Vault.Cost.Upgrade")); - player.sendMessage("Refuel Cost: " + config.getDouble("Other.Vault.Cost.Refuel")); + player.sendMessage("Purchase Confirmation: " + config.getBoolean("Vault.ConfirmPurchases")); + player.sendMessage("Upgrade Cost: " + config.getDouble("Vault.Cost.Upgrade")); + player.sendMessage("Refuel Cost: " + config.getDouble("Vault.Cost.Refuel")); player.sendMessage("CarTypes:"); for (String carType : Carz.getInstance().getCarController().getCarTypes().keySet()) { diff --git a/src/main/java/io/github/a5h73y/plugin/PluginWrapper.java b/src/main/java/io/github/a5h73y/plugin/PluginWrapper.java index 8c052fc..64b9c30 100644 --- a/src/main/java/io/github/a5h73y/plugin/PluginWrapper.java +++ b/src/main/java/io/github/a5h73y/plugin/PluginWrapper.java @@ -40,7 +40,7 @@ public boolean isEnabled() { */ protected void initialise() { // if the config prevents integration, don't start setup. - if (!Carz.getInstance().getConfig().getBoolean("Other." + getPluginName() + ".Enabled")) { + if (!Carz.getInstance().getConfig().getBoolean(getPluginName() + ".Enabled")) { return; } diff --git a/src/main/java/io/github/a5h73y/purchases/CarPurchase.java b/src/main/java/io/github/a5h73y/purchases/CarPurchase.java index e375e4b..b202e50 100644 --- a/src/main/java/io/github/a5h73y/purchases/CarPurchase.java +++ b/src/main/java/io/github/a5h73y/purchases/CarPurchase.java @@ -14,7 +14,6 @@ public class CarPurchase extends Purchasable { public CarPurchase(String carType) { this.carType = carType.toLowerCase(); - setCost(Carz.getInstance().getConfig().getDouble("CarTypes." + carType + ".Cost")); } @Override @@ -39,4 +38,9 @@ public void performPurchase(Player player) { player.sendMessage(successMessage); } + + @Override + protected double getDefaultCost() { + return Carz.getInstance().getConfig().getDouble("CarTypes." + carType + ".Cost"); + } } diff --git a/src/main/java/io/github/a5h73y/purchases/Purchasable.java b/src/main/java/io/github/a5h73y/purchases/Purchasable.java index 2e79f0c..da368cb 100644 --- a/src/main/java/io/github/a5h73y/purchases/Purchasable.java +++ b/src/main/java/io/github/a5h73y/purchases/Purchasable.java @@ -17,7 +17,16 @@ public abstract class Purchasable { protected static final String CONFIRM_PURCHASE_MESSAGE = "Purchase.Confirm.Purchase"; - private double cost; + private double costOverride; + + /** + * Get the final cost of the purchase. + * This will be calculated every time in case the cost needs to be recalculated. + * @return calculated cost. + */ + public double getCost() { + return costOverride > 0 ? costOverride : getDefaultCost(); + } /** * Send the player a summary of the purchase. @@ -30,24 +39,30 @@ public abstract class Purchasable { /** * The player has confirmed the purchase or confirmation wasn't necessary. * Purchase action is executed, which is contextual based on the type of purchase. - * This will be invoked regardless of settings. + * This will be invoked regardless of settings, no validation should be performed here. * @param player player */ public abstract void performPurchase(Player player); /** - * Calculate the cost of the purchase. + * The default cost of the purchase. + * @return cost + */ + protected abstract double getDefaultCost(); + + /** + * Set a cost override of the default cost. * @return total cost */ - public double getCost() { - return cost; + public double getCostOverride() { + return costOverride; } /** * Override the default cost. - * @param cost + * @param costOverride */ - public void setCost(double cost) { - this.cost = cost; + public void setCostOverride(double costOverride) { + this.costOverride = costOverride; } } diff --git a/src/main/java/io/github/a5h73y/purchases/RefuelPurchase.java b/src/main/java/io/github/a5h73y/purchases/RefuelPurchase.java index 815f3d1..6dc5121 100644 --- a/src/main/java/io/github/a5h73y/purchases/RefuelPurchase.java +++ b/src/main/java/io/github/a5h73y/purchases/RefuelPurchase.java @@ -13,7 +13,6 @@ public class RefuelPurchase extends Purchasable { public RefuelPurchase(Car currentCar) { this.currentCar = currentCar; - setCost(Carz.getInstance().getEconomyAPI().getRefuelCost(currentCar)); } @Override @@ -22,7 +21,7 @@ public void sendConfirmationMessage(Player player) { String purchaseMessage = TranslationUtils.getTranslation("Purchase.Confirm.Refuel") .replace(PERCENT_PLACEHOLDER, String.valueOf(fillPercent)) .replace(COST_PLACEHOLDER, String.valueOf(getCost())) - .replace(CURRENCY_PLACEHOLDER, Carz.getInstance().getEconomyAPI().getCurrencyName(getCost()));; + .replace(CURRENCY_PLACEHOLDER, Carz.getInstance().getEconomyAPI().getCurrencyName(getCost())); player.sendMessage(purchaseMessage); TranslationUtils.sendTranslation(CONFIRM_PURCHASE_MESSAGE, false, player); @@ -30,7 +29,12 @@ public void sendConfirmationMessage(Player player) { @Override public void performPurchase(Player player) { - Carz.getInstance().getFuelController().refuel(currentCar, player); + Carz.getInstance().getFuelController().refuel(currentCar); TranslationUtils.sendTranslation("Purchase.Success.Refuel", player); } + + @Override + protected double getDefaultCost() { + return Carz.getInstance().getEconomyAPI().getRefuelCost(currentCar.getCurrentFuel()); + } } diff --git a/src/main/java/io/github/a5h73y/purchases/UpgradePurchase.java b/src/main/java/io/github/a5h73y/purchases/UpgradePurchase.java index 54e0026..035a335 100644 --- a/src/main/java/io/github/a5h73y/purchases/UpgradePurchase.java +++ b/src/main/java/io/github/a5h73y/purchases/UpgradePurchase.java @@ -14,10 +14,9 @@ public class UpgradePurchase extends Purchasable { private double newTopSpeed; public UpgradePurchase(Car currentCar) { - double upgradeAmount = Carz.getInstance().getConfig().getDouble("Speed.Upgrade.Increment"); + double upgradeAmount = Carz.getInstance().getSettings().getUpgradeIncrement(); previousTopSpeed = currentCar.getMaxSpeed(); newTopSpeed = currentCar.getMaxSpeed() + upgradeAmount; - setCost(Carz.getInstance().getConfig().getDouble("Other.Vault.Cost.Upgrade")); } @Override @@ -26,7 +25,7 @@ public void sendConfirmationMessage(Player player) { .replace(FROM_SPEED_PLACEHOLDER, String.valueOf(previousTopSpeed)) .replace(TO_SPEED_PLACEHOLDER, String.valueOf(newTopSpeed)) .replace(COST_PLACEHOLDER, String.valueOf(getCost())) - .replace(CURRENCY_PLACEHOLDER, Carz.getInstance().getEconomyAPI().getCurrencyName(getCost()));; + .replace(CURRENCY_PLACEHOLDER, Carz.getInstance().getEconomyAPI().getCurrencyName(getCost())); player.sendMessage(purchaseMessage); TranslationUtils.sendTranslation(CONFIRM_PURCHASE_MESSAGE, false, player); @@ -37,4 +36,9 @@ public void performPurchase(Player player) { Carz.getInstance().getCarController().upgradeCarSpeed(player); TranslationUtils.sendTranslation("Purchase.Success.Upgrade", player); } + + @Override + protected double getDefaultCost() { + return Carz.getInstance().getConfig().getDouble("Vault.Cost.Upgrade"); + } } diff --git a/src/main/java/io/github/a5h73y/utility/CarUtils.java b/src/main/java/io/github/a5h73y/utility/CarUtils.java index 9b020c3..a4c0092 100644 --- a/src/main/java/io/github/a5h73y/utility/CarUtils.java +++ b/src/main/java/io/github/a5h73y/utility/CarUtils.java @@ -11,7 +11,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import static io.github.a5h73y.controllers.CarController.DEFAULT_CAR; import static io.github.a5h73y.enums.VehicleDetailKey.VEHICLE_OWNER; import static io.github.a5h73y.enums.VehicleDetailKey.VEHICLE_TYPE; diff --git a/src/main/java/io/github/a5h73y/utility/ValidationUtils.java b/src/main/java/io/github/a5h73y/utility/ValidationUtils.java index 504ed6b..d447915 100644 --- a/src/main/java/io/github/a5h73y/utility/ValidationUtils.java +++ b/src/main/java/io/github/a5h73y/utility/ValidationUtils.java @@ -2,6 +2,7 @@ import io.github.a5h73y.Carz; import io.github.a5h73y.enums.Permissions; +import io.github.a5h73y.enums.VehicleDetailKey; import io.github.a5h73y.model.Car; import io.github.a5h73y.other.XMaterial; import org.bukkit.Material; @@ -9,8 +10,6 @@ import org.bukkit.entity.Player; import org.bukkit.entity.Vehicle; -import static io.github.a5h73y.controllers.CarController.DEFAULT_CAR; - public class ValidationUtils { /** @@ -19,7 +18,7 @@ public class ValidationUtils { * @return whether the input is a valid String */ public static boolean isStringValid(String input) { - return input != null && input.trim().length() != 0; + return input != null && !input.trim().isEmpty(); } /** @@ -71,10 +70,22 @@ public static boolean isACarzVehicle(Vehicle cart) { * Check to see if the player is currently able to purchase a car * This includes checking the permission status * @param player - * @param args + * @param carType + * @return boolean + */ + public static boolean canPurchaseCar(Player player, String carType) { + return canPurchaseCar(player, carType, true); + } + + /** + * Check to see if the player is currently able to purchase a car + * This includes checking the permission status + * @param player + * @param carType + * @param checkEconomy * @return boolean */ - public static boolean canPurchaseCar(Player player, String[] args) { + public static boolean canPurchaseCar(Player player, String carType, boolean checkEconomy) { if (!PermissionUtils.hasPermission(player, Permissions.PURCHASE)) { return false; } @@ -89,14 +100,17 @@ public static boolean canPurchaseCar(Player player, String[] args) { return false; } - if (args.length > 1 && !Carz.getInstance().getCarController().doesCarTypeExist(args[1].toLowerCase())) { + if (!Carz.getInstance().getCarController().doesCarTypeExist(carType.toLowerCase())) { TranslationUtils.sendTranslation("Error.UnknownCarType", player); return false; } - String carType = args.length > 1 ? args[1].toLowerCase() : DEFAULT_CAR; - double cost = Carz.getInstance().getConfig().getDouble("CarTypes." + carType + ".Cost"); - return Carz.getInstance().getEconomyAPI().canPurchase(player, cost); + if (checkEconomy) { + double cost = Carz.getInstance().getConfig().getDouble("CarTypes." + carType.toLowerCase() + ".Cost"); + return Carz.getInstance().getEconomyAPI().canPurchase(player, cost); + } else { + return true; + } } /** @@ -106,6 +120,17 @@ public static boolean canPurchaseCar(Player player, String[] args) { * @return boolean */ public static boolean canPurchaseUpgrade(Player player) { + return canPurchaseUpgrade(player, true); + } + + /** + * Check to see if the player is currently able to purchase an upgrade + * This includes checking the permission status + * @param player + * @param checkEconomy + * @return boolean + */ + public static boolean canPurchaseUpgrade(Player player, boolean checkEconomy) { if (!player.isInsideVehicle() || !(player.getVehicle() instanceof Minecart)) { TranslationUtils.sendTranslation("Error.NotInCar", player); return false; @@ -126,8 +151,12 @@ public static boolean canPurchaseUpgrade(Player player) { return false; } - double cost = Carz.getInstance().getConfig().getDouble("Other.Vault.Cost.Upgrade"); - return Carz.getInstance().getEconomyAPI().canPurchase(player, cost); + if (checkEconomy) { + double cost = Carz.getInstance().getConfig().getDouble("Vault.Cost.Upgrade"); + return Carz.getInstance().getEconomyAPI().canPurchase(player, cost); + } else { + return true; + } } /** @@ -137,6 +166,17 @@ public static boolean canPurchaseUpgrade(Player player) { * @return boolean */ public static boolean canPurchaseFuel(Player player) { + return canPurchaseUpgrade(player, true); + } + + /** + * Check to see if the player is currently able to purchase fuel + * There will be no permission node to purchase fuel, as this would be silly + * @param player + * @param checkEconomy + * @return boolean + */ + public static boolean canPurchaseFuel(Player player, boolean checkEconomy) { if (!player.isInsideVehicle() || !(player.getVehicle() instanceof Minecart)) { TranslationUtils.sendTranslation("Error.NotInCar", player); return false; @@ -146,8 +186,17 @@ public static boolean canPurchaseFuel(Player player) { return false; } - Car car = Carz.getInstance().getCarController().getCar(player.getVehicle().getEntityId()); - double cost = Carz.getInstance().getEconomyAPI().getRefuelCost(car); - return Carz.getInstance().getEconomyAPI().canPurchase(player, cost); + if (!Carz.getInstance().getItemMetaUtils().has(VehicleDetailKey.VEHICLE_FUEL, player.getVehicle())) { + player.sendMessage(Carz.getPrefix() + "This car hasn't been driven yet."); + return false; + } + + if (checkEconomy) { + double remainingFuel = Double.parseDouble(Carz.getInstance().getItemMetaUtils().getValue(VehicleDetailKey.VEHICLE_FUEL, player.getVehicle())); + double cost = Carz.getInstance().getEconomyAPI().getRefuelCost(remainingFuel); + return Carz.getInstance().getEconomyAPI().canPurchase(player, cost); + } else { + return true; + } } }