Skip to content

Commit

Permalink
Merge pull request #13 from Matt-MX/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
Matt-MX authored Sep 29, 2024
2 parents 17eb7fd + c5b663f commit 5a364e3
Show file tree
Hide file tree
Showing 11 changed files with 91 additions and 19 deletions.
4 changes: 0 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,9 @@ tasks {
downloadPlugins {
hangar("ViaVersion", "5.0.1")
hangar("ViaBackwards", "5.0.1")
hangar("PlaceholderAPI", "2.11.6")

// For testing groups in config.yml
url("https://download.luckperms.net/1556/bukkit/loader/LuckPerms-Bukkit-5.4.141.jar")

// For testing TAB hook
github("NEZNAMY", "TAB", "4.1.8", "TAB.v4.1.8.jar")
}
}
}
Expand Down
11 changes: 3 additions & 8 deletions src/main/java/com/mattmx/nametags/EventsListener.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
package com.mattmx.nametags;

import com.mattmx.nametags.config.TextDisplayMetaConfiguration;
import com.mattmx.nametags.entity.NameTagEntity;
import com.mattmx.nametags.entity.trait.RefreshTrait;
import com.mattmx.nametags.entity.trait.SneakTrait;
import com.mattmx.nametags.event.NameTagEntityCreateEvent;
import org.bukkit.Color;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
Expand All @@ -18,11 +14,10 @@ public class EventsListener implements Listener {

@EventHandler
public void onPlayerJoin(@NotNull PlayerJoinEvent event) {
final NameTagEntity tag = NameTags.getInstance()
NameTags.getInstance()
.getEntityManager()
.getOrCreateNameTagEntity(event.getPlayer());

tag.updateVisibility();
.getOrCreateNameTagEntity(event.getPlayer())
.updateVisibility();
}

@EventHandler
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/mattmx/nametags/NameTags.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@
import com.github.retrooper.packetevents.PacketEventsAPI;
import com.mattmx.nametags.config.ConfigDefaultsListener;
import com.mattmx.nametags.entity.NameTagEntityManager;
import com.mattmx.nametags.hook.GlowingEffectHook;
import com.mattmx.nametags.hook.NeznamyTABHook;
import me.tofaa.entitylib.APIConfig;
import me.tofaa.entitylib.EntityLib;
import me.tofaa.entitylib.spigot.SpigotEntityLibPlatform;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.HandlerList;
import org.bukkit.permissions.Permission;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -50,6 +52,7 @@ public void onEnable() {
final PacketEventsAPI<?> packetEvents = PacketEvents.getAPI();

packetEvents.getEventManager().registerListener(packetListener);
// packetEvents.getEventManager().registerListener(new GlowingEffectHook());

NeznamyTABHook.inject(this);

Expand Down
25 changes: 24 additions & 1 deletion src/main/java/com/mattmx/nametags/NameTagsCommand.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
package com.mattmx.nametags;

import com.mattmx.nametags.entity.NameTagEntity;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

import java.util.UUID;

public class NameTagsCommand implements CommandExecutor {
private final @NotNull NameTags plugin;

Expand All @@ -16,7 +22,24 @@ public NameTagsCommand(@NotNull NameTags plugin) {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
this.plugin.reloadConfig();
sender.sendMessage(Component.text("Reloaded!"));

for (final Player player : Bukkit.getOnlinePlayers()) {
final NameTagEntity tag = plugin.getEntityManager().removeEntity(player);

if (tag == null) continue;

tag.destroy();

final NameTagEntity newTag = plugin.getEntityManager().getOrCreateNameTagEntity(player);

for (final UUID viewer : tag.getPassenger().getViewers()) {
newTag.getPassenger().addViewer(viewer);
}

newTag.updateVisibility();
}

sender.sendMessage(Component.text("Reloaded!").color(NamedTextColor.GREEN));
return false;
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/mattmx/nametags/OutgoingPacketListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public void onPacketSend(@NotNull PacketSendEvent event) {
}
}
case PacketType.Play.Server.ENTITY_EFFECT -> {
// TODO per-player impl
final WrapperPlayServerEntityEffect packet = new WrapperPlayServerEntityEffect(event);

if (packet.getPotionType() != PotionTypes.INVISIBILITY) return;
Expand All @@ -65,6 +66,7 @@ public void onPacketSend(@NotNull PacketSendEvent event) {
nameTagEntity.updateVisibility(true);
}
case PacketType.Play.Server.REMOVE_ENTITY_EFFECT -> {
// TODO per-player impl
final WrapperPlayServerRemoveEntityEffect packet = new WrapperPlayServerRemoveEntityEffect(event);

if (packet.getPotionType() != PotionTypes.INVISIBILITY) return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,20 @@ private ConfigurationSection defaultSection() {
public void onCreate(@NotNull NameTagEntityCreateEvent event) {
if (!(event.getNameTag().getBukkitEntity() instanceof Player player)) return;

// By default, we shouldn't notify until we have finished processing.
event.getNameTag()
.getPassenger()
.getEntityMeta()
.setNotifyAboutChanges(false);

long refreshMillis = plugin.getConfig().getLong("defaults.refresh-every", 50);

event.getNameTag()
.getTraits()
.getOrAddTrait(RefreshTrait.class, () ->
RefreshTrait.ofSeconds(
NameTags.getInstance(),
1L,
RefreshTrait.ofMillis(
plugin,
refreshMillis,
(entity) -> {
TextDisplayMetaConfiguration.applyMeta(defaultSection(), entity.getMeta());
TextDisplayMetaConfiguration.applyTextMeta(defaultSection(), entity.getMeta(), player, player);
Expand All @@ -52,13 +60,13 @@ public void onCreate(@NotNull NameTagEntityCreateEvent event) {
TextDisplayMetaConfiguration.applyTextMeta(e.getValue(), entity.getMeta(), player, player);
});

entity.updateVisibility();

if (entity.getMeta().getBillboardConstraints() == AbstractDisplayMeta.BillboardConstraints.CENTER) {
// Look passenger down to remove debug getting in the way
entity.getPassenger().rotateHead(0f, 90f);
}

entity.updateVisibility();
entity.getPassenger().refresh();
}
)
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/mattmx/nametags/config/ConfigHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public class ConfigHelper {
@NotNull Function<String, T> provider,
@NotNull Consumer<T> take
) {
if (section.get(key) == null) return null;

Optional<T> optional = Optional.ofNullable(provider.apply(key));

optional.ifPresent(take);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ public static void applyMeta(@NotNull ConfigurationSection section, @NotNull Tex
}
});

// TODO(matt): impl other features
ConfigHelper.takeIfPresent(section, "see-through", section::getBoolean, (seeThrough) -> {
if (to.isSeeThrough() != seeThrough) {
to.setSeeThrough(seeThrough);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,12 @@ public void onDestroy() {
return new RefreshTrait(plugin, seconds, TimeUnit.SECONDS, update);
}

public static @NotNull RefreshTrait ofMillis(@NotNull JavaPlugin plugin, long millis, Consumer<NameTagEntity> update) {
return new RefreshTrait(plugin, millis, TimeUnit.MILLISECONDS, update);
}

public static @NotNull RefreshTrait ofTicks(@NotNull JavaPlugin plugin, long ticks, Consumer<NameTagEntity> update) {
return new RefreshTrait(plugin, ticks * 50, TimeUnit.MILLISECONDS, update);
return ofMillis(plugin, ticks * 50, update);
}

}
38 changes: 38 additions & 0 deletions src/main/java/com/mattmx/nametags/hook/GlowingEffectHook.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.mattmx.nametags.hook;

import com.github.retrooper.packetevents.event.PacketListenerAbstract;
import com.github.retrooper.packetevents.event.PacketSendEvent;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataType;
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityMetadata;
import com.mattmx.nametags.NameTags;
import com.mattmx.nametags.entity.NameTagEntity;
import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata;

public class GlowingEffectHook extends PacketListenerAbstract {

@Override
public void onPacketSend(PacketSendEvent event) {
if (event.getPacketType() == PacketType.Play.Server.ENTITY_METADATA) return;
final WrapperPlayServerEntityMetadata packet = new WrapperPlayServerEntityMetadata(event);

final NameTagEntity entity = NameTags.getInstance()
.getEntityManager()
.getNameTagEntityById(packet.getEntityId());

if (entity == null) return;

Metadata meta = new Metadata(packet.getEntityId());

packet.getEntityMetadata().forEach((entry) -> meta.setIndex((byte) entry.getIndex(), (EntityDataType<Object>) entry.getType(), entry.getValue()));

EntityMeta wrapper = new EntityMeta(packet.getEntityId(), meta);

if (wrapper.isGlowing()) {
entity.modify((tagMeta) -> {
tagMeta.setSeeThrough(true);
});
}
}
}
2 changes: 2 additions & 0 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ sneak:
defaults:
# If not enabled then plugin simulates vanilla name tags
enabled: true
# How often should we refresh tags (in milliseconds)
refresh-every: 50
text:
- "<white>%player_name%</white>"
- "<blue>%player_ping%ms</blue>"
Expand Down

0 comments on commit 5a364e3

Please sign in to comment.