9
0
mirror of https://github.com/Xiao-MoMi/Custom-Crops.git synced 2025-12-21 16:09:21 +00:00

text display

This commit is contained in:
XiaoMoMi
2024-03-11 02:50:36 +08:00
parent be10cd1874
commit 4193d491b6
7 changed files with 82 additions and 12 deletions

View File

@@ -58,4 +58,6 @@ public abstract class AdventureManager implements Initable {
public abstract boolean isColorCode(char c);
public abstract void sendTitle(Player player, String title, String subTitle, int fadeIn, int stay, int fadeOut);
public abstract int rgbaToDecimal(String rgba);
}

View File

@@ -39,6 +39,12 @@ public abstract class VersionManager {
return instance.isVersionNewerThan1_19_R2();
}
public static boolean isHigherThan1_20_R2() {
return instance.isVersionNewerThan1_20_R2();
}
public abstract boolean isVersionNewerThan1_20_R2();
public abstract boolean hasRegionScheduler();
public static boolean folia() {

View File

@@ -8,7 +8,7 @@ plugins {
allprojects {
project.group = "net.momirealms"
project.version = "3.4.0.2"
project.version = "3.4.0.3"
apply<JavaPlugin>()
apply(plugin = "java")

View File

@@ -201,4 +201,14 @@ public class AdventureManagerImpl extends AdventureManager {
public boolean isColorCode(char c) {
return c == '§' || c == '&';
}
@Override
public int rgbaToDecimal(String rgba) {
String[] split = rgba.split(",");
int r = Integer.parseInt(split[0]);
int g = Integer.parseInt(split[1]);
int b = Integer.parseInt(split[2]);
int a = Integer.parseInt(split[3]);
return (a << 24) | (r << 16) | (g << 8) | b;
}
}

View File

@@ -21,6 +21,7 @@ import net.kyori.adventure.text.Component;
import net.momirealms.customcrops.api.CustomCropsPlugin;
import net.momirealms.customcrops.api.common.Reloadable;
import net.momirealms.customcrops.api.common.Tuple;
import net.momirealms.customcrops.api.manager.VersionManager;
import net.momirealms.customcrops.api.scheduler.CancellableTask;
import net.momirealms.customcrops.utils.FakeEntityUtils;
import org.bukkit.Bukkit;
@@ -143,10 +144,32 @@ public class HologramManager implements Listener, Reloadable {
int random = ThreadLocalRandom.current().nextInt(Integer.MAX_VALUE);
tupleList.add(Tuple.of(location, random, System.currentTimeMillis() + millis));
this.tuples = tupleList.toArray(new Tuple[0]);
PacketManager.getInstance().send(player, FakeEntityUtils.getSpawnPacket(random, location, EntityType.ARMOR_STAND), FakeEntityUtils.getVanishArmorStandMetaPacket(random, component));
if (VersionManager.isHigherThan1_20_R2()) {
PacketManager.getInstance().send(player,
FakeEntityUtils.getSpawnPacket(random, location.clone().add(0,1.1,0), EntityType.TEXT_DISPLAY),
FakeEntityUtils.get1_20_2TextDisplayMetaPacket(random, component)
);
} else if (VersionManager.isHigherThan1_19_R3()) {
PacketManager.getInstance().send(player,
FakeEntityUtils.getSpawnPacket(random, location.clone().add(0,1.1,0), EntityType.TEXT_DISPLAY),
FakeEntityUtils.get1_19_4TextDisplayMetaPacket(random, component)
);
} else {
PacketManager.getInstance().send(player,
FakeEntityUtils.getSpawnPacket(random, location, EntityType.ARMOR_STAND),
FakeEntityUtils.getVanishArmorStandMetaPacket(random, component)
);
}
} else {
if (VersionManager.isHigherThan1_20_R2()) {
PacketManager.getInstance().send(player, FakeEntityUtils.get1_20_2TextDisplayMetaPacket(entity_id, component));
} else if (VersionManager.isHigherThan1_19_R3()) {
PacketManager.getInstance().send(player, FakeEntityUtils.get1_19_4TextDisplayMetaPacket(entity_id, component));
} else {
PacketManager.getInstance().send(player, FakeEntityUtils.getVanishArmorStandMetaPacket(entity_id, component));
}
}
}
public void removeAll(Player player) {

View File

@@ -38,6 +38,7 @@ public class VersionManagerImpl extends VersionManager {
private final boolean isNewerThan1_19_R2;
private final boolean isNewerThan1_19_R3;
private final boolean isNewerThan1_20;
private final boolean isNewerThan1_20_R2;
private final boolean isNewerThan1_19;
private boolean isMojmap;
@@ -51,6 +52,7 @@ public class VersionManagerImpl extends VersionManager {
int main_ver = Integer.parseInt(split[1]);
if (main_ver >= 20) {
isNewerThan1_20_R2 = Integer.parseInt(split[2].substring(1)) >= 2;
isNewerThan1_19_R2 = true;
isNewerThan1_19_R3 = true;
isNewerThan1_20 = true;
@@ -59,10 +61,12 @@ public class VersionManagerImpl extends VersionManager {
isNewerThan1_19_R2 = Integer.parseInt(split[2].substring(1)) >= 2;
isNewerThan1_19_R3 = Integer.parseInt(split[2].substring(1)) >= 3;
isNewerThan1_20 = false;
isNewerThan1_20_R2 = false;
isNewerThan1_19 = true;
} else {
isNewerThan1_19_R2 = false;
isNewerThan1_19_R3 = false;
isNewerThan1_20_R2 = false;
isNewerThan1_20 = false;
isNewerThan1_19 = false;
}
@@ -83,6 +87,11 @@ public class VersionManagerImpl extends VersionManager {
}
}
@Override
public boolean isVersionNewerThan1_20_R2() {
return isNewerThan1_20_R2;
}
@Override
public boolean hasRegionScheduler() {
return hasRegionScheduler;

View File

@@ -23,6 +23,7 @@ import com.comphenix.protocol.wrappers.*;
import com.google.common.collect.Lists;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.momirealms.customcrops.api.manager.AdventureManager;
import net.momirealms.customcrops.api.manager.VersionManager;
import org.bukkit.Location;
import org.bukkit.entity.EntityType;
@@ -107,15 +108,6 @@ public class FakeEntityUtils {
return metaPacket;
}
public static PacketContainer getItemDisplayMetaPacket(int id, ItemStack itemStack) {
PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
metaPacket.getModifier().write(0, id);
WrappedDataWatcher wrappedDataWatcher = new WrappedDataWatcher();
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(22, WrappedDataWatcher.Registry.getItemStackSerializer(false)), itemStack);
setWrappedDataValue(metaPacket, wrappedDataWatcher);
return metaPacket;
}
private static void setWrappedDataValue(PacketContainer metaPacket, WrappedDataWatcher wrappedDataWatcher) {
List<WrappedDataValue> wrappedDataValueList = Lists.newArrayList();
wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> {
@@ -124,4 +116,32 @@ public class FakeEntityUtils {
});
metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList);
}
public static PacketContainer get1_19_4TextDisplayMetaPacket(int id, Component component) {
PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
metaPacket.getModifier().write(0, id);
WrappedDataWatcher wrappedDataWatcher = new WrappedDataWatcher();
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(22, WrappedDataWatcher.Registry.getChatComponentSerializer(false)), WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(component)));
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(24, WrappedDataWatcher.Registry.get(Integer.class)), AdventureManager.getInstance().rgbaToDecimal("0,0,0,0"));
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(14, WrappedDataWatcher.Registry.get(Byte.class)), (byte) 3);
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(25, WrappedDataWatcher.Registry.get(Byte.class)), (byte) -1);
int mask = 0;
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(26, WrappedDataWatcher.Registry.get(Byte.class)), (byte) mask);
setWrappedDataValue(metaPacket, wrappedDataWatcher);
return metaPacket;
}
public static PacketContainer get1_20_2TextDisplayMetaPacket(int id, Component component) {
PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
metaPacket.getModifier().write(0, id);
WrappedDataWatcher wrappedDataWatcher = new WrappedDataWatcher();
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(23, WrappedDataWatcher.Registry.getChatComponentSerializer(false)), WrappedChatComponent.fromJson(GsonComponentSerializer.gson().serialize(component)));
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(25, WrappedDataWatcher.Registry.get(Integer.class)), AdventureManager.getInstance().rgbaToDecimal("0,0,0,0"));
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(15, WrappedDataWatcher.Registry.get(Byte.class)), (byte) 3);
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(26, WrappedDataWatcher.Registry.get(Byte.class)), (byte) -1);
int mask = 0;
wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(27, WrappedDataWatcher.Registry.get(Byte.class)), (byte) mask);
setWrappedDataValue(metaPacket, wrappedDataWatcher);
return metaPacket;
}
}