9
0
mirror of https://github.com/Xiao-MoMi/Custom-Nameplates.git synced 2025-12-28 19:29:17 +00:00
This commit is contained in:
XiaoMoMi
2024-10-07 01:28:26 +08:00
parent 4b2ddf6cd1
commit 2ba7ad95ba
15 changed files with 561 additions and 49 deletions

View File

@@ -38,6 +38,8 @@ dependencies {
compileOnly("org.geysermc.geyser:api:2.4.2-SNAPSHOT")
// Floodgate
compileOnly("org.geysermc.floodgate:api:2.2.3-SNAPSHOT")
// Cosmetics
compileOnly("com.github.FrancoBM12:API-MagicCosmetics:2.2.9")
}
java {

View File

@@ -0,0 +1,125 @@
/*
* Copyright (C) <2022> <XiaoMoMi>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package net.momirealms.customnameplates.bukkit.compatibility.cosmetic;
import com.francobm.magicosmetics.api.Cosmetic;
import com.francobm.magicosmetics.api.CosmeticType;
import com.francobm.magicosmetics.cache.PlayerData;
import com.francobm.magicosmetics.cache.cosmetics.Hat;
import com.francobm.magicosmetics.events.*;
import net.momirealms.customnameplates.api.CNPlayer;
import net.momirealms.customnameplates.api.CustomNameplates;
import net.momirealms.customnameplates.api.feature.tag.TagRenderer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import java.util.concurrent.TimeUnit;
public class MagicCosmeticsHook implements Listener {
private final CustomNameplates plugin;
public MagicCosmeticsHook(CustomNameplates plugin) {
this.plugin = plugin;
}
@EventHandler(ignoreCancelled = true)
public void onChangeCos(CosmeticChangeEquipEvent event) {
final Cosmetic cosmetic = event.getNewCosmetic();
final Player player = event.getPlayer();
if (cosmetic instanceof Hat hat) {
CNPlayer cnPlayer = plugin.getPlayer(player.getUniqueId());
if (cnPlayer != null) {
TagRenderer renderer = plugin.getUnlimitedTagManager().getTagRender(cnPlayer);
if (renderer != null) {
renderer.hatOffset(hat.isHideCosmetic() ? 0 : hat.getOffSetY());
}
}
}
}
@EventHandler (ignoreCancelled = true)
public void onEnterBlackListWorld(PlayerChangeBlacklistEvent event) {
var player = event.getPlayer();
CNPlayer cnPlayer = plugin.getPlayer(player.getUniqueId());
if (cnPlayer != null) {
TagRenderer renderer = plugin.getUnlimitedTagManager().getTagRender(cnPlayer);
if (renderer != null) {
if (event.isInWorldBlacklist()) {
renderer.hatOffset(0);
} else {
PlayerData playerData = PlayerData.getPlayer(player);
if (playerData != null) {
final Cosmetic cosmetic = playerData.getHat();
if (cosmetic instanceof Hat hat) {
renderer.hatOffset(hat.isHideCosmetic() ? 0 : hat.getOffSetY());
}
}
}
}
}
}
@EventHandler (ignoreCancelled = true)
public void onEquip(CosmeticEquipEvent event) {
final Cosmetic cosmetic = event.getCosmetic();
final Player player = event.getPlayer();
if (cosmetic instanceof Hat hat) {
CNPlayer cnPlayer = plugin.getPlayer(player.getUniqueId());
if (cnPlayer != null) {
TagRenderer renderer = plugin.getUnlimitedTagManager().getTagRender(cnPlayer);
if (renderer != null) {
renderer.hatOffset(hat.isHideCosmetic() ? 0 : hat.getOffSetY());
}
}
}
}
@EventHandler (ignoreCancelled = true)
public void onUnEquip(CosmeticUnEquipEvent event) {
final Player player = event.getPlayer();
if (event.getCosmeticType() == CosmeticType.HAT) {
CNPlayer cnPlayer = plugin.getPlayer(player.getUniqueId());
if (cnPlayer != null) {
TagRenderer renderer = plugin.getUnlimitedTagManager().getTagRender(cnPlayer);
if (renderer != null) {
renderer.hatOffset(0);
}
}
}
}
@EventHandler (ignoreCancelled = true)
public void onDataLoaded(PlayerDataLoadEvent event) {
for (Cosmetic cosmetic : event.getEquippedCosmetics()) {
if (cosmetic instanceof Hat hat) {
PlayerData playerData = event.getPlayerData();
plugin.getScheduler().asyncLater(() -> {
CNPlayer cnPlayer = plugin.getPlayer(playerData.getUniqueId());
if (cnPlayer != null) {
TagRenderer renderer = plugin.getUnlimitedTagManager().getTagRender(cnPlayer);
if (renderer != null) {
renderer.hatOffset(hat.isHideCosmetic() ? 0 : hat.getOffSetY());
}
}
}, 100, TimeUnit.MILLISECONDS);
}
}
}
}