mirror of
https://github.com/HibiscusMC/HMCCosmetics.git
synced 2025-12-30 12:29:16 +00:00
feat: text can now be applied above player while emote playing
This commit is contained in:
@@ -480,7 +480,7 @@ public class CosmeticCommand implements CommandExecutor {
|
||||
return true;
|
||||
}
|
||||
CosmeticUser user = CosmeticUsers.getUser(player);
|
||||
user.getUserEmoteManager().playEmote(EmoteManager.get(args[1]));
|
||||
user.getUserEmoteManager().playEmote(args[1]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,11 +9,13 @@ import org.spongepowered.configurate.ConfigurationNode;
|
||||
public class CosmeticEmoteType extends Cosmetic {
|
||||
|
||||
private final String animationId;
|
||||
private final String text;
|
||||
|
||||
public CosmeticEmoteType(String id, ConfigurationNode config) {
|
||||
super(id, config);
|
||||
|
||||
animationId = config.node("animation").getString();
|
||||
text = config.node("text").getString();
|
||||
MessagesUtil.sendDebugMessages("CosmeticEmoteType Animation id " + animationId);
|
||||
}
|
||||
|
||||
@@ -29,4 +31,8 @@ public class CosmeticEmoteType extends Cosmetic {
|
||||
public String getAnimationId() {
|
||||
return animationId;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBackpackType;
|
||||
import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticBalloonType;
|
||||
import com.hibiscusmc.hmccosmetics.user.manager.UserBalloonManager;
|
||||
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Entity;
|
||||
@@ -27,6 +28,8 @@ public interface NMSHandler {
|
||||
|
||||
Entity spawnHMCParticleCloud(Location location);
|
||||
|
||||
Entity spawnDisplayEntity(Location location, String text);
|
||||
|
||||
UserBalloonManager spawnBalloon(CosmeticUser user, CosmeticBalloonType cosmeticBalloonType);
|
||||
|
||||
void equipmentSlotUpdate(
|
||||
|
||||
@@ -4,30 +4,38 @@ import com.hibiscusmc.hmccosmetics.api.PlayerEmoteStartEvent;
|
||||
import com.hibiscusmc.hmccosmetics.api.PlayerEmoteStopEvent;
|
||||
import com.hibiscusmc.hmccosmetics.cosmetic.types.CosmeticEmoteType;
|
||||
import com.hibiscusmc.hmccosmetics.emotes.EmoteManager;
|
||||
import com.hibiscusmc.hmccosmetics.nms.NMSHandlers;
|
||||
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
|
||||
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class UserEmoteManager {
|
||||
|
||||
CosmeticUser user;
|
||||
private CosmeticUser user;
|
||||
private UserEmoteModel model;
|
||||
private Entity textEntity;
|
||||
|
||||
public UserEmoteManager(CosmeticUser user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public void playEmote(@NotNull CosmeticEmoteType cosmeticEmoteType) {
|
||||
MessagesUtil.sendDebugMessages("playEmote " + cosmeticEmoteType.getAnimationId());
|
||||
playEmote(EmoteManager.get(cosmeticEmoteType.getAnimationId()));
|
||||
public void playEmote(String animationId) {
|
||||
MessagesUtil.sendDebugMessages("playEmote " + animationId);
|
||||
playEmote(EmoteManager.get(animationId), null);
|
||||
}
|
||||
|
||||
public void playEmote(String animationId) {
|
||||
public void playEmote(@NotNull CosmeticEmoteType cosmeticEmoteType) {
|
||||
MessagesUtil.sendDebugMessages("playEmote " + cosmeticEmoteType.getAnimationId());
|
||||
playEmote(EmoteManager.get(cosmeticEmoteType.getAnimationId()), cosmeticEmoteType.getText());
|
||||
}
|
||||
|
||||
public void playEmote(String emoteAnimation, String text) {
|
||||
if (isPlayingEmote()) return;
|
||||
if (user.isInWardrobe()) return;
|
||||
// API
|
||||
PlayerEmoteStartEvent event = new PlayerEmoteStartEvent(user, animationId);
|
||||
PlayerEmoteStartEvent event = new PlayerEmoteStartEvent(user, emoteAnimation);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
@@ -35,7 +43,14 @@ public class UserEmoteManager {
|
||||
// Internal
|
||||
try {
|
||||
model = new UserEmoteModel(user);
|
||||
model.playAnimation(animationId);
|
||||
// Play animation id
|
||||
if (emoteAnimation != null) {
|
||||
model.playAnimation(emoteAnimation);
|
||||
}
|
||||
// Show the text
|
||||
if (text != null && textEntity == null) {
|
||||
textEntity = NMSHandlers.getHandler().spawnDisplayEntity(user.getPlayer().getLocation().add(0, 3, 0), text);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -56,6 +71,17 @@ public class UserEmoteManager {
|
||||
}
|
||||
// Internal
|
||||
model.stopAnimation();
|
||||
if (textEntity != null) {
|
||||
textEntity.remove();
|
||||
textEntity = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void despawnTextEntity() {
|
||||
if (textEntity != null) {
|
||||
textEntity.remove();
|
||||
textEntity = null;
|
||||
}
|
||||
}
|
||||
|
||||
public enum StopEmoteReason {
|
||||
|
||||
@@ -36,9 +36,6 @@ public class UserEmoteModel extends PlayerModel {
|
||||
|
||||
@Override
|
||||
public void playAnimation(@NotNull String id) {
|
||||
if (id.contains(":")) id = id.split(":", 2)[1]; // A:B -> B -> B.B.B
|
||||
if (!id.contains(".")) id = id + "." + id + "." + id; // Make into a format that playerAnimator works with. Requires 3 splits.
|
||||
|
||||
super.playAnimation(id);
|
||||
|
||||
emotePlaying = id;
|
||||
@@ -122,6 +119,7 @@ public class UserEmoteModel extends PlayerModel {
|
||||
|
||||
if (user.getPlayer() != null) player.setInvisible(false);
|
||||
PacketManager.equipmentSlotUpdate(player, false, outsideViewers);
|
||||
user.getUserEmoteManager().despawnTextEntity();
|
||||
user.showPlayer();
|
||||
user.showCosmetics();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user