mirror of
https://github.com/HibiscusMC/HMCCosmetics.git
synced 2025-12-29 11:59:21 +00:00
Off hand works now, and added some database converter stuff
This commit is contained in:
@@ -20,7 +20,6 @@ import org.bstats.bukkit.Metrics;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
@@ -80,7 +79,7 @@ public class HMCCosmetics extends JavaPlugin {
|
||||
new ClickListener(this),
|
||||
new TeleportListener(this),
|
||||
new RespawnListener(this),
|
||||
new HatRemoveFixListener(this)
|
||||
new CosmeticFixListener(this)
|
||||
).
|
||||
forEach(
|
||||
listener -> this.getServer().getPluginManager().registerEvents(listener, this)
|
||||
|
||||
@@ -43,17 +43,24 @@ public class Database {
|
||||
protected final HMCCosmetics plugin;
|
||||
private final ConnectionSource dataSource;
|
||||
|
||||
private final DatabaseType databaseType;
|
||||
|
||||
final Dao<UserDAO, UUID> userDao;
|
||||
final Dao<ArmorItemDAO, UserDAO> armorItemDao;
|
||||
|
||||
public Database(final HMCCosmetics plugin, final ConnectionSource dataSource) throws SQLException {
|
||||
public Database(
|
||||
final HMCCosmetics plugin,
|
||||
final ConnectionSource dataSource,
|
||||
final DatabaseType databaseType) throws SQLException {
|
||||
this.plugin = plugin;
|
||||
this.dataSource = dataSource;
|
||||
this.userDao = DaoManager.createDao(this.dataSource, UserDAO.class);
|
||||
this.armorItemDao = DaoManager.createDao(this.dataSource, ArmorItemDAO.class);
|
||||
this.databaseType = databaseType;
|
||||
}
|
||||
|
||||
public void load() {
|
||||
new DatabaseConverter(this.plugin, this).convert();
|
||||
this.createTables();
|
||||
}
|
||||
|
||||
@@ -100,6 +107,7 @@ public class Database {
|
||||
try {
|
||||
final UserDAO userDAO = new UserDAO(user.getUuid());
|
||||
this.userDao.assignEmptyForeignCollection(userDAO, "armorItems");
|
||||
|
||||
for (final ArmorItem armorItem : user.getPlayerArmor().getArmorItems()) {
|
||||
final ArmorItemDAO dao = ArmorItemDAO.fromArmorItem(armorItem);
|
||||
dao.setUser(userDAO);
|
||||
@@ -124,7 +132,23 @@ public class Database {
|
||||
}
|
||||
}
|
||||
|
||||
// public abstract void close();
|
||||
protected ConnectionSource getDataSource() {
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
public DatabaseType getDatabaseType() {
|
||||
return databaseType;
|
||||
}
|
||||
|
||||
public Dao<UserDAO, UUID> getUserDao() {
|
||||
return userDao;
|
||||
}
|
||||
|
||||
public Dao<ArmorItemDAO, UserDAO> getArmorItemDao() {
|
||||
return armorItemDao;
|
||||
}
|
||||
|
||||
// public abstract void close();
|
||||
//
|
||||
// public abstract String getSaveStatement();
|
||||
//
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
package io.github.fisher2911.hmccosmetics.database;
|
||||
|
||||
import io.github.fisher2911.hmccosmetics.HMCCosmetics;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.UUID;
|
||||
|
||||
public class DatabaseConverter {
|
||||
|
||||
private final HMCCosmetics plugin;
|
||||
private final Database database;
|
||||
|
||||
public DatabaseConverter(final HMCCosmetics plugin, final Database database) {
|
||||
this.database = database;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
private static final String FILE_NAME = "info.yml";
|
||||
|
||||
public void convert() {
|
||||
final File folder = new File(this.plugin.getDataFolder(), "database");
|
||||
|
||||
final File file = Path.of(
|
||||
folder.getPath(),
|
||||
FILE_NAME
|
||||
).toFile();
|
||||
|
||||
|
||||
if (!file.exists()) {
|
||||
this.plugin.saveResource("database" + File.separator + FILE_NAME, true);
|
||||
}
|
||||
|
||||
final int version = YamlConfiguration.loadConfiguration(file).getInt("version");
|
||||
|
||||
this.convert(version);
|
||||
}
|
||||
|
||||
private void convert(final int version) {
|
||||
|
||||
}
|
||||
|
||||
private void convertVersionOne() {
|
||||
// switch (this.database.getDatabaseType()) {
|
||||
//
|
||||
// }
|
||||
final String query = "SELECT * from user";
|
||||
try (final PreparedStatement statement = this.database.getDataSource().getReadOnlyConnection("user").
|
||||
getUnderlyingConnection().prepareStatement(query)) {
|
||||
final ResultSet results = statement.executeQuery();
|
||||
while (results.next()) {
|
||||
System.out.println(results.getObject(1, UUID.class));
|
||||
System.out.println(results.getString(2));
|
||||
System.out.println(results.getString(3));
|
||||
System.out.println(results.getInt(4));
|
||||
}
|
||||
} catch (final SQLException exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,11 @@ public class DatabaseFactory {
|
||||
|
||||
final HikariDataSource source = new HikariDataSource(hikari);
|
||||
|
||||
yield new Database(plugin, new DataSourceConnectionSource(source, jdbcUrl));
|
||||
yield new Database(
|
||||
plugin,
|
||||
new DataSourceConnectionSource(source, jdbcUrl),
|
||||
DatabaseType.MYSQL
|
||||
);
|
||||
}
|
||||
case "sqlite" -> {
|
||||
final File folder = new File(plugin.getDataFolder().getPath(), "database");
|
||||
@@ -70,7 +74,9 @@ public class DatabaseFactory {
|
||||
yield new Database(plugin, new JdbcPooledConnectionSource("jdbc:sqlite:" + new File(
|
||||
folder.getPath(),
|
||||
"users.db"
|
||||
).getPath()));
|
||||
).getPath()),
|
||||
DatabaseType.SQLITE
|
||||
);
|
||||
}
|
||||
default -> null;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package io.github.fisher2911.hmccosmetics.database;
|
||||
|
||||
public enum DatabaseType {
|
||||
|
||||
MYSQL,
|
||||
|
||||
SQLITE
|
||||
|
||||
}
|
||||
@@ -1,11 +1,9 @@
|
||||
package io.github.fisher2911.hmccosmetics.database;
|
||||
|
||||
import com.j256.ormlite.support.ConnectionSource;
|
||||
import com.zaxxer.hikari.HikariConfig;
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
import io.github.fisher2911.hmccosmetics.HMCCosmetics;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class MySQLDatabase extends Database {
|
||||
@@ -34,12 +32,16 @@ public class MySQLDatabase extends Database {
|
||||
private final HikariDataSource dataSource;
|
||||
|
||||
public MySQLDatabase(final HMCCosmetics plugin, final ConnectionSource dataSource, final String SAVE_STATEMENT, final String LOAD_STATEMENT, final HikariDataSource dataSource1) throws SQLException {
|
||||
super(plugin, dataSource);
|
||||
super(plugin, dataSource, DatabaseType.MYSQL);
|
||||
this.SAVE_STATEMENT = SAVE_STATEMENT;
|
||||
this.LOAD_STATEMENT = LOAD_STATEMENT;
|
||||
this.dataSource = dataSource1;
|
||||
}
|
||||
|
||||
public void getAll() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
this.dataSource.close();
|
||||
|
||||
@@ -1,15 +1,9 @@
|
||||
package io.github.fisher2911.hmccosmetics.database;
|
||||
|
||||
import com.j256.ormlite.jdbc.DataSourceConnectionSource;
|
||||
import com.j256.ormlite.jdbc.JdbcPooledConnectionSource;
|
||||
import com.j256.ormlite.support.ConnectionSource;
|
||||
import io.github.fisher2911.hmccosmetics.HMCCosmetics;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class SQLiteDatabase extends Database {
|
||||
@@ -17,7 +11,7 @@ public class SQLiteDatabase extends Database {
|
||||
private Connection conn;
|
||||
|
||||
public SQLiteDatabase(final HMCCosmetics plugin, final ConnectionSource connectionSource) throws SQLException {
|
||||
super(plugin, connectionSource);
|
||||
super(plugin, connectionSource, DatabaseType.SQLITE);
|
||||
}
|
||||
|
||||
String SAVE_STATEMENT =
|
||||
|
||||
@@ -263,5 +263,6 @@ public class ArmorItem extends GuiItem {
|
||||
BACKPACK,
|
||||
|
||||
OFF_HAND
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,13 +67,13 @@ public class CosmeticGui {
|
||||
}
|
||||
|
||||
private void setUserArmor(
|
||||
final HumanEntity player,
|
||||
final HumanEntity human,
|
||||
final User user,
|
||||
final ArmorItem armorItem,
|
||||
final InventoryClickEvent event,
|
||||
final GuiAction<InventoryClickEvent> actionIfSet) {
|
||||
|
||||
if (player == null) {
|
||||
if (!(human instanceof final Player player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -82,10 +82,21 @@ public class CosmeticGui {
|
||||
final ArmorItem setTo = this.plugin.getUserManager().setOrUnset(
|
||||
user,
|
||||
armorItem,
|
||||
Messages.getSetMessage(type),
|
||||
Messages.getRemovedMessage(type));
|
||||
if (setTo.isEmpty()) return;
|
||||
actionIfSet.execute(event);
|
||||
Messages.getRemovedMessage(type),
|
||||
Messages.getSetMessage(type)
|
||||
);
|
||||
|
||||
if (!setTo.isEmpty()) {
|
||||
actionIfSet.execute(event);
|
||||
}
|
||||
|
||||
final int slot = event.getSlot();
|
||||
|
||||
final GuiItem guiItem = this.getGuiItem(user, player, slot);
|
||||
|
||||
if (guiItem == null) return;
|
||||
|
||||
this.gui.updateItem(slot, guiItem);
|
||||
}
|
||||
|
||||
public void open(final HumanEntity humanEntity) {
|
||||
@@ -102,9 +113,7 @@ public class CosmeticGui {
|
||||
rows(this.rows).
|
||||
create();
|
||||
|
||||
this.gui.setDefaultClickAction(event -> {
|
||||
event.setCancelled(true);
|
||||
});
|
||||
this.gui.setDefaultClickAction(event -> event.setCancelled(true));
|
||||
|
||||
this.setItems(user);
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@ public class DyeSelectorGui extends CosmeticGui {
|
||||
create();
|
||||
|
||||
final Player player = user.getPlayer();
|
||||
player.sendMessage("Getting Gui");
|
||||
|
||||
if (type != null) {
|
||||
final Integer selected = this.cosmeticsSlots.inverse().get(type);
|
||||
|
||||
@@ -1,46 +1,103 @@
|
||||
package io.github.fisher2911.hmccosmetics.listener;
|
||||
|
||||
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
|
||||
import io.github.fisher2911.hmccosmetics.HMCCosmetics;
|
||||
import io.github.fisher2911.hmccosmetics.user.User;
|
||||
import io.github.fisher2911.hmccosmetics.user.UserManager;
|
||||
import io.th0rgal.oraxen.utils.armorequipevent.ArmorEquipEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.inventory.InventoryInteractEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.EntityEquipment;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.spigotmc.event.entity.EntityMountEvent;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
public class ClickListener implements Listener {
|
||||
|
||||
private final HMCCosmetics plugin;
|
||||
private final UserManager userManager;
|
||||
|
||||
private final List<Integer> equipmentSlots = List.of(39, 40);
|
||||
|
||||
public ClickListener(final HMCCosmetics plugin) {
|
||||
this.plugin = plugin;
|
||||
this.userManager = this.plugin.getUserManager();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onHelmetClick(final InventoryClickEvent event) {
|
||||
public void onCosmeticClick(final InventoryClickEvent event) {
|
||||
final HumanEntity player = event.getWhoClicked();
|
||||
if (!(player instanceof Player)) return;
|
||||
this.fixInventory((Player) player, Set.of(event.getSlot()), event.getClickedInventory());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCosmeticClick(final InventoryDragEvent event) {
|
||||
final HumanEntity player = event.getWhoClicked();
|
||||
if (!(player instanceof Player)) return;
|
||||
this.fixInventory((Player) player, event.getInventorySlots(), event.getView().getBottomInventory());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onArmorEquip(final PlayerArmorChangeEvent event) {
|
||||
final Player player = event.getPlayer();
|
||||
final Optional<User> optionalUser = this.userManager.get(player.getUniqueId());
|
||||
|
||||
if (optionalUser.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getClickedInventory() instanceof final PlayerInventory inventory) {
|
||||
this.doRunnable(optionalUser.get());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onRightClick(final PlayerInteractEvent event) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
|
||||
final Player player = event.getPlayer();
|
||||
|
||||
final ItemStack mainHand = event.getPlayer().getInventory().getItemInMainHand();
|
||||
|
||||
if (mainHand.getType().isBlock() && mainHand.getAmount() > 0) return;
|
||||
|
||||
this.userManager.updateCosmetics(player.getUniqueId(), true);
|
||||
}
|
||||
|
||||
private void fixInventory(final Player player, final Set<Integer> slotsClicked, final Inventory inventory) {
|
||||
final Optional<User> optionalUser = this.userManager.get(player.getUniqueId());
|
||||
|
||||
if (optionalUser.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (inventory instanceof PlayerInventory) {
|
||||
final User user = optionalUser.get();
|
||||
if (event.getSlot() == 39) {
|
||||
Bukkit.getScheduler().runTaskLater(this.plugin, () -> {
|
||||
this.userManager.updateHat(user);
|
||||
}, 1);
|
||||
for (int i : slotsClicked) {
|
||||
if (this.equipmentSlots.contains(i)) {
|
||||
this.doRunnable(user);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void doRunnable(final User user) {
|
||||
Bukkit.getScheduler().runTaskLater(
|
||||
this.plugin, () -> this.userManager.updateCosmetics(user),
|
||||
1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package io.github.fisher2911.hmccosmetics.listener;
|
||||
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
||||
import io.github.fisher2911.hmccosmetics.HMCCosmetics;
|
||||
import io.github.fisher2911.hmccosmetics.user.UserManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.spigotmc.event.entity.EntityMountEvent;
|
||||
|
||||
public class CosmeticFixListener implements Listener {
|
||||
|
||||
private final HMCCosmetics plugin;
|
||||
private final UserManager userManager;
|
||||
|
||||
public CosmeticFixListener(final HMCCosmetics plugin) {
|
||||
this.plugin = plugin;
|
||||
this.userManager = this.plugin.getUserManager();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityMount(final EntityMountEvent event) {
|
||||
if (!(event.getEntity() instanceof final Player player)) return;
|
||||
this.fixCosmetics(player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onOffhandSwap(final PlayerSwapHandItemsEvent event) {
|
||||
final ItemStack offHand = event.getOffHandItem();
|
||||
if (offHand != null && offHand.getType() != Material.AIR) return;
|
||||
this.fixCosmetics(event.getPlayer());
|
||||
}
|
||||
|
||||
private void fixCosmetics(final Player player) {
|
||||
Bukkit.getScheduler().runTaskLater(this.plugin,
|
||||
() -> this.userManager.updateCosmetics(player.getUniqueId(), true), 2);
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package io.github.fisher2911.hmccosmetics.listener;
|
||||
|
||||
import io.github.fisher2911.hmccosmetics.HMCCosmetics;
|
||||
import io.github.fisher2911.hmccosmetics.user.UserManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.spigotmc.event.entity.EntityMountEvent;
|
||||
|
||||
public class HatRemoveFixListener implements Listener {
|
||||
|
||||
private final HMCCosmetics plugin;
|
||||
private final UserManager userManager;
|
||||
|
||||
public HatRemoveFixListener(final HMCCosmetics plugin) {
|
||||
this.plugin = plugin;
|
||||
this.userManager = this.plugin.getUserManager();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(final InventoryClickEvent event) {
|
||||
if (!(event.getWhoClicked() instanceof final Player player)) return;
|
||||
this.fixHat(player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryDrag(final InventoryDragEvent event) {
|
||||
if (!(event.getWhoClicked() instanceof final Player player)) return;
|
||||
this.fixHat(player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void test(final EntityMountEvent event) {
|
||||
if (!(event.getEntity() instanceof final Player player)) return;
|
||||
this.fixHat(player);
|
||||
}
|
||||
|
||||
private void fixHat(final Player player) {
|
||||
Bukkit.getScheduler().runTaskLater(
|
||||
this.plugin,
|
||||
() -> this.userManager.get(player.getUniqueId()).ifPresent(this.userManager::setFakeHelmet),
|
||||
1);
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,11 @@ public class RespawnListener implements Listener {
|
||||
Bukkit.getScheduler().runTaskLater(this.plugin, () -> {
|
||||
final Player player = event.getPlayer();
|
||||
final Optional<User> optionalUser = this.userManager.get(player.getUniqueId());
|
||||
optionalUser.ifPresent(user -> this.userManager.setItem(user, user.getPlayerArmor().getHat()));
|
||||
optionalUser.ifPresent(user -> {
|
||||
user.despawnAttached();
|
||||
this.userManager.updateCosmetics(user);
|
||||
this.userManager.setItem(user, user.getPlayerArmor().getHat());
|
||||
});
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,11 +21,14 @@ import io.github.fisher2911.hmccosmetics.util.Keys;
|
||||
import io.github.fisher2911.hmccosmetics.util.builder.ItemBuilder;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftEntityEquipment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.EntityEquipment;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.awt.*;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -54,17 +57,13 @@ public class UserManager {
|
||||
public void add(final User user) {
|
||||
this.userMap.put(user.getUuid(), user);
|
||||
this.armorStandIdMap.put(user.getArmorStandId(), user);
|
||||
this.setFakeHelmet(user);
|
||||
this.updateCosmetics(user);
|
||||
}
|
||||
|
||||
public Optional<User> get(final UUID uuid) {
|
||||
return Optional.ofNullable(this.userMap.get(uuid));
|
||||
}
|
||||
|
||||
public void updateHat(final User user) {
|
||||
this.setFakeHelmet(user);
|
||||
}
|
||||
|
||||
public void remove(final UUID uuid) {
|
||||
final User user = this.userMap.remove(uuid);
|
||||
|
||||
@@ -72,11 +71,8 @@ public class UserManager {
|
||||
|
||||
this.armorStandIdMap.remove(user.getArmorStandId());
|
||||
|
||||
// todo - remove
|
||||
this.plugin.getDatabase().saveUser(user);
|
||||
|
||||
user.removeAllCosmetics();
|
||||
this.setFakeHelmet(user);
|
||||
this.updateCosmetics(user);
|
||||
user.despawnAttached();
|
||||
}
|
||||
|
||||
@@ -90,9 +86,9 @@ public class UserManager {
|
||||
}
|
||||
|
||||
public void resendCosmetics(final Player player) {
|
||||
for (final User user : this.userMap.values()) {
|
||||
user.spawnArmorStand(player);
|
||||
}
|
||||
for (final User user : this.userMap.values()) {
|
||||
user.spawnArmorStand(player);
|
||||
}
|
||||
}
|
||||
|
||||
private void registerPacketListener() {
|
||||
@@ -142,33 +138,35 @@ public class UserManager {
|
||||
});
|
||||
}
|
||||
|
||||
public void setFakeHelmet(final User user) {
|
||||
public void updateCosmetics(final UUID uuid, final boolean ignoreRestrictions) {
|
||||
this.get(uuid).ifPresent(user -> this.updateCosmetics(user, ignoreRestrictions));
|
||||
|
||||
ItemStack hat = user.getPlayerArmor().getHat().getColored();
|
||||
}
|
||||
|
||||
public void updateCosmetics(final UUID uuid) {
|
||||
this.updateCosmetics(uuid, false);
|
||||
}
|
||||
|
||||
public void updateCosmetics(final User user) {
|
||||
this.updateCosmetics(user, false);
|
||||
}
|
||||
|
||||
public void updateCosmetics(final User user, final boolean ignoreRestrictions) {
|
||||
final Player player = user.getPlayer();
|
||||
|
||||
if (player == null || hat == null) {
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (hat.getType() == Material.AIR) {
|
||||
final EntityEquipment equipment = player.getEquipment();
|
||||
if (equipment != null) {
|
||||
hat = equipment.getHelmet() == null ? hat : equipment.getHelmet();
|
||||
}
|
||||
}
|
||||
final PlayerArmor playerArmor = user.getPlayerArmor();
|
||||
|
||||
final List<Pair<EnumWrappers.ItemSlot, ItemStack>> equipmentList = new ArrayList<>();
|
||||
|
||||
final Map<String, String> placeholders = Map.of(Placeholder.ALLOWED, "true",
|
||||
Placeholder.ENABLED, "true");
|
||||
|
||||
equipmentList.add(new Pair<>(EnumWrappers.ItemSlot.HEAD,
|
||||
ItemBuilder.from(hat).
|
||||
namePlaceholders(placeholders).
|
||||
lorePlaceholders(placeholders).
|
||||
build()
|
||||
));
|
||||
equipmentList.add(
|
||||
new Pair<>(EnumWrappers.ItemSlot.HEAD, this.getCosmeticItem(player, playerArmor.getHat(), EquipmentSlot.HEAD, ignoreRestrictions))
|
||||
);
|
||||
equipmentList.add(
|
||||
new Pair<>(EnumWrappers.ItemSlot.OFFHAND, this.getCosmeticItem(player, playerArmor.getOffHand(), EquipmentSlot.OFF_HAND, ignoreRestrictions))
|
||||
);
|
||||
|
||||
final PacketContainer fake = new PacketContainer(PacketType.Play.Server.ENTITY_EQUIPMENT);
|
||||
|
||||
@@ -184,19 +182,53 @@ public class UserManager {
|
||||
}
|
||||
}
|
||||
|
||||
private ItemStack getCosmeticItem(
|
||||
final Player player,
|
||||
final ArmorItem armorItem,
|
||||
final EquipmentSlot slot,
|
||||
final boolean ignoreRestrictions) {
|
||||
final EntityEquipment equipment = player.getEquipment();
|
||||
|
||||
final Map<String, String> placeholders = Map.of(Placeholder.ALLOWED, "true",
|
||||
Placeholder.ENABLED, "true");
|
||||
|
||||
ItemStack itemStack = ItemBuilder.from(armorItem.getColored()).
|
||||
namePlaceholders(placeholders).
|
||||
lorePlaceholders(placeholders).
|
||||
build();
|
||||
|
||||
if (itemStack.getType() != Material.AIR &&
|
||||
(slot != EquipmentSlot.OFF_HAND || ignoreRestrictions)) return itemStack;
|
||||
|
||||
if (equipment == null) return itemStack;
|
||||
|
||||
final ItemStack equipped = equipment.getItem(slot);
|
||||
|
||||
if (equipped != null && equipped.getType() != Material.AIR) return equipped;
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
public void setItem(final User user, final ArmorItem armorItem) {
|
||||
user.setItem(armorItem);
|
||||
switch (armorItem.getType()) {
|
||||
case HAT -> this.setFakeHelmet(user);
|
||||
case OFF_HAND -> /* todo */ {}
|
||||
case HAT, OFF_HAND -> this.updateCosmetics(user);
|
||||
}
|
||||
Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> this.plugin.getDatabase().saveUser(user));
|
||||
}
|
||||
|
||||
public void removeItem(final User user, final ArmorItem.Type type) {
|
||||
this.setItem(user, ArmorItem.empty(type));
|
||||
}
|
||||
|
||||
// returns set item
|
||||
/**
|
||||
*
|
||||
* @param user
|
||||
* @param armorItem
|
||||
* @param removeMessage
|
||||
* @param setMessage
|
||||
* @return the item that was set
|
||||
*/
|
||||
public ArmorItem setOrUnset(
|
||||
final User user,
|
||||
final ArmorItem armorItem,
|
||||
@@ -204,18 +236,18 @@ public class UserManager {
|
||||
final Message setMessage) {
|
||||
final Player player = user.getPlayer();
|
||||
|
||||
final ArmorItem empty = ArmorItem.empty(armorItem.getType());
|
||||
final ArmorItem.Type type = armorItem.getType();
|
||||
|
||||
final ArmorItem empty = ArmorItem.empty(type);
|
||||
|
||||
if (player == null) {
|
||||
return empty;
|
||||
}
|
||||
|
||||
final ArmorItem check = user.getPlayerArmor().getItem(armorItem.getType());
|
||||
|
||||
final ArmorItem.Type type = armorItem.getType();
|
||||
final ArmorItem check = user.getPlayerArmor().getItem(type);
|
||||
|
||||
if (armorItem.getId().equals(check.getId())) {
|
||||
user.setItem(ArmorItem.empty(type));
|
||||
this.setItem(user, ArmorItem.empty(type));
|
||||
|
||||
messageHandler.sendMessage(
|
||||
player,
|
||||
@@ -225,7 +257,7 @@ public class UserManager {
|
||||
return empty;
|
||||
}
|
||||
|
||||
user.setItem(armorItem);
|
||||
this.setItem(user, armorItem);
|
||||
messageHandler.sendMessage(
|
||||
player,
|
||||
setMessage
|
||||
|
||||
Reference in New Issue
Block a user