Fixed upgrading enchantments
This commit is contained in:
parent
a904e0cfa5
commit
6de8d07e34
|
|
@ -170,21 +170,25 @@ public class Config extends AbstractConfig {
|
|||
Int2ObjectOpenHashMap<EnchantmentData> enchantmentDataMap = new Int2ObjectOpenHashMap<>();
|
||||
String enchantPrefix = npcPrefix + "enchants." + trackKey + ".";
|
||||
|
||||
ConfigurationSection secSection = config.getConfigurationSection(enchantPrefix + "enchants");
|
||||
if (secSection == null) {
|
||||
ConfigurationSection trackSection = config.getConfigurationSection(enchantPrefix + "track-enchants");
|
||||
if (trackSection == null) {
|
||||
config.logger.warning("Invalid section for enchant track [%]", trackKey);
|
||||
continue;
|
||||
}
|
||||
for (String enchantmentKey : secSection.getKeys(false)) {
|
||||
String enchantString = config.getString(enchantPrefix + enchantmentKey + ".", "type", Enchantment.LUCK.getName());
|
||||
for (String enchantmentKey : trackSection.getKeys(false)) {
|
||||
String trackPrefix = enchantPrefix + "track-enchants." + enchantmentKey + ".";
|
||||
String enchantString = config.getString(trackPrefix, "type", Enchantment.LUCK.getName());
|
||||
Enchantment enchantment = Enchantment.getByName(enchantString);
|
||||
if (enchantment == null) {
|
||||
config.logger.warning("Found invalid enchant [%]", enchantString);
|
||||
continue;
|
||||
}
|
||||
new EnchantmentData(enchantment,
|
||||
config.getInt(enchantPrefix + enchantmentKey + ".", "level", 1),
|
||||
config.getInt(enchantPrefix + enchantmentKey + ".", "price", 1));
|
||||
enchantmentDataMap.put(
|
||||
config.getInt(trackPrefix, "position", 1),
|
||||
new EnchantmentData(enchantment,
|
||||
config.getInt(trackPrefix, "level", 1),
|
||||
config.getInt(trackPrefix, "price", 1))
|
||||
);
|
||||
}
|
||||
enchantmentTracks.add(new EnchantmentTrack(config.getString(enchantPrefix, "internal-name", "ex1"),
|
||||
MiniMessage.miniMessage().deserialize(config.getString(enchantPrefix, "display-name", "<red>Ex1</red>")),
|
||||
|
|
@ -236,8 +240,8 @@ public class Config extends AbstractConfig {
|
|||
itemStack,
|
||||
config.getString(prefix, "command", "example command for <player>"),
|
||||
config.getString(prefix, "permission", "example.permission"),
|
||||
config.getString(prefix, "prize-name", "Prize Name"),
|
||||
config.getInt(prefix, "prize-price", 1))
|
||||
config.getString(prefix, "name", "Prize Name"),
|
||||
config.getInt(prefix, "price", 1))
|
||||
);
|
||||
}
|
||||
return Optional.of(prizes);
|
||||
|
|
|
|||
|
|
@ -57,7 +57,8 @@ public class Messages extends AbstractConfig {
|
|||
public static String EARNED_POINTS = "<green>You earned <gold><earned_points></gold> points from this sale, you are now at <gold><total_points></gold> points!";
|
||||
public static String NOT_ENOUGH_POINTS = "<red>You do not have enough points to purchase this, it costs <gold><price></gold> and you only have <gold><points></gold> points</red>";
|
||||
public static String PURCHASED = "<green>You purchased the <prize> prize. You have <remaining_points> points remaining.";
|
||||
public static String ALREADY_PURCHASED = "<red>You already purchased the <prize> prize.</red>";
|
||||
public static String ALREADY_PURCHASED_PRIZE = "<red>You already purchased the <prize> prize.</red>";
|
||||
public static String MAX_UPGRADED = "<red>You fully upgraded the <track> track</red>";
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static void load() {
|
||||
|
|
@ -69,7 +70,8 @@ public class Messages extends AbstractConfig {
|
|||
EARNED_POINTS = config.getString(prefix, "earned-points", EARNED_POINTS);
|
||||
NOT_ENOUGH_POINTS = config.getString(prefix, "not-enough-points", NOT_ENOUGH_POINTS);
|
||||
PURCHASED = config.getString(prefix, "purchased", PURCHASED);
|
||||
ALREADY_PURCHASED = config.getString(prefix, "already-purchased", ALREADY_PURCHASED);
|
||||
ALREADY_PURCHASED_PRIZE = config.getString(prefix, "already-purchased-prize", ALREADY_PURCHASED_PRIZE);
|
||||
MAX_UPGRADED = config.getString(prefix, "max-upgraded", MAX_UPGRADED);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -113,11 +115,13 @@ public class Messages extends AbstractConfig {
|
|||
private static final String prefix = "other-errors.";
|
||||
public static String UNABLE_TO_CREATE_FISH = "<red>Unable to create fish, please contact a staff member</red>";
|
||||
public static String UNABLE_TO_SELL_ITEMS = "<red>Unable to sell items, please contact a staff member</red>";
|
||||
public static String UNABLE_TO_UPDATE_ENCHANTMENT = "<red>Unable to update the enchantments, your points have been refunded, please contact a staff member</red>";
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static void load() {
|
||||
UNABLE_TO_CREATE_FISH = config.getString(prefix, "unable-to-create-fish", UNABLE_TO_CREATE_FISH);
|
||||
UNABLE_TO_SELL_ITEMS = config.getString(prefix, "unable-to-sell-items", UNABLE_TO_SELL_ITEMS);
|
||||
UNABLE_TO_UPDATE_ENCHANTMENT = config.getString(prefix, "unable-to-update-enchantment", UNABLE_TO_UPDATE_ENCHANTMENT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ import com.alttd.fishingevent.objects.EnchantmentTrack;
|
|||
import com.alttd.fishingevent.points.PointsManagement;
|
||||
import com.alttd.fishingevent.util.Logger;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
@ -29,27 +31,40 @@ public class UpgradeWindow extends GUI {
|
|||
private final Logger logger;
|
||||
private boolean canOpen = false;
|
||||
private final FishingEvent fishingEvent;
|
||||
private final ItemStack maxUpgraded = new ItemStack(Material.BARRIER, 1); //TODO itemlore/name
|
||||
private final Player player;
|
||||
private final List<EnchantmentTrack> enchantmentTracks;
|
||||
|
||||
public UpgradeWindow(FishingEvent fishingEvent, Player player, Logger logger, List<EnchantmentTrack> enchantmentTracks) {
|
||||
super(InventoryType.CHEST, MiniMessage.miniMessage().deserialize(Messages.GUI.UPGRADE_GUI_NAME));
|
||||
this.fishingEvent = fishingEvent;
|
||||
this.logger = logger;
|
||||
int i = 0;
|
||||
this.player = player;
|
||||
this.enchantmentTracks = enchantmentTracks;
|
||||
updateGUI();
|
||||
canOpen = true;
|
||||
}
|
||||
|
||||
private void updateGUI() {
|
||||
Optional<ItemStack> optionalFishingRod = getFishingRod(player);
|
||||
if (optionalFishingRod.isEmpty()) {
|
||||
player.sendMiniMessage(Messages.GUI.NO_FISHING_ROD, null);
|
||||
return;
|
||||
}
|
||||
ItemStack fishingRod = optionalFishingRod.get();
|
||||
int i = 0;
|
||||
for (EnchantmentTrack enchantmentTrack : enchantmentTracks) {
|
||||
int trackLevel = getTrackLevel(enchantmentTrack, fishingRod);
|
||||
Optional<ItemStack> optionalEnchantmentItem = getEnchantmentItem(enchantmentTrack, trackLevel);
|
||||
if (optionalEnchantmentItem.isEmpty())
|
||||
continue;
|
||||
setItem(i, optionalEnchantmentItem.get(), clickingPlayer -> upgrade(clickingPlayer, enchantmentTrack, trackLevel));
|
||||
setItem(i, maxUpgraded, clickingPlayer -> {
|
||||
clickingPlayer.sendMiniMessage(Messages.GUI.MAX_UPGRADED, TagResolver.resolver(
|
||||
Placeholder.parsed("track", enchantmentTrack.getInternalName())));
|
||||
});
|
||||
else
|
||||
setItem(i, optionalEnchantmentItem.get(), clickingPlayer -> upgrade(clickingPlayer, enchantmentTrack, trackLevel));
|
||||
i++;
|
||||
}
|
||||
canOpen = true;
|
||||
}
|
||||
|
||||
private int getTrackLevel(EnchantmentTrack enchantmentTrack, ItemStack fishingRod) {
|
||||
|
|
@ -71,15 +86,18 @@ public class UpgradeWindow extends GUI {
|
|||
}
|
||||
|
||||
private Optional<ItemStack> getEnchantmentItem(EnchantmentTrack enchantmentTrack, int trackLevel) {
|
||||
if (enchantmentTrack.getMaxLevel() == trackLevel) {
|
||||
if (enchantmentTrack.getMaxLevel() == trackLevel) { //TODO fix this won't work if there are 2+ enchantments in a track and the second has more levels
|
||||
logger.debug("Player got maxed out track");
|
||||
return Optional.empty();
|
||||
}
|
||||
ItemStack itemStack = new ItemStack(Material.ENCHANTED_BOOK, 1);
|
||||
Optional<EnchantmentData> optionalEnchantmentData = enchantmentTrack.nextEnchantment(trackLevel);
|
||||
if (optionalEnchantmentData.isEmpty())
|
||||
if (optionalEnchantmentData.isEmpty()) {
|
||||
logger.debug("Player was unable to get next enchant");
|
||||
return Optional.empty();
|
||||
}
|
||||
EnchantmentData enchantmentData = optionalEnchantmentData.get();
|
||||
itemStack.addEnchantment(enchantmentData.enchantment(), enchantmentData.level());
|
||||
itemStack.addUnsafeEnchantment(enchantmentData.enchantment(), enchantmentData.level());
|
||||
return Optional.of(itemStack);
|
||||
}
|
||||
|
||||
|
|
@ -106,7 +124,10 @@ public class UpgradeWindow extends GUI {
|
|||
|
||||
EnchantmentData enchantmentData = optionalEnchantmentData.get();
|
||||
if (playerPoints < enchantmentData.price()) {
|
||||
//TODO tell player not enough points
|
||||
player.sendMiniMessage(Messages.GUI.NOT_ENOUGH_POINTS, TagResolver.resolver(
|
||||
Placeholder.parsed("price", String.valueOf(enchantmentData.price())),
|
||||
Placeholder.parsed("points", String.valueOf(playerPoints))
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -121,22 +142,26 @@ public class UpgradeWindow extends GUI {
|
|||
try {
|
||||
PointsManagement.getInstance().removePoints(player.getUniqueId(), enchantmentData.price());
|
||||
} catch (IllegalArgumentException e) {
|
||||
//TODO tell player not enough points
|
||||
player.sendMiniMessage(Messages.GUI.NOT_ENOUGH_POINTS, TagResolver.resolver(
|
||||
Placeholder.parsed("price", String.valueOf(enchantmentData.price())),
|
||||
Placeholder.parsed("points", String.valueOf(playerPoints))
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!updateEnchantment(fishingRod, enchantmentData, enchantmentTrack, trackLevel + 1)) {
|
||||
PointsManagement.getInstance().addPoints(player.getUniqueId(), enchantmentData.price());
|
||||
//TODO error
|
||||
player.sendMiniMessage(Messages.OTHER_ERRORS.UNABLE_TO_UPDATE_ENCHANTMENT, null);
|
||||
return;
|
||||
}
|
||||
|
||||
inventory.setItem(fishingRodSlot, fishingRod);
|
||||
updateGUI();
|
||||
player.updateInventory();
|
||||
}
|
||||
|
||||
private boolean updateEnchantment(ItemStack fishingRod, EnchantmentData enchantmentData, EnchantmentTrack enchantmentTrack, int newTrackLevel) {
|
||||
fishingRod.addEnchantment(enchantmentData.enchantment(), enchantmentData.level());
|
||||
fishingRod.addUnsafeEnchantment(enchantmentData.enchantment(), enchantmentData.level());
|
||||
ItemMeta itemMeta = fishingRod.getItemMeta();
|
||||
PersistentDataContainer persistentDataContainer = itemMeta.getPersistentDataContainer();
|
||||
Optional<NamespacedKey> namespacedKey = getNamespacedKey(fishingEvent, enchantmentTrack.getInternalName());
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user