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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,9 +144,31 @@ 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 {
|
||||
PacketManager.getInstance().send(player, FakeEntityUtils.getVanishArmorStandMetaPacket(entity_id, component));
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user