Skip to content

Commit

Permalink
Added version support from 1.13.* to 1.19.*.
Browse files Browse the repository at this point in the history
  • Loading branch information
Xezard committed Jul 14, 2022
1 parent fcf81c9 commit 60428b7
Show file tree
Hide file tree
Showing 12 changed files with 437 additions and 143 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# XGlow

![Java](https://img.shields.io/badge/Java-8%2B-brightgreen)
![Spigot](https://img.shields.io/badge/Tested%20on-Spigot%201.16.3-informational)
![Spigot](https://img.shields.io/badge/Tested%20on-Paper%201.13.*%20—%201.19.*-informational)
[![GitHub](https://img.shields.io/github/license/Xezard/XGlow)](https://github.com/Xezard/XGlow/blob/master/LICENSE)
[![Jitpack](https://jitpack.io/v/Xezard/XGlow.svg)](https://jitpack.io/#Xezard/XGlow)
![Lines of code](https://img.shields.io/tokei/lines/github/Xezard/XGlow?label=lines%20of%20code)
Expand All @@ -11,7 +11,7 @@
[![Discord chat](https://img.shields.io/discord/775493797702139914?color=blue&label=discord)](https://discord.gg/JZ9uZ5aXwf)
[![Wakatime](https://wakatime.com/badge/user/d6a049ff-6a4a-43a6-84ca-2a7d63329349/project/c02c20cd-6d72-414f-85e4-58dd3c69520d.svg)](https://wakatime.com/badge/user/d6a049ff-6a4a-43a6-84ca-2a7d63329349/project/c02c20cd-6d72-414f-85e4-58dd3c69520d)

XGlow is a simple API to create glow on your entities. Its also supports animation for glow out of the box.
XGlow is a simple API to create glow on your entities. It's also supports animation for glow out of the box.

> **Important! This API depends on [ProtocolLib](https://github.com/dmulloy2/ProtocolLib)**
Expand Down
11 changes: 5 additions & 6 deletions api/src/main/java/ru/xezard/glow/data/glow/AbstractGlow.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@
package ru.xezard.glow.data.glow;

import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import lombok.experimental.NonFinal;
import ru.xezard.glow.data.glow.manager.GlowsManager;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import lombok.experimental.NonFinal;
import org.bukkit.ChatColor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import ru.xezard.glow.data.glow.manager.GlowsManager;
import ru.xezard.glow.data.glow.processor.GlowProcessor;
import ru.xezard.glow.data.glow.processor.IGlowProcessor;

Expand All @@ -38,19 +38,18 @@
@EqualsAndHashCode(callSuper = false)
public abstract class AbstractGlow
implements IGlow {
static final IGlowProcessor PROCESSOR = new GlowProcessor();

Set<Player> viewers = new HashSet<> ();
Set<Entity> holders = new HashSet<> ();

IGlowProcessor processor;

@Getter
@NonFinal ChatColor color;

@Getter
String name;

public AbstractGlow(ChatColor color, String name) {
this.processor = new GlowProcessor(name);
this.color = color;
this.name = name;

Expand Down
26 changes: 12 additions & 14 deletions api/src/main/java/ru/xezard/glow/data/glow/Glow.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import ru.xezard.glow.packets.AbstractPacket;
import ru.xezard.glow.packets.WrapperPlayServerScoreboardTeam;
import ru.xezard.glow.packets.AbstractWrapperPlayServerScoreboardTeam;

import java.util.ArrayList;
import java.util.HashSet;
Expand Down Expand Up @@ -62,24 +62,23 @@ private void processHolder(boolean add, Entity... entities) {
continue;
}

packets.add(this.processor.createGlowPacket(entity, add));
packets.add(PROCESSOR.createGlowPacket(entity, add));
}

if (packets.isEmpty()) {
return;
}

packets.add(this.processor.createTeamPacket(this.holders, this.color,
add ? WrapperPlayServerScoreboardTeam.Mode.PLAYERS_ADDED :
WrapperPlayServerScoreboardTeam.Mode.PLAYERS_REMOVED));
packets.add(PROCESSOR.createTeamPacket(this.holders, this.color, this.name,
add ? AbstractWrapperPlayServerScoreboardTeam.Mode.PLAYERS_ADDED :
AbstractWrapperPlayServerScoreboardTeam.Mode.PLAYERS_REMOVED));

packets.forEach((packet) -> packet.sendPacket(this.viewers));
}

@Override
public void display(Player... viewers) {
List<AbstractPacket> packets =
this.processor.createGlowPackets(this.holders, true);
List<AbstractPacket> packets = PROCESSOR.createGlowPackets(this.holders, true);

for (Player viewer : viewers) {
if (this.viewers.contains(viewer)) {
Expand All @@ -89,8 +88,8 @@ public void display(Player... viewers) {
this.render(viewer);
}

packets.add(this.processor.createTeamPacket(this.holders, this.color,
WrapperPlayServerScoreboardTeam.Mode.TEAM_UPDATED));
packets.add(PROCESSOR.createTeamPacket(this.holders, this.color, this.name,
AbstractWrapperPlayServerScoreboardTeam.Mode.TEAM_UPDATED));

packets.forEach((packet) -> packet.sendPacket(viewers));
}
Expand All @@ -106,8 +105,7 @@ public void render(Player... viewers) {
}

private void processView(boolean display, Player... viewers) {
List<AbstractPacket> packets =
this.processor.createGlowPackets(this.holders, display);
List<AbstractPacket> packets = PROCESSOR.createGlowPackets(this.holders, display);

for (Player viewer : viewers) {
if (display == this.viewers.contains(viewer)) {
Expand All @@ -122,9 +120,9 @@ private void processView(boolean display, Player... viewers) {
this.viewers.remove(viewer);
}

packets.add(this.processor.createTeamPacket(this.holders, this.color,
display ? WrapperPlayServerScoreboardTeam.Mode.TEAM_CREATED :
WrapperPlayServerScoreboardTeam.Mode.TEAM_REMOVED));
packets.add(PROCESSOR.createTeamPacket(this.holders, this.color, this.name,
display ? AbstractWrapperPlayServerScoreboardTeam.Mode.TEAM_CREATED :
AbstractWrapperPlayServerScoreboardTeam.Mode.TEAM_REMOVED));

packets.forEach((packet) -> packet.sendPacket(viewers));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Entity;
import ru.xezard.glow.packets.AbstractPacket;
import ru.xezard.glow.packets.AbstractWrapperPlayServerScoreboardTeam;
import ru.xezard.glow.packets.WrapperPlayServerEntityMetadata;
import ru.xezard.glow.packets.WrapperPlayServerScoreboardTeam;

Expand All @@ -24,8 +25,6 @@ public class GlowProcessor
static WrappedDataWatcher.Serializer BYTE_SERIALIZER =
WrappedDataWatcher.Registry.get(Byte.class);

String teamName;

@Override
public List<AbstractPacket> createGlowPackets(Set<Entity> entities, boolean glow) {
return entities.stream()
Expand All @@ -34,26 +33,27 @@ public List<AbstractPacket> createGlowPackets(Set<Entity> entities, boolean glow
}

@Override
public AbstractPacket createTeamPacket(Set<Entity> holders, ChatColor color, int mode) {
public AbstractPacket createTeamPacket(Set<Entity> holders, ChatColor color, String teamName,
AbstractWrapperPlayServerScoreboardTeam.Mode mode) {
WrapperPlayServerScoreboardTeam team = new WrapperPlayServerScoreboardTeam();

team.setTeamName(this.teamName);
team.setDisplayName(WrappedChatComponent.fromText(this.teamName));
team.setTeamName(teamName);
team.setDisplayName(WrappedChatComponent.fromText(teamName));
team.setMode(mode);

if (mode == WrapperPlayServerScoreboardTeam.Mode.TEAM_REMOVED) {
return team;
if (mode == AbstractWrapperPlayServerScoreboardTeam.Mode.TEAM_REMOVED) {
return team.getPacket();
}

team.setColor(color);
team.setNameTagVisibility("ALWAYS");
team.setNameTagVisibility(AbstractWrapperPlayServerScoreboardTeam.NameTagVisibility.ALWAYS);

team.setPlayers(holders.stream()
.map((holder) -> holder instanceof OfflinePlayer ?
holder.getName() : holder.getUniqueId().toString())
.collect(Collectors.toList()));

return team;
return team.getPacket();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import org.bukkit.ChatColor;
import org.bukkit.entity.Entity;
import ru.xezard.glow.packets.AbstractPacket;
import ru.xezard.glow.packets.AbstractWrapperPlayServerScoreboardTeam;

import java.util.List;
import java.util.Set;

public interface IGlowProcessor {
AbstractPacket createTeamPacket(Set<Entity> holders, ChatColor color, int mode);
AbstractPacket createTeamPacket(Set<Entity> holders, ChatColor color, String teamName,
AbstractWrapperPlayServerScoreboardTeam.Mode mode);

List<AbstractPacket> createGlowPackets(Set<Entity> entities, boolean enableGlow);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package ru.xezard.glow.packets;

import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer;

import java.util.Collection;
import java.util.List;

public abstract class AbstractWrapperPlayServerScoreboardTeam
extends AbstractPacket
implements IWrapperPlayServerScoreboardTeam {
public static final PacketType TYPE = PacketType.Play.Server.SCOREBOARD_TEAM;

public AbstractWrapperPlayServerScoreboardTeam() {
super(new PacketContainer(TYPE), TYPE);

this.handle.getModifier().writeDefaults();
}

public AbstractWrapperPlayServerScoreboardTeam(PacketContainer packet) {
super(packet, TYPE);
}

@Override
public AbstractPacket getPacket() {
return this;
}

@Override
public String getTeamName() {
return this.handle.getStrings().read(0);
}

@Override
public void setTeamName(String value) {
this.handle.getStrings().write(0, value);
}

@Override
public Mode getMode() {
return Mode.values()[this.handle.getIntegers().read(0)];
}

@Override
public void setMode(Mode value) {
this.handle.getIntegers().write(0, value.ordinal());
}

@Override
@SuppressWarnings("unchecked")
public List<String> getPlayers() {
return (List<String>) this.handle.getSpecificModifier(Collection.class)
.read(0);
}

@Override
public void setPlayers(List<String> value) {
this.handle.getSpecificModifier(Collection.class)
.write(0, value);
}

public enum Mode {
TEAM_CREATED,
TEAM_REMOVED,
TEAM_UPDATED,
PLAYERS_ADDED,
PLAYERS_REMOVED
}

public enum NameTagVisibility {
ALWAYS,
HIDE_FOR_OTHER_TEAMS,
HIDE_FOR_OWN_TEAM,
NEVER
}

public enum CollisionRule {
ALWAYS,
PUSH_OTHER_TEAMS,
PUSH_OWN_TEAM,
NEVER
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package ru.xezard.glow.packets;

import com.comphenix.protocol.wrappers.WrappedChatComponent;
import org.bukkit.ChatColor;

import java.util.List;
import java.util.Optional;

public interface IWrapperPlayServerScoreboardTeam {
AbstractPacket getPacket();

String getTeamName();

void setTeamName(String value);

AbstractWrapperPlayServerScoreboardTeam.Mode getMode();

void setMode(AbstractWrapperPlayServerScoreboardTeam.Mode value);

Optional<WrappedChatComponent> getDisplayName();

void setDisplayName(WrappedChatComponent value);

Optional<WrappedChatComponent> getPrefix();

void setPrefix(WrappedChatComponent value);

Optional<WrappedChatComponent> getSuffix();

void setSuffix(WrappedChatComponent value);

AbstractWrapperPlayServerScoreboardTeam.NameTagVisibility getNameTagVisibility();

void setNameTagVisibility(AbstractWrapperPlayServerScoreboardTeam.NameTagVisibility value);

Optional<ChatColor> getColor();

void setColor(ChatColor value);

AbstractWrapperPlayServerScoreboardTeam.CollisionRule getCollisionRule();

void setCollisionRule(AbstractWrapperPlayServerScoreboardTeam.CollisionRule value);

List<String> getPlayers();

void setPlayers(List<String> value);
}
Loading

0 comments on commit 60428b7

Please sign in to comment.