feat: home gui translated, fly cancel after disguise

This commit is contained in:
ineanto 2023-09-01 16:37:01 +02:00
parent dd35f38dc2
commit c57400707e
11 changed files with 128 additions and 45 deletions

View file

@ -122,6 +122,7 @@ public class AppearanceManager {
private void respawnPlayer() { private void respawnPlayer() {
final World world = player.getWorld(); final World world = player.getWorld();
final boolean wasFlying = player.isFlying(); final boolean wasFlying = player.isFlying();
final boolean wasAllowedToFly = player.getAllowFlight();
final WrapperPlayServerRespawn respawn = new WrapperPlayServerRespawn(); final WrapperPlayServerRespawn respawn = new WrapperPlayServerRespawn();
respawn.setDimension(world); respawn.setDimension(world);
respawn.setSeed(world.getSeed()); respawn.setSeed(world.getSeed());
@ -130,8 +131,9 @@ public class AppearanceManager {
respawn.setDifficulty(world.getDifficulty()); respawn.setDifficulty(world.getDifficulty());
respawn.setCopyMetadata(true); respawn.setCopyMetadata(true);
respawn.sendPacket(player); respawn.sendPacket(player);
player.setFlying(wasFlying);
player.teleport(player.getLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN); player.teleport(player.getLocation(), PlayerTeleportEvent.TeleportCause.PLUGIN);
player.setAllowFlight(wasAllowedToFly);
player.setFlying(wasFlying);
player.updateInventory(); // Marked as unstable. player.updateInventory(); // Marked as unstable.
} }

View file

@ -8,13 +8,15 @@ import xyz.atnrch.nicko.gui.items.home.AdminAccessItem;
import xyz.atnrch.nicko.gui.items.home.ExitItem; import xyz.atnrch.nicko.gui.items.home.ExitItem;
import xyz.atnrch.nicko.gui.items.home.ResetItem; import xyz.atnrch.nicko.gui.items.home.ResetItem;
import xyz.atnrch.nicko.gui.items.home.SettingsAccessItem; import xyz.atnrch.nicko.gui.items.home.SettingsAccessItem;
import xyz.atnrch.nicko.i18n.I18N;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.xenondevs.invui.gui.Gui; import xyz.xenondevs.invui.gui.Gui;
import xyz.xenondevs.invui.window.Window; import xyz.xenondevs.invui.window.Window;
public class HomeGUI { public class HomeGUI {
private final String title = "Nicko - Home";
private final Player player; private final Player player;
private final Gui gui; private final Gui gui;
private final String title;
public HomeGUI(Player player) { public HomeGUI(Player player) {
final String[] dynamicStructure = new String[]{ final String[] dynamicStructure = new String[]{
@ -26,16 +28,26 @@ public class HomeGUI {
dynamicStructure[2] = dynamicStructure[2].replace("A", "#"); dynamicStructure[2] = dynamicStructure[2].replace("A", "#");
} }
final I18N i18n = new I18N(player);
this.title = i18n.translatePrefixless(I18NDict.GUI.Home.TITLE);
final ExitItem exitItem = new ExitItem(player); final ExitItem exitItem = new ExitItem(player);
final ResetItem resetItem = new ResetItem(player);
final ChangeNameItem changeNameItem = new ChangeNameItem(player);
final ChangeBothItem changeBothItem = new ChangeBothItem(player);
final ChangeSkinItem changeSkinItem = new ChangeSkinItem(player);
final SettingsAccessItem settingsAccessItem = new SettingsAccessItem(player);
final AdminAccessItem adminAccessItem = new AdminAccessItem(player);
this.gui = Gui.normal() this.gui = Gui.normal()
.setStructure(dynamicStructure) .setStructure(dynamicStructure)
.addIngredient('E', exitItem.get()) .addIngredient('E', exitItem.get())
.addIngredient('R', new ResetItem()) .addIngredient('R', resetItem.get())
.addIngredient('N', new ChangeNameItem()) .addIngredient('N', changeNameItem.get())
.addIngredient('B', new ChangeBothItem()) .addIngredient('B', changeBothItem.get())
.addIngredient('S', new ChangeSkinItem(player)) .addIngredient('S', changeSkinItem.get())
.addIngredient('P', new SettingsAccessItem()) .addIngredient('P', settingsAccessItem.get())
.addIngredient('A', new AdminAccessItem()) .addIngredient('A', adminAccessItem.get())
.build(); .build();
this.player = player; this.player = player;
} }

View file

@ -1,17 +1,28 @@
package xyz.atnrch.nicko.gui.items.appearance; package xyz.atnrch.nicko.gui.items.appearance;
import org.bukkit.entity.Player;
import xyz.atnrch.nicko.anvil.AnvilManager; import xyz.atnrch.nicko.anvil.AnvilManager;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import xyz.atnrch.nicko.i18n.I18N;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.i18n.ItemTranslation;
import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.ItemBuilder;
import xyz.xenondevs.invui.item.impl.SuppliedItem; import xyz.xenondevs.invui.item.impl.SuppliedItem;
public class ChangeBothItem extends SuppliedItem { public class ChangeBothItem {
public ChangeBothItem() { private final I18N i18n;
super(() -> {
public ChangeBothItem(Player player) {
this.i18n = new I18N(player);
}
public SuppliedItem get() {
return new SuppliedItem(() -> {
final ItemBuilder builder = new ItemBuilder(Material.TOTEM_OF_UNDYING); final ItemBuilder builder = new ItemBuilder(Material.TOTEM_OF_UNDYING);
builder.setDisplayName("§6Skin §fand §6name §fchange"); final ItemTranslation translation = i18n.translateItem(I18NDict.GUI.Home.CHANGE_BOTH);
builder.addLoreLines("§7Will open a GUI to change both your name and your skin."); builder.setDisplayName(translation.getName());
translation.getLore().forEach(builder::addLoreLines);
return builder; return builder;
}, click -> { }, click -> {
final ClickType clickType = click.getClickType(); final ClickType clickType = click.getClickType();

View file

@ -1,17 +1,28 @@
package xyz.atnrch.nicko.gui.items.appearance; package xyz.atnrch.nicko.gui.items.appearance;
import org.bukkit.entity.Player;
import xyz.atnrch.nicko.anvil.AnvilManager; import xyz.atnrch.nicko.anvil.AnvilManager;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import xyz.atnrch.nicko.i18n.I18N;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.i18n.ItemTranslation;
import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.ItemBuilder;
import xyz.xenondevs.invui.item.impl.SuppliedItem; import xyz.xenondevs.invui.item.impl.SuppliedItem;
public class ChangeNameItem extends SuppliedItem { public class ChangeNameItem {
public ChangeNameItem() { private final I18N i18n;
super(() -> {
public ChangeNameItem(Player player) {
this.i18n = new I18N(player);
}
public SuppliedItem get() {
return new SuppliedItem(() -> {
final ItemBuilder builder = new ItemBuilder(Material.NAME_TAG); final ItemBuilder builder = new ItemBuilder(Material.NAME_TAG);
builder.setDisplayName("Change §6name"); final ItemTranslation translation = i18n.translateItem(I18NDict.GUI.Home.CHANGE_NAME);
builder.addLoreLines("§7Will open a GUI to change your name only."); builder.setDisplayName(translation.getName());
translation.getLore().forEach(builder::addLoreLines);
return builder; return builder;
}, click -> { }, click -> {
final ClickType clickType = click.getClickType(); final ClickType clickType = click.getClickType();

View file

@ -3,15 +3,27 @@ package xyz.atnrch.nicko.gui.items.appearance;
import xyz.atnrch.nicko.anvil.AnvilManager; import xyz.atnrch.nicko.anvil.AnvilManager;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import xyz.atnrch.nicko.i18n.I18N;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.i18n.ItemTranslation;
import xyz.xenondevs.invui.item.builder.SkullBuilder; import xyz.xenondevs.invui.item.builder.SkullBuilder;
import xyz.xenondevs.invui.item.impl.SuppliedItem; import xyz.xenondevs.invui.item.impl.SuppliedItem;
public class ChangeSkinItem extends SuppliedItem { public class ChangeSkinItem {
private final I18N i18n;
private final Player player;
public ChangeSkinItem(Player player) { public ChangeSkinItem(Player player) {
super(() -> { this.i18n = new I18N(player);
this.player = player;
}
public SuppliedItem get() {
return new SuppliedItem(() -> {
final SkullBuilder builder = new SkullBuilder(player.getName()); final SkullBuilder builder = new SkullBuilder(player.getName());
builder.setDisplayName("Change §6skin"); final ItemTranslation translation = i18n.translateItem(I18NDict.GUI.Home.CHANGE_SKIN);
builder.addLoreLines("§7Will open a GUI to change your skin only."); builder.setDisplayName(translation.getName());
translation.getLore().forEach(builder::addLoreLines);
return builder; return builder;
}, click -> { }, click -> {
final ClickType clickType = click.getClickType(); final ClickType clickType = click.getClickType();

View file

@ -1,17 +1,28 @@
package xyz.atnrch.nicko.gui.items.home; package xyz.atnrch.nicko.gui.items.home;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import xyz.atnrch.nicko.gui.AdminGUI; import xyz.atnrch.nicko.gui.AdminGUI;
import xyz.atnrch.nicko.i18n.I18N;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.i18n.ItemTranslation;
import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.ItemBuilder;
import xyz.xenondevs.invui.item.impl.SuppliedItem; import xyz.xenondevs.invui.item.impl.SuppliedItem;
public class AdminAccessItem extends SuppliedItem { public class AdminAccessItem {
public AdminAccessItem() { private final I18N i18n;
super(() -> {
public AdminAccessItem(Player player) {
this.i18n = new I18N(player);
}
public SuppliedItem get() {
return new SuppliedItem(() -> {
final ItemBuilder builder = new ItemBuilder(Material.COMMAND_BLOCK_MINECART); final ItemBuilder builder = new ItemBuilder(Material.COMMAND_BLOCK_MINECART);
builder.setDisplayName("Administration panel"); final ItemTranslation translation = i18n.translateItem(I18NDict.GUI.Home.ADMIN);
builder.addLoreLines("§7Configure and manage Nicko."); builder.setDisplayName(translation.getName());
translation.getLore().forEach(builder::addLoreLines);
return builder; return builder;
}, click -> { }, click -> {
final ClickType clickType = click.getClickType(); final ClickType clickType = click.getClickType();

View file

@ -6,6 +6,7 @@ import org.bukkit.event.inventory.ClickType;
import xyz.atnrch.nicko.appearance.AppearanceManager; import xyz.atnrch.nicko.appearance.AppearanceManager;
import xyz.atnrch.nicko.i18n.I18N; import xyz.atnrch.nicko.i18n.I18N;
import xyz.atnrch.nicko.i18n.I18NDict; import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.i18n.ItemTranslation;
import xyz.atnrch.nicko.profile.NickoProfile; import xyz.atnrch.nicko.profile.NickoProfile;
import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.ItemBuilder;
import xyz.xenondevs.invui.item.impl.SuppliedItem; import xyz.xenondevs.invui.item.impl.SuppliedItem;
@ -13,17 +14,22 @@ import xyz.xenondevs.invui.item.impl.SuppliedItem;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
public class ResetItem extends SuppliedItem { public class ResetItem {
public ResetItem() { private final I18N i18n;
super(() -> {
public ResetItem(Player player) {
this.i18n = new I18N(player);
}
public SuppliedItem get() {
return new SuppliedItem(() -> {
final ItemBuilder builder = new ItemBuilder(Material.TNT); final ItemBuilder builder = new ItemBuilder(Material.TNT);
builder.setDisplayName("Reset appearance"); final ItemTranslation translation = i18n.translateItem(I18NDict.GUI.Home.RESET);
builder.addLoreLines("§7Completely remove your disguise."); builder.setDisplayName(translation.getName());
translation.getLore().forEach(builder::addLoreLines);
return builder; return builder;
}, (event) -> { }, (event) -> {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
final I18N i18n = new I18N(player);
final ClickType clickType = event.getClickType(); final ClickType clickType = event.getClickType();
if (clickType.isLeftClick() || clickType.isRightClick()) { if (clickType.isLeftClick() || clickType.isRightClick()) {
final Optional<NickoProfile> optionalProfile = NickoProfile.get(player); final Optional<NickoProfile> optionalProfile = NickoProfile.get(player);

View file

@ -1,17 +1,28 @@
package xyz.atnrch.nicko.gui.items.home; package xyz.atnrch.nicko.gui.items.home;
import org.bukkit.entity.Player;
import xyz.atnrch.nicko.gui.SettingsGUI; import xyz.atnrch.nicko.gui.SettingsGUI;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import xyz.atnrch.nicko.i18n.I18N;
import xyz.atnrch.nicko.i18n.I18NDict;
import xyz.atnrch.nicko.i18n.ItemTranslation;
import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.ItemBuilder;
import xyz.xenondevs.invui.item.impl.SuppliedItem; import xyz.xenondevs.invui.item.impl.SuppliedItem;
public class SettingsAccessItem extends SuppliedItem { public class SettingsAccessItem {
public SettingsAccessItem() { private final I18N i18n;
super(() -> {
public SettingsAccessItem(Player player) {
this.i18n = new I18N(player);
}
public SuppliedItem get() {
return new SuppliedItem(() -> {
final ItemBuilder builder = new ItemBuilder(Material.COMPARATOR); final ItemBuilder builder = new ItemBuilder(Material.COMPARATOR);
builder.setDisplayName("Settings"); final ItemTranslation translation = i18n.translateItem(I18NDict.GUI.Home.SETTINGS);
builder.addLoreLines("§7Configure your experience."); builder.setDisplayName(translation.getName());
translation.getLore().forEach(builder::addLoreLines);
return builder; return builder;
}, click -> { }, click -> {
final ClickType clickType = click.getClickType(); final ClickType clickType = click.getClickType();

View file

@ -74,6 +74,11 @@ public class I18NDict {
public static final String TITLE = HOME_KEY + "title"; public static final String TITLE = HOME_KEY + "title";
public static final String ADMIN = HOME_KEY + "admin"; public static final String ADMIN = HOME_KEY + "admin";
public static final String CHANGE_NAME = HOME_KEY + "change_name";
public static final String CHANGE_SKIN = HOME_KEY + "change_skin";
public static final String CHANGE_BOTH = HOME_KEY + "change_both";
public static final String RESET = HOME_KEY + "reset";
public static final String SETTINGS = HOME_KEY + "settings";
} }
public static class Settings { public static class Settings {

View file

@ -41,7 +41,7 @@ gui:
settings: settings:
name: "Settings" name: "Settings"
lore: lore:
- "Configure your experience." - "Fine tune your experience with Nicko."
change_name: change_name:
name: "§6Nickname §fchange" name: "§6Nickname §fchange"
change_skin: change_skin:
@ -53,7 +53,7 @@ gui:
lore: lore:
- "Completely remove your disguise." - "Completely remove your disguise."
admin: admin:
gui_title: "Nicko > Administration" title: "Nicko > Administration"
manage_cache: manage_cache:
name: "Manage §6skin §fcache..." name: "Manage §6skin §fcache..."
lore: lore:
@ -63,6 +63,7 @@ gui:
lore: lore:
- "§7See players' disguise information." - "§7See players' disguise information."
settings: settings:
title: "Nicko > Settings"
language: language:
name: "Language" name: "Language"
lore: lore:

View file

@ -41,7 +41,7 @@ gui:
settings: settings:
name: "Paramètres" name: "Paramètres"
lore: lore:
- "Configurez votre expérience." - "Gérez votre expérience avec Nicko."
change_name: change_name:
name: "Changer le §6pseudo" name: "Changer le §6pseudo"
change_skin: change_skin:
@ -49,20 +49,21 @@ gui:
change_both: change_both:
name: "Changer les §6deux" name: "Changer les §6deux"
reset: reset:
name: "Réinitialiser l''apparence" name: "Réinitialiser l'apparence"
lore: lore:
- "Supprime complètement votre déguisement." - "Supprime complètement votre déguisement."
admin: admin:
title: "Nicko > Administration" title: "Nicko > Administration"
manage_cache: manage_cache:
name: "Gérer le cache d''§6apparences..." name: "Gérer le cache d'§6apparences..."
lore: lore:
- "§7Accédez à la gestion du cache d''apparences." - "§7Accédez à la gestion du cache d'apparences."
manage_player: manage_player:
name: "Vérifier un joueur..." name: "Vérifier un joueur..."
lore: lore:
- "§7Vérifiez les informations de déguisement d'un joueur." - "§7Vérifiez les informations de déguisement d'un joueur."
settings: settings:
title: "Nicko > Paramètres"
language: language:
name: "Langage" name: "Langage"
lore: lore: