feat: remove favorite

This commit is contained in:
ineanto 2025-09-22 16:18:38 +02:00
parent e20dcabff7
commit 769fb97500
Signed by: ineanto
GPG key ID: E511F9CAA2F9CE84
10 changed files with 24 additions and 78 deletions

View file

@ -101,7 +101,7 @@ tasks {
runServer { runServer {
downloadPlugins { downloadPlugins {
//url("https://download.luckperms.net/1593/bukkit/loader/LuckPerms-Bukkit-5.5.8.jar") url("https://share.ineanto.xyz/-Yr74eKNUp6/NoEncryptionX-1.0.0-SNAPSHOT.jar")
// 1.20.5 - latest testing // 1.20.5 - latest testing
//url("https://ci.dmulloy2.net/job/ProtocolLib/lastSuccessfulBuild/artifact/build/libs/ProtocolLib.jar") //url("https://ci.dmulloy2.net/job/ProtocolLib/lastSuccessfulBuild/artifact/build/libs/ProtocolLib.jar")

View file

@ -2,7 +2,6 @@ package xyz.ineanto.nicko;
import com.github.retrooper.packetevents.PacketEvents; import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.manager.server.ServerVersion; import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.settings.PacketEventsSettings;
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder; import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -43,13 +42,7 @@ public class Nicko extends JavaPlugin {
@Override @Override
public void onLoad() { public void onLoad() {
PacketEvents.setAPI( PacketEvents.setAPI(SpigotPacketEventsBuilder.build(this));
SpigotPacketEventsBuilder.build(this,
new PacketEventsSettings()
.checkForUpdates(true)
.kickOnPacketException(true)
)
);
PacketEvents.getAPI().load(); PacketEvents.getAPI().load();
} }

View file

@ -8,7 +8,6 @@ import xyz.ineanto.nicko.gui.items.common.ScrollDownItem;
import xyz.ineanto.nicko.gui.items.common.ScrollUpItem; import xyz.ineanto.nicko.gui.items.common.ScrollUpItem;
import xyz.ineanto.nicko.gui.items.favorites.FavoriteAddItem; import xyz.ineanto.nicko.gui.items.favorites.FavoriteAddItem;
import xyz.ineanto.nicko.gui.items.favorites.FavoriteAppearanceEntryItem; import xyz.ineanto.nicko.gui.items.favorites.FavoriteAppearanceEntryItem;
import xyz.ineanto.nicko.gui.items.favorites.FavoriteRemoveItem;
import xyz.ineanto.nicko.language.LanguageKey; import xyz.ineanto.nicko.language.LanguageKey;
import xyz.ineanto.nicko.language.PlayerLanguage; import xyz.ineanto.nicko.language.PlayerLanguage;
import xyz.ineanto.nicko.profile.NickoProfile; import xyz.ineanto.nicko.profile.NickoProfile;
@ -37,7 +36,6 @@ public class FavoritesGUI {
final ScrollDownItem scrollDownItem = new ScrollDownItem(playerLanguage); final ScrollDownItem scrollDownItem = new ScrollDownItem(playerLanguage);
final FavoriteAddItem favoriteAddItem = new FavoriteAddItem(player); final FavoriteAddItem favoriteAddItem = new FavoriteAddItem(player);
final FavoriteRemoveItem favoriteRemoveItem = new FavoriteRemoveItem(playerLanguage);
final NickoProfile profile = Nicko.getInstance().getDataStore().getData(player.getUniqueId()).orElse(NickoProfile.EMPTY_PROFILE); final NickoProfile profile = Nicko.getInstance().getDataStore().getData(player.getUniqueId()).orElse(NickoProfile.EMPTY_PROFILE);
final List<Appearance> favorites = profile.getFavorites(); final List<Appearance> favorites = profile.getFavorites();
@ -58,13 +56,12 @@ public class FavoritesGUI {
"x x x x x x x x #", "x x x x x x x x #",
"x x x x x x x x #", "x x x x x x x x #",
"x x x x x x x x D", "x x x x x x x x D",
"% % % A B R % % %"); "% % % A B % % % %");
guiItemBuilder.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL); guiItemBuilder.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL);
guiItemBuilder.addIngredient('U', scrollUpItem); guiItemBuilder.addIngredient('U', scrollUpItem);
guiItemBuilder.addIngredient('D', scrollDownItem); guiItemBuilder.addIngredient('D', scrollDownItem);
guiItemBuilder.addIngredient('B', backItem.get(parent.getGUI(), parent.getTitle())); guiItemBuilder.addIngredient('B', backItem.get(parent.getGUI(), parent.getTitle()));
guiItemBuilder.addIngredient('A', favoriteAddItem.get()); guiItemBuilder.addIngredient('A', favoriteAddItem.get());
guiItemBuilder.addIngredient('R', favoriteRemoveItem.get());
guiItemBuilder.setContent(items); guiItemBuilder.setContent(items);
}); });
this.player = player; this.player = player;

View file

@ -9,6 +9,7 @@ import xyz.ineanto.nicko.Nicko;
import xyz.ineanto.nicko.appearance.ActionResult; import xyz.ineanto.nicko.appearance.ActionResult;
import xyz.ineanto.nicko.appearance.Appearance; import xyz.ineanto.nicko.appearance.Appearance;
import xyz.ineanto.nicko.appearance.AppearanceManager; import xyz.ineanto.nicko.appearance.AppearanceManager;
import xyz.ineanto.nicko.gui.FavoritesGUI;
import xyz.ineanto.nicko.gui.items.ItemDefaults; import xyz.ineanto.nicko.gui.items.ItemDefaults;
import xyz.ineanto.nicko.language.LanguageKey; import xyz.ineanto.nicko.language.LanguageKey;
import xyz.ineanto.nicko.language.PlayerLanguage; import xyz.ineanto.nicko.language.PlayerLanguage;
@ -19,6 +20,8 @@ import xyz.xenondevs.invui.item.builder.SkullBuilder;
import xyz.xenondevs.invui.item.impl.AsyncItem; import xyz.xenondevs.invui.item.impl.AsyncItem;
import xyz.xenondevs.invui.item.impl.SuppliedItem; import xyz.xenondevs.invui.item.impl.SuppliedItem;
import java.util.List;
public class FavoriteAppearanceEntryItem extends AsyncItem { public class FavoriteAppearanceEntryItem extends AsyncItem {
private final PlayerDataStore dataStore = Nicko.getInstance().getDataStore(); private final PlayerDataStore dataStore = Nicko.getInstance().getDataStore();
@ -55,8 +58,19 @@ public class FavoriteAppearanceEntryItem extends AsyncItem {
@Override @Override
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
if(clickType.isShiftClick()) {
final NickoProfile profile = dataStore.getData(player.getUniqueId()).orElse(NickoProfile.EMPTY_PROFILE);
final List<Appearance> favorites = profile.getFavorites();
favorites.remove(appearance);
dataStore.updateCache(player.getUniqueId(), profile);
new FavoritesGUI(player).open();
return;
}
if (clickType.isLeftClick() || clickType.isRightClick()) { if (clickType.isLeftClick() || clickType.isRightClick()) {
event.getView().close(); event.getView().close();
final NickoProfile profile = dataStore.getData(player.getUniqueId()).orElse(NickoProfile.EMPTY_PROFILE); final NickoProfile profile = dataStore.getData(player.getUniqueId()).orElse(NickoProfile.EMPTY_PROFILE);
final AppearanceManager appearanceManager = new AppearanceManager(player); final AppearanceManager appearanceManager = new AppearanceManager(player);

View file

@ -1,55 +0,0 @@
package xyz.ineanto.nicko.gui.items.favorites;
import io.papermc.paper.datacomponent.DataComponentTypes;
import io.papermc.paper.datacomponent.item.TooltipDisplay;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.block.banner.Pattern;
import org.bukkit.block.banner.PatternType;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BannerMeta;
import xyz.ineanto.nicko.language.LanguageKey;
import xyz.ineanto.nicko.language.PlayerLanguage;
import xyz.xenondevs.invui.item.builder.ItemBuilder;
import xyz.xenondevs.invui.item.impl.SuppliedItem;
public class FavoriteRemoveItem {
private final PlayerLanguage playerLanguage;
public FavoriteRemoveItem(PlayerLanguage playerLanguage) {
this.playerLanguage = playerLanguage;
}
public SuppliedItem get() {
return new SuppliedItem(() -> {
final ItemStack banner = new ItemStack(Material.RED_BANNER);
final BannerMeta bannerMeta = (BannerMeta) banner.getItemMeta();
// Minus sign
bannerMeta.addPattern(new Pattern(DyeColor.WHITE, PatternType.STRIPE_MIDDLE));
// Remove excess
bannerMeta.addPattern(new Pattern(DyeColor.RED, PatternType.BORDER));
banner.setItemMeta(bannerMeta);
banner.addItemFlags(ItemFlag.HIDE_ADDITIONAL_TOOLTIP);
banner.setData(DataComponentTypes.TOOLTIP_DISPLAY, TooltipDisplay
.tooltipDisplay()
.addHiddenComponents(DataComponentTypes.BANNER_PATTERNS)
.build()
);
final ItemBuilder builder = new ItemBuilder(banner);
return playerLanguage.translateItem(builder, LanguageKey.GUI.Favorites.REMOVE);
}, click -> {
final ClickType clickType = click.getClickType();
if (clickType.isLeftClick() || clickType.isRightClick()) {
click.getEvent().getView().close();
return true;
}
return false;
});
}
}

View file

@ -27,7 +27,7 @@ public class FavoritesItem {
if (clickType.isLeftClick() || clickType.isRightClick()) { if (clickType.isLeftClick() || clickType.isRightClick()) {
click.getEvent().getView().close(); click.getEvent().getView().close();
new FavoritesGUI(click.getPlayer()).open(); new FavoritesGUI(click.getPlayer()).open();
player.playSound(player.getLocation(), Sound.BLOCK_CHEST_OPEN, 1, 1f); player.playSound(player.getLocation(), Sound.BLOCK_CHEST_OPEN, 0.5f, 1f);
return true; return true;
} }
return false; return false;

View file

@ -33,6 +33,7 @@ public class ResetItem {
optionalProfile.ifPresent(profile -> { optionalProfile.ifPresent(profile -> {
if (!profile.hasData()) { if (!profile.hasData()) {
player.sendMessage(playerLanguage.translateWithOops(LanguageKey.Event.Appearance.Remove.MISSING)); player.sendMessage(playerLanguage.translateWithOops(LanguageKey.Event.Appearance.Remove.MISSING));
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1f, 1f);
event.getEvent().getView().close(); event.getEvent().getView().close();
return; return;
} }
@ -41,9 +42,10 @@ public class ResetItem {
final ActionResult reset = appearanceManager.reset(); final ActionResult reset = appearanceManager.reset();
if (!reset.isError()) { if (!reset.isError()) {
player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Remove.OK)); player.sendMessage(playerLanguage.translateWithWhoosh(LanguageKey.Event.Appearance.Remove.OK));
player.playSound(player.getLocation(), Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1f, 1f);
} else { } else {
player.sendMessage(playerLanguage.translateWithOops(LanguageKey.Event.Appearance.Remove.ERROR, reset.getErrorKey())); player.sendMessage(playerLanguage.translateWithOops(LanguageKey.Event.Appearance.Remove.ERROR, reset.getErrorKey()));
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1f); player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_HURT, 1f, 1f);
} }
}); });
return true; return true;

View file

@ -159,7 +159,7 @@ gui:
name: "Random skin on login" name: "Random skin on login"
favorites: favorites:
add: add:
name: "Add a favorite" name: "New favorite"
lore: lore:
- "<grey>Add a new favorite appearance to the list.</grey>" - "<grey>Add a new favorite appearance to the list.</grey>"
- "<grey>Hold <gold>SHIFT</gold> to add your current disguise!</grey>" - "<grey>Hold <gold>SHIFT</gold> to add your current disguise!</grey>"

View file

@ -161,15 +161,10 @@ gui:
name: "Apparence aléatoire à la connexion" name: "Apparence aléatoire à la connexion"
favorites: favorites:
add: add:
name: "Ajouter un favori" name: "Nouveau favori"
lore: lore:
- "<grey>Ajoute une nouvelle apparence favorite.</grey>" - "<grey>Ajoute une nouvelle apparence favorite.</grey>"
- "<grey>Maintenez <gold>SHIFT</gold> pour ajouter votre apparence actuelle !</grey>" - "<grey>Maintenez <gold>SHIFT</gold> pour ajouter votre apparence actuelle !</grey>"
remove:
name: "Activer la suppression"
lore:
- "<grey>Cliquer sur un déguisement lorsque le mode est</grey>"
- "<grey>actif le supprimera de vos favoris.</grey>"
entry: entry:
name: "<gold>Favori</gold>" name: "<gold>Favori</gold>"
lore: lore: