9
0
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:
LoJoSho
2023-06-08 21:30:05 -05:00
parent 813642ee92
commit bf7517ab20
10 changed files with 85 additions and 13 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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(

View File

@@ -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 {

View File

@@ -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();
});