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<>();
|
Int2ObjectOpenHashMap<EnchantmentData> enchantmentDataMap = new Int2ObjectOpenHashMap<>();
|
||||||
String enchantPrefix = npcPrefix + "enchants." + trackKey + ".";
|
String enchantPrefix = npcPrefix + "enchants." + trackKey + ".";
|
||||||
|
|
||||||
ConfigurationSection secSection = config.getConfigurationSection(enchantPrefix + "enchants");
|
ConfigurationSection trackSection = config.getConfigurationSection(enchantPrefix + "track-enchants");
|
||||||
if (secSection == null) {
|
if (trackSection == null) {
|
||||||
config.logger.warning("Invalid section for enchant track [%]", trackKey);
|
config.logger.warning("Invalid section for enchant track [%]", trackKey);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (String enchantmentKey : secSection.getKeys(false)) {
|
for (String enchantmentKey : trackSection.getKeys(false)) {
|
||||||
String enchantString = config.getString(enchantPrefix + enchantmentKey + ".", "type", Enchantment.LUCK.getName());
|
String trackPrefix = enchantPrefix + "track-enchants." + enchantmentKey + ".";
|
||||||
|
String enchantString = config.getString(trackPrefix, "type", Enchantment.LUCK.getName());
|
||||||
Enchantment enchantment = Enchantment.getByName(enchantString);
|
Enchantment enchantment = Enchantment.getByName(enchantString);
|
||||||
if (enchantment == null) {
|
if (enchantment == null) {
|
||||||
config.logger.warning("Found invalid enchant [%]", enchantString);
|
config.logger.warning("Found invalid enchant [%]", enchantString);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
new EnchantmentData(enchantment,
|
enchantmentDataMap.put(
|
||||||
config.getInt(enchantPrefix + enchantmentKey + ".", "level", 1),
|
config.getInt(trackPrefix, "position", 1),
|
||||||
config.getInt(enchantPrefix + enchantmentKey + ".", "price", 1));
|
new EnchantmentData(enchantment,
|
||||||
|
config.getInt(trackPrefix, "level", 1),
|
||||||
|
config.getInt(trackPrefix, "price", 1))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
enchantmentTracks.add(new EnchantmentTrack(config.getString(enchantPrefix, "internal-name", "ex1"),
|
enchantmentTracks.add(new EnchantmentTrack(config.getString(enchantPrefix, "internal-name", "ex1"),
|
||||||
MiniMessage.miniMessage().deserialize(config.getString(enchantPrefix, "display-name", "<red>Ex1</red>")),
|
MiniMessage.miniMessage().deserialize(config.getString(enchantPrefix, "display-name", "<red>Ex1</red>")),
|
||||||
|
|
@ -236,8 +240,8 @@ public class Config extends AbstractConfig {
|
||||||
itemStack,
|
itemStack,
|
||||||
config.getString(prefix, "command", "example command for <player>"),
|
config.getString(prefix, "command", "example command for <player>"),
|
||||||
config.getString(prefix, "permission", "example.permission"),
|
config.getString(prefix, "permission", "example.permission"),
|
||||||
config.getString(prefix, "prize-name", "Prize Name"),
|
config.getString(prefix, "name", "Prize Name"),
|
||||||
config.getInt(prefix, "prize-price", 1))
|
config.getInt(prefix, "price", 1))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return Optional.of(prizes);
|
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 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 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 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")
|
@SuppressWarnings("unused")
|
||||||
private static void load() {
|
private static void load() {
|
||||||
|
|
@ -69,7 +70,8 @@ public class Messages extends AbstractConfig {
|
||||||
EARNED_POINTS = config.getString(prefix, "earned-points", EARNED_POINTS);
|
EARNED_POINTS = config.getString(prefix, "earned-points", EARNED_POINTS);
|
||||||
NOT_ENOUGH_POINTS = config.getString(prefix, "not-enough-points", NOT_ENOUGH_POINTS);
|
NOT_ENOUGH_POINTS = config.getString(prefix, "not-enough-points", NOT_ENOUGH_POINTS);
|
||||||
PURCHASED = config.getString(prefix, "purchased", PURCHASED);
|
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.";
|
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_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_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")
|
@SuppressWarnings("unused")
|
||||||
private static void load() {
|
private static void load() {
|
||||||
UNABLE_TO_CREATE_FISH = config.getString(prefix, "unable-to-create-fish", UNABLE_TO_CREATE_FISH);
|
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_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.points.PointsManagement;
|
||||||
import com.alttd.fishingevent.util.Logger;
|
import com.alttd.fishingevent.util.Logger;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
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.Material;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
@ -29,27 +31,40 @@ public class UpgradeWindow extends GUI {
|
||||||
private final Logger logger;
|
private final Logger logger;
|
||||||
private boolean canOpen = false;
|
private boolean canOpen = false;
|
||||||
private final FishingEvent fishingEvent;
|
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) {
|
public UpgradeWindow(FishingEvent fishingEvent, Player player, Logger logger, List<EnchantmentTrack> enchantmentTracks) {
|
||||||
super(InventoryType.CHEST, MiniMessage.miniMessage().deserialize(Messages.GUI.UPGRADE_GUI_NAME));
|
super(InventoryType.CHEST, MiniMessage.miniMessage().deserialize(Messages.GUI.UPGRADE_GUI_NAME));
|
||||||
this.fishingEvent = fishingEvent;
|
this.fishingEvent = fishingEvent;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
int i = 0;
|
this.player = player;
|
||||||
|
this.enchantmentTracks = enchantmentTracks;
|
||||||
|
updateGUI();
|
||||||
|
canOpen = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateGUI() {
|
||||||
Optional<ItemStack> optionalFishingRod = getFishingRod(player);
|
Optional<ItemStack> optionalFishingRod = getFishingRod(player);
|
||||||
if (optionalFishingRod.isEmpty()) {
|
if (optionalFishingRod.isEmpty()) {
|
||||||
player.sendMiniMessage(Messages.GUI.NO_FISHING_ROD, null);
|
player.sendMiniMessage(Messages.GUI.NO_FISHING_ROD, null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ItemStack fishingRod = optionalFishingRod.get();
|
ItemStack fishingRod = optionalFishingRod.get();
|
||||||
|
int i = 0;
|
||||||
for (EnchantmentTrack enchantmentTrack : enchantmentTracks) {
|
for (EnchantmentTrack enchantmentTrack : enchantmentTracks) {
|
||||||
int trackLevel = getTrackLevel(enchantmentTrack, fishingRod);
|
int trackLevel = getTrackLevel(enchantmentTrack, fishingRod);
|
||||||
Optional<ItemStack> optionalEnchantmentItem = getEnchantmentItem(enchantmentTrack, trackLevel);
|
Optional<ItemStack> optionalEnchantmentItem = getEnchantmentItem(enchantmentTrack, trackLevel);
|
||||||
if (optionalEnchantmentItem.isEmpty())
|
if (optionalEnchantmentItem.isEmpty())
|
||||||
continue;
|
setItem(i, maxUpgraded, clickingPlayer -> {
|
||||||
setItem(i, optionalEnchantmentItem.get(), clickingPlayer -> upgrade(clickingPlayer, enchantmentTrack, trackLevel));
|
clickingPlayer.sendMiniMessage(Messages.GUI.MAX_UPGRADED, TagResolver.resolver(
|
||||||
|
Placeholder.parsed("track", enchantmentTrack.getInternalName())));
|
||||||
|
});
|
||||||
|
else
|
||||||
|
setItem(i, optionalEnchantmentItem.get(), clickingPlayer -> upgrade(clickingPlayer, enchantmentTrack, trackLevel));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
canOpen = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getTrackLevel(EnchantmentTrack enchantmentTrack, ItemStack fishingRod) {
|
private int getTrackLevel(EnchantmentTrack enchantmentTrack, ItemStack fishingRod) {
|
||||||
|
|
@ -71,15 +86,18 @@ public class UpgradeWindow extends GUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<ItemStack> getEnchantmentItem(EnchantmentTrack enchantmentTrack, int trackLevel) {
|
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();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
ItemStack itemStack = new ItemStack(Material.ENCHANTED_BOOK, 1);
|
ItemStack itemStack = new ItemStack(Material.ENCHANTED_BOOK, 1);
|
||||||
Optional<EnchantmentData> optionalEnchantmentData = enchantmentTrack.nextEnchantment(trackLevel);
|
Optional<EnchantmentData> optionalEnchantmentData = enchantmentTrack.nextEnchantment(trackLevel);
|
||||||
if (optionalEnchantmentData.isEmpty())
|
if (optionalEnchantmentData.isEmpty()) {
|
||||||
|
logger.debug("Player was unable to get next enchant");
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
|
}
|
||||||
EnchantmentData enchantmentData = optionalEnchantmentData.get();
|
EnchantmentData enchantmentData = optionalEnchantmentData.get();
|
||||||
itemStack.addEnchantment(enchantmentData.enchantment(), enchantmentData.level());
|
itemStack.addUnsafeEnchantment(enchantmentData.enchantment(), enchantmentData.level());
|
||||||
return Optional.of(itemStack);
|
return Optional.of(itemStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,7 +124,10 @@ public class UpgradeWindow extends GUI {
|
||||||
|
|
||||||
EnchantmentData enchantmentData = optionalEnchantmentData.get();
|
EnchantmentData enchantmentData = optionalEnchantmentData.get();
|
||||||
if (playerPoints < enchantmentData.price()) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -121,22 +142,26 @@ public class UpgradeWindow extends GUI {
|
||||||
try {
|
try {
|
||||||
PointsManagement.getInstance().removePoints(player.getUniqueId(), enchantmentData.price());
|
PointsManagement.getInstance().removePoints(player.getUniqueId(), enchantmentData.price());
|
||||||
} catch (IllegalArgumentException e) {
|
} 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!updateEnchantment(fishingRod, enchantmentData, enchantmentTrack, trackLevel + 1)) {
|
if (!updateEnchantment(fishingRod, enchantmentData, enchantmentTrack, trackLevel + 1)) {
|
||||||
PointsManagement.getInstance().addPoints(player.getUniqueId(), enchantmentData.price());
|
PointsManagement.getInstance().addPoints(player.getUniqueId(), enchantmentData.price());
|
||||||
//TODO error
|
player.sendMiniMessage(Messages.OTHER_ERRORS.UNABLE_TO_UPDATE_ENCHANTMENT, null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
inventory.setItem(fishingRodSlot, fishingRod);
|
inventory.setItem(fishingRodSlot, fishingRod);
|
||||||
|
updateGUI();
|
||||||
player.updateInventory();
|
player.updateInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean updateEnchantment(ItemStack fishingRod, EnchantmentData enchantmentData, EnchantmentTrack enchantmentTrack, int newTrackLevel) {
|
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();
|
ItemMeta itemMeta = fishingRod.getItemMeta();
|
||||||
PersistentDataContainer persistentDataContainer = itemMeta.getPersistentDataContainer();
|
PersistentDataContainer persistentDataContainer = itemMeta.getPersistentDataContainer();
|
||||||
Optional<NamespacedKey> namespacedKey = getNamespacedKey(fishingEvent, enchantmentTrack.getInternalName());
|
Optional<NamespacedKey> namespacedKey = getNamespacedKey(fishingEvent, enchantmentTrack.getInternalName());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user