mirror of
https://github.com/HibiscusMC/HMCCosmetics.git
synced 2025-12-19 15:09:19 +00:00
Fixed unequipping first person cosmetics
This commit is contained in:
@@ -26,7 +26,6 @@ import io.github.fisher2911.hmccosmetics.message.Messages;
|
|||||||
import io.github.fisher2911.hmccosmetics.message.Translation;
|
import io.github.fisher2911.hmccosmetics.message.Translation;
|
||||||
import io.github.fisher2911.hmccosmetics.task.TaskManager;
|
import io.github.fisher2911.hmccosmetics.task.TaskManager;
|
||||||
import io.github.fisher2911.hmccosmetics.user.UserManager;
|
import io.github.fisher2911.hmccosmetics.user.UserManager;
|
||||||
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
|
|
||||||
import me.mattstudios.mf.base.CommandManager;
|
import me.mattstudios.mf.base.CommandManager;
|
||||||
import me.mattstudios.mf.base.CompletionHandler;
|
import me.mattstudios.mf.base.CompletionHandler;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
@@ -75,7 +74,7 @@ public class HMCCosmetics extends JavaPlugin {
|
|||||||
this.settings = new Settings(this);
|
this.settings = new Settings(this);
|
||||||
this.messageHandler = new MessageHandler(this);
|
this.messageHandler = new MessageHandler(this);
|
||||||
this.userManager = new UserManager(this);
|
this.userManager = new UserManager(this);
|
||||||
this.cosmeticManager = new CosmeticManager(new HashMap<>(), new HashMap<>());
|
this.cosmeticManager = new CosmeticManager(new HashMap<>(), new HashMap<>(), new HashMap<>());
|
||||||
this.cosmeticsMenu = new CosmeticsMenu(this);
|
this.cosmeticsMenu = new CosmeticsMenu(this);
|
||||||
this.tokenLoader = new TokenLoader(this);
|
this.tokenLoader = new TokenLoader(this);
|
||||||
|
|
||||||
|
|||||||
@@ -23,10 +23,12 @@ public class CosmeticManager {
|
|||||||
|
|
||||||
private final Map<String, Token> tokenMap;
|
private final Map<String, Token> tokenMap;
|
||||||
private final Map<String, ArmorItem> armorItemMap;
|
private final Map<String, ArmorItem> armorItemMap;
|
||||||
|
private final Map<String, Integer> backpackParticleCounts;
|
||||||
|
|
||||||
public CosmeticManager(final Map<String, Token> tokenMap, final Map<String, ArmorItem> armorItemMap) {
|
public CosmeticManager(final Map<String, Token> tokenMap, final Map<String, ArmorItem> armorItemMap, final Map<String, Integer> backpackParticleCounts) {
|
||||||
this.tokenMap = tokenMap;
|
this.tokenMap = tokenMap;
|
||||||
this.armorItemMap = armorItemMap;
|
this.armorItemMap = armorItemMap;
|
||||||
|
this.backpackParticleCounts = backpackParticleCounts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -82,6 +84,16 @@ public class CosmeticManager {
|
|||||||
this.armorItemMap.clear();
|
this.armorItemMap.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getBackpackParticleCount(final String id) {
|
||||||
|
return this.backpackParticleCounts.getOrDefault(id, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBackpackParticleCount(final ArmorItem armorItem) {
|
||||||
|
return this.getBackpackParticleCount(armorItem.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String PARTICLE_COUNT = "particle-count";
|
||||||
|
|
||||||
public void load() {
|
public void load() {
|
||||||
this.clearItems();
|
this.clearItems();
|
||||||
try {
|
try {
|
||||||
@@ -102,6 +114,10 @@ public class CosmeticManager {
|
|||||||
final WrappedGuiItem item = ArmorItemSerializer.INSTANCE.deserialize(WrappedGuiItem.class, node);
|
final WrappedGuiItem item = ArmorItemSerializer.INSTANCE.deserialize(WrappedGuiItem.class, node);
|
||||||
if (item instanceof ArmorItem armorItem) {
|
if (item instanceof ArmorItem armorItem) {
|
||||||
armorItem.setAction(null);
|
armorItem.setAction(null);
|
||||||
|
if (armorItem.getType() == ArmorItem.Type.SELF_BACKPACK) {
|
||||||
|
final int particleCount = node.node(PARTICLE_COUNT).getInt(0);
|
||||||
|
this.backpackParticleCounts.put(armorItem.getId(), particleCount);
|
||||||
|
}
|
||||||
this.armorItemMap.put(armorItem.getId(), armorItem);
|
this.armorItemMap.put(armorItem.getId(), armorItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ public class PlayerArmor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ArmorItem setItem(final ArmorItem armorItem) {
|
public ArmorItem setItem(final ArmorItem armorItem) {
|
||||||
|
if (armorItem.isEmpty() && armorItem.getType() == ArmorItem.Type.BACKPACK) {
|
||||||
|
this.armorItems.put(ArmorItem.Type.SELF_BACKPACK, armorItem);
|
||||||
|
}
|
||||||
return this.armorItems.put(armorItem.getType(), armorItem);
|
return this.armorItems.put(armorItem.getType(), armorItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,13 +22,13 @@ public class Backpack {
|
|||||||
private final HMCCosmetics plugin;
|
private final HMCCosmetics plugin;
|
||||||
private final int armorStandID;
|
private final int armorStandID;
|
||||||
private final int particleCount = HMCCosmetics.getPlugin(HMCCosmetics.class).getSettings().getCosmeticSettings().getParticleCount();
|
private final int particleCount = HMCCosmetics.getPlugin(HMCCosmetics.class).getSettings().getCosmeticSettings().getParticleCount();
|
||||||
private final List<Integer> IDs = new ArrayList<>();
|
private final List<Integer> particleIDS = new ArrayList<>();
|
||||||
|
|
||||||
public Backpack(HMCCosmetics plugin, int armorStandID) {
|
public Backpack(HMCCosmetics plugin, int armorStandID) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.armorStandID = armorStandID;
|
this.armorStandID = armorStandID;
|
||||||
for (int i = 0; i < particleCount; i++) {
|
for (int i = 0; i < particleCount; i++) {
|
||||||
IDs.add(SpigotReflectionUtil.generateEntityId());
|
particleIDS.add(SpigotReflectionUtil.generateEntityId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,6 +41,21 @@ public class Backpack {
|
|||||||
this.spawnForSelf(other, location);
|
this.spawnForSelf(other, location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateIds(BaseUser<?> owner) {
|
||||||
|
final ArmorItem selfBackpack = owner.getPlayerArmor().getItem(ArmorItem.Type.SELF_BACKPACK);
|
||||||
|
if (selfBackpack.isEmpty()) return;
|
||||||
|
final int particleCount = this.plugin.getCosmeticManager().getBackpackParticleCount(selfBackpack);
|
||||||
|
final int currentSize = this.particleIDS.size();
|
||||||
|
if (currentSize == particleCount) return;
|
||||||
|
if (currentSize < particleCount) {
|
||||||
|
for (int i = currentSize; i < particleCount; i++) {
|
||||||
|
this.particleIDS.add(SpigotReflectionUtil.generateEntityId());
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.particleIDS.subList(particleCount, currentSize).clear();
|
||||||
|
}
|
||||||
|
|
||||||
private void spawnForOther(BaseUser<?> owner, Player other, Location location) {
|
private void spawnForOther(BaseUser<?> owner, Player other, Location location) {
|
||||||
PacketManager.sendEntitySpawnPacket(location, this.armorStandID, EntityTypes.ARMOR_STAND, other);
|
PacketManager.sendEntitySpawnPacket(location, this.armorStandID, EntityTypes.ARMOR_STAND, other);
|
||||||
PacketManager.sendArmorStandMetaContainer(this.armorStandID, other);
|
PacketManager.sendArmorStandMetaContainer(this.armorStandID, other);
|
||||||
@@ -48,7 +63,7 @@ public class Backpack {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void spawnForSelf(Player other, Location location) {
|
private void spawnForSelf(Player other, Location location) {
|
||||||
for (final int id : this.IDs) {
|
for (final int id : this.particleIDS) {
|
||||||
PacketManager.sendEntityNotLivingSpawnPacket(
|
PacketManager.sendEntityNotLivingSpawnPacket(
|
||||||
location,
|
location,
|
||||||
id,
|
id,
|
||||||
@@ -63,14 +78,14 @@ public class Backpack {
|
|||||||
|
|
||||||
public void despawn(Player player) {
|
public void despawn(Player player) {
|
||||||
PacketManager.sendEntityDestroyPacket(this.armorStandID, player);
|
PacketManager.sendEntityDestroyPacket(this.armorStandID, player);
|
||||||
for (Integer id : this.IDs) {
|
for (Integer id : this.particleIDS) {
|
||||||
PacketManager.sendEntityDestroyPacket(id, player);
|
PacketManager.sendEntityDestroyPacket(id, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void despawn() {
|
public void despawn() {
|
||||||
PacketManager.sendEntityDestroyPacket(this.armorStandID, Bukkit.getOnlinePlayers());
|
PacketManager.sendEntityDestroyPacket(this.armorStandID, Bukkit.getOnlinePlayers());
|
||||||
for (Integer id : this.IDs) {
|
for (Integer id : this.particleIDS) {
|
||||||
PacketManager.sendEntityDestroyPacket(id, Bukkit.getOnlinePlayers());
|
PacketManager.sendEntityDestroyPacket(id, Bukkit.getOnlinePlayers());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,7 +121,6 @@ public class Backpack {
|
|||||||
itemStack
|
itemStack
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
||||||
PacketManager.sendEquipmentPacket(equipment, this.armorStandID, other);
|
PacketManager.sendEquipmentPacket(equipment, this.armorStandID, other);
|
||||||
PacketManager.sendArmorStandMetaContainer(this.armorStandID, other);
|
PacketManager.sendArmorStandMetaContainer(this.armorStandID, other);
|
||||||
PacketManager.sendRotationPacket(this.armorStandID, location, false, other);
|
PacketManager.sendRotationPacket(this.armorStandID, location, false, other);
|
||||||
@@ -115,16 +129,16 @@ public class Backpack {
|
|||||||
PacketManager.sendRidingPacket(owner.getEntityId(), this.armorStandID, other);
|
PacketManager.sendRidingPacket(owner.getEntityId(), this.armorStandID, other);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < this.IDs.size(); i++) {
|
for (int i = 0; i < this.particleIDS.size(); i++) {
|
||||||
final int id = this.IDs.get(i);
|
final int id = this.particleIDS.get(i);
|
||||||
PacketManager.sendCloudMetaData(id, other);
|
PacketManager.sendCloudMetaData(id, other);
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
PacketManager.sendRidingPacket(owner.getEntityId(), id, other);
|
PacketManager.sendRidingPacket(owner.getEntityId(), id, other);
|
||||||
} else {
|
} else {
|
||||||
PacketManager.sendRidingPacket(this.IDs.get(i - 1), id, other);
|
PacketManager.sendRidingPacket(this.particleIDS.get(i - 1), id, other);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PacketManager.sendRidingPacket(IDs.get(IDs.size() - 1), this.armorStandID, other);
|
PacketManager.sendRidingPacket(particleIDS.get(particleIDS.size() - 1), this.armorStandID, other);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,9 @@ public class UserManager {
|
|||||||
final ArmorItem.Type type = armorItem.getType();
|
final ArmorItem.Type type = armorItem.getType();
|
||||||
if (type == ArmorItem.Type.BALLOON) user.despawnBalloon();
|
if (type == ArmorItem.Type.BALLOON) user.despawnBalloon();
|
||||||
user.setItem(event.getCosmeticItem().getArmorItem());
|
user.setItem(event.getCosmeticItem().getArmorItem());
|
||||||
|
if (armorItem.getType() == ArmorItem.Type.BACKPACK && armorItem.isEmpty()) {
|
||||||
|
user.removeItem(ArmorItem.Type.SELF_BACKPACK);
|
||||||
|
}
|
||||||
if (!sendPacket) {
|
if (!sendPacket) {
|
||||||
user.setArmorUpdated(false);
|
user.setArmorUpdated(false);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user