From 3c848389c92c49ac391253e03634c9189cc9423e Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Sat, 28 Dec 2024 16:28:56 +0100 Subject: [PATCH] Update structure --- .../src/de/steamwar/entity/RBlockDisplay.java | 20 ++- .../src/de/steamwar/entity/RDisplay.java | 148 +++++++++++++----- .../src/de/steamwar/entity/RItemDisplay.java | 27 +++- .../src/de/steamwar/entity/RTextDisplay.java | 60 ++++--- 4 files changed, 184 insertions(+), 71 deletions(-) diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RBlockDisplay.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RBlockDisplay.java index 6dbb8fb2..53753962 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RBlockDisplay.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RBlockDisplay.java @@ -9,6 +9,8 @@ import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.entity.EntityType; +import java.util.function.Consumer; + @Getter public class RBlockDisplay extends RDisplay { @@ -18,13 +20,23 @@ public class RBlockDisplay extends RDisplay { super(server, EntityType.BLOCK_DISPLAY, location); } - private static final Class iBlockDataClass = Reflection.getClass("{nms.world}.level.block.state.IBlockData"); - private static final Reflection.MethodInvoker getState = Reflection.getTypedMethod(Reflection.getClass("{obc}.block.data.CraftBlockData"), "getState", iBlockDataClass); - private static final Object blockWatcher = BountifulWrapper.impl.getDataWatcherObject(22, iBlockDataClass); + @Override + protected void postSpawn(Consumer packetSink) { + super.postSpawn(packetSink); + sendBlock(packetSink); + } + public void setBlock(BlockData block) { this.block = block; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(blockWatcher, getState.invoke(block))); + sendBlock(o -> server.updateEntity(this, o)); } } + + private static final Class iBlockDataClass = Reflection.getClass("{nms.world}.level.block.state.IBlockData"); + private static final Reflection.MethodInvoker getState = Reflection.getTypedMethod(Reflection.getClass("{obc}.block.data.CraftBlockData"), "getState", iBlockDataClass); + private static final Object blockWatcher = BountifulWrapper.impl.getDataWatcherObject(22, iBlockDataClass); + private void sendBlock(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(blockWatcher, getState.invoke(block))); + } } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RDisplay.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RDisplay.java index 39a8615a..a8819859 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RDisplay.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RDisplay.java @@ -12,6 +12,8 @@ import org.bukkit.util.Transformation; import org.joml.Quaternionf; import org.joml.Vector3f; +import java.util.function.Consumer; + @Getter public abstract class RDisplay extends REntity { @@ -41,104 +43,164 @@ public abstract class RDisplay extends REntity { super(server, entityType, location); } + @Override + protected void postSpawn(Consumer packetSink) { + super.postSpawn(packetSink); + sendTransform(packetSink); + sendInterpolationDuration(packetSink); + sendViewRange(packetSink); + sendShadowRadius(packetSink); + sendShadowStrength(packetSink); + sendDisplayWidth(packetSink); + sendDisplayHeight(packetSink); + sendInterpolationDelay(packetSink); + sendBillboard(packetSink); + sendGlowColorOverride(packetSink); + sendBrightness(packetSink); + } + + public void setTransform(@NonNull Transformation transform) { + this.transform = transform; + if (Core.getVersion() >= 20) { + sendTransform(o -> server.updateEntity(this, o)); + } + } + private static final Object translationWatcher = BountifulWrapper.impl.getDataWatcherObject(10, Vector3f.class); private static final Object leftRotationWatcher = BountifulWrapper.impl.getDataWatcherObject(12, Quaternionf.class); private static final Object scaleWatcher = BountifulWrapper.impl.getDataWatcherObject(11, Vector3f.class); private static final Object rightRotationWatcher = BountifulWrapper.impl.getDataWatcherObject(13, Quaternionf.class); - public void setTransform(@NonNull Transformation transform) { - this.transform = transform; + private void sendTransform(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(translationWatcher, transform.getTranslation())); + packetSink.accept(getDataWatcherPacket(leftRotationWatcher, transform.getLeftRotation())); + packetSink.accept(getDataWatcherPacket(scaleWatcher, transform.getScale())); + packetSink.accept(getDataWatcherPacket(rightRotationWatcher, transform.getRightRotation())); + } + + public void setInterpolationDuration(int interpolationDuration) { + this.interpolationDuration = interpolationDuration; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(translationWatcher, transform.getTranslation())); - server.updateEntity(this, getDataWatcherPacket(leftRotationWatcher, transform.getLeftRotation())); - server.updateEntity(this, getDataWatcherPacket(scaleWatcher, transform.getScale())); - server.updateEntity(this, getDataWatcherPacket(rightRotationWatcher, transform.getRightRotation())); + sendInterpolationDuration(o -> server.updateEntity(this, o)); } } private static final Object transformationInterpolationDurationWatcher = BountifulWrapper.impl.getDataWatcherObject(8, Integer.class); private static final Object positionOrRotationInterpolationDurationWatcher = BountifulWrapper.impl.getDataWatcherObject(9, Integer.class); - public void setInterpolationDuration(int interpolationDuration) { - this.interpolationDuration = interpolationDuration; + private void sendInterpolationDuration(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(transformationInterpolationDurationWatcher, interpolationDuration)); + packetSink.accept(getDataWatcherPacket(positionOrRotationInterpolationDurationWatcher, interpolationDuration)); + } + + public void setViewRange(float viewRange) { + this.viewRange = viewRange; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(transformationInterpolationDurationWatcher, interpolationDuration)); - server.updateEntity(this, getDataWatcherPacket(positionOrRotationInterpolationDurationWatcher, interpolationDuration)); + sendViewRange(o -> server.updateEntity(this, o)); } } private static final Object viewRangeWatcher = BountifulWrapper.impl.getDataWatcherObject(16, Float.class); - public void setViewRange(float viewRange) { - this.viewRange = viewRange; + private void sendViewRange(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(viewRangeWatcher, viewRange)); + } + + public void setShadowRadius(float shadowRadius) { + this.shadowRadius = shadowRadius; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(viewRangeWatcher, viewRange)); + sendShadowRadius(o -> server.updateEntity(this, o)); } } private static final Object shadowRadiusWatcher = BountifulWrapper.impl.getDataWatcherObject(17, Float.class); - public void setShadowRadius(float shadowRadius) { - this.shadowRadius = shadowRadius; + private void sendShadowRadius(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(shadowRadiusWatcher, shadowRadius)); + } + + public void setShadowStrength(float shadowStrength) { + this.shadowStrength = shadowStrength; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(shadowRadiusWatcher, shadowRadius)); + sendShadowStrength(o -> server.updateEntity(this, o)); } } private static final Object shadowStrengthWatcher = BountifulWrapper.impl.getDataWatcherObject(18, Float.class); - public void setShadowStrength(float shadowStrength) { - this.shadowStrength = shadowStrength; + private void sendShadowStrength(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(shadowStrengthWatcher, shadowStrength)); + } + + public void setDisplayWidth(float displayWidth) { + this.displayWidth = displayWidth; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(shadowStrengthWatcher, shadowStrength)); + sendDisplayWidth(o -> server.updateEntity(this, o)); } } private static final Object displayWidthWatcher = BountifulWrapper.impl.getDataWatcherObject(19, Float.class); - public void setDisplayWidth(float displayWidth) { - this.displayWidth = displayWidth; + private void sendDisplayWidth(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(displayWidthWatcher, displayWidth)); + } + + public void setDisplayHeight(float displayHeight) { + this.displayHeight = displayHeight; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(displayWidthWatcher, displayWidth)); + sendDisplayHeight(o -> server.updateEntity(this, o)); } } private static final Object displayHeightWatcher = BountifulWrapper.impl.getDataWatcherObject(20, Float.class); - public void setDisplayHeight(float displayHeight) { - this.displayHeight = displayHeight; + private void sendDisplayHeight(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(displayHeightWatcher, displayHeight)); + } + + public void setInterpolationDelay(int interpolationDelay) { + this.interpolationDelay = interpolationDelay; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(displayHeightWatcher, displayHeight)); + sendInterpolationDelay(o -> server.updateEntity(this, o)); } } private static final Object interpolationDelayWatcher = BountifulWrapper.impl.getDataWatcherObject(7, Integer.class); - public void setInterpolationDelay(int interpolationDelay) { - this.interpolationDelay = interpolationDelay; + private void sendInterpolationDelay(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(interpolationDelayWatcher, interpolationDelay)); + } + + public void setBillboard(Display.Billboard billboard) { + this.billboard = billboard; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(interpolationDelayWatcher, interpolationDelay)); + sendBillboard(o -> server.updateEntity(this, o)); } } private static final Object billboardWatcher = BountifulWrapper.impl.getDataWatcherObject(14, Byte.class); - public void setBillboard(Display.Billboard billboard) { - this.billboard = billboard; + private void sendBillboard(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(billboardWatcher, (byte) billboard.ordinal())); + } + + public void setGlowColorOverride(Color glowColorOverride) { + this.glowColorOverride = glowColorOverride; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(billboardWatcher, (byte) billboard.ordinal())); + sendGlowColorOverride(o -> server.updateEntity(this, o)); } } private static final Object glowColorOverrideWatcher = BountifulWrapper.impl.getDataWatcherObject(21, Integer.class); - public void setGlowColorOverride(Color glowColorOverride) { - this.glowColorOverride = glowColorOverride; + private void sendGlowColorOverride(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(glowColorOverrideWatcher, glowColorOverride)); + } + + public void setBrightness(Display.Brightness brightness) { + this.brightness = brightness; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(glowColorOverrideWatcher, glowColorOverride == null ? -1 : glowColorOverride.asARGB())); + sendBrightness(o -> server.updateEntity(this, o)); } } private static final Object brightnessWatcher = BountifulWrapper.impl.getDataWatcherObject(15, Integer.class); - public void setBrightness(Display.Brightness brightness) { - this.brightness = brightness; - if (Core.getVersion() >= 20) { - if (brightness == null) { - server.updateEntity(this, getDataWatcherPacket(brightnessWatcher, -1)); - } else { - int brightnessData = brightness.getBlockLight() << 4 | brightness.getSkyLight() << 20; - server.updateEntity(this, getDataWatcherPacket(brightnessWatcher, brightnessData)); - } + private void sendBrightness(Consumer packetSink) { + if (brightness == null) { + packetSink.accept(getDataWatcherPacket(brightnessWatcher, -1)); + } else { + int brightnessData = brightness.getBlockLight() << 4 | brightness.getSkyLight() << 20; + packetSink.accept(getDataWatcherPacket(brightnessWatcher, brightnessData)); } } } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RItemDisplay.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RItemDisplay.java index 0f546957..5b0f10bd 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RItemDisplay.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RItemDisplay.java @@ -9,6 +9,8 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.ItemDisplay; import org.bukkit.inventory.ItemStack; +import java.util.function.Consumer; + @Getter public class RItemDisplay extends RDisplay { @@ -20,21 +22,36 @@ public class RItemDisplay extends RDisplay { super(server, EntityType.ITEM_DISPLAY, location); } - private static final Class itemStackClass = Reflection.getClass("{nms.world}.item.ItemStack"); - private static final Reflection.MethodInvoker asNMSCopy = Reflection.getTypedMethod(Reflection.getClass("{obc}.inventory.CraftItemStack"), "asNMSCopy", itemStackClass, ItemStack.class); - private static final Object itemStackWatcher = BountifulWrapper.impl.getDataWatcherObject(22, itemStackClass); + @Override + protected void postSpawn(Consumer packetSink) { + super.postSpawn(packetSink); + sendItemStack(packetSink); + sendItemDisplayTransform(packetSink); + } + public void setItemStack(ItemStack itemStack) { this.itemStack = itemStack; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(itemStackWatcher, asNMSCopy.invoke(null, itemStack))); + sendItemStack(o -> server.updateEntity(this, o)); } } + private static final Class itemStackClass = Reflection.getClass("{nms.world}.item.ItemStack"); + private static final Reflection.MethodInvoker asNMSCopy = Reflection.getTypedMethod(Reflection.getClass("{obc}.inventory.CraftItemStack"), "asNMSCopy", itemStackClass, ItemStack.class); + private static final Object itemStackWatcher = BountifulWrapper.impl.getDataWatcherObject(22, itemStackClass); + private void sendItemStack(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(itemStackWatcher, asNMSCopy.invoke(null, itemStack))); + } + private static final Object itemDisplayTransformWatcher = BountifulWrapper.impl.getDataWatcherObject(23, Byte.class); public void setItemDisplayTransform(ItemDisplay.ItemDisplayTransform itemDisplayTransform) { this.itemDisplayTransform = itemDisplayTransform; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(itemDisplayTransformWatcher, (byte) itemDisplayTransform.ordinal())); + sendItemDisplayTransform(o -> server.updateEntity(this, o)); } } + + private void sendItemDisplayTransform(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(itemDisplayTransformWatcher, (byte) itemDisplayTransform.ordinal())); + } } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RTextDisplay.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RTextDisplay.java index 49136d19..65e3dc2f 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RTextDisplay.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/entity/RTextDisplay.java @@ -9,6 +9,8 @@ import org.bukkit.Location; import org.bukkit.entity.EntityType; import org.bukkit.entity.TextDisplay; +import java.util.function.Consumer; + @Getter public class RTextDisplay extends RDisplay { @@ -30,62 +32,82 @@ public class RTextDisplay extends RDisplay { super(server, EntityType.TEXT_DISPLAY, location); } - private static final Class iChatBaseComponent = Reflection.getClass("{nms.network.chat}.IChatBaseComponent"); - private static final Object textWatcher = BountifulWrapper.impl.getDataWatcherObject(22, iChatBaseComponent); + @Override + protected void postSpawn(Consumer packetSink) { + super.postSpawn(packetSink); + sendText(packetSink); + sendLineWidth(packetSink); + sendTextOpacity(packetSink); + sendTextStatus(packetSink); + } + public void setText(String text) { this.text = text; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(textWatcher, ChatWrapper.impl.stringToChatComponent(text))); + sendText(o -> server.updateEntity(this, o)); + } + } + + private static final Class iChatBaseComponent = Reflection.getClass("{nms.network.chat}.IChatBaseComponent"); + private static final Object textWatcher = BountifulWrapper.impl.getDataWatcherObject(22, iChatBaseComponent); + private void sendText(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(textWatcher, ChatWrapper.impl.stringToChatComponent(text))); + } + + public void setLineWidth(int lineWidth) { + this.lineWidth = lineWidth; + if (Core.getVersion() >= 20) { + sendLineWidth(o -> server.updateEntity(this, o)); } } private static final Object lineWidthWatcher = BountifulWrapper.impl.getDataWatcherObject(23, Integer.class); - public void setLineWidth(int lineWidth) { - this.lineWidth = lineWidth; + private void sendLineWidth(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(lineWidthWatcher, lineWidth)); + } + + public void setTextOpacity(byte textOpacity) { + this.textOpacity = textOpacity; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(lineWidthWatcher, lineWidth)); + sendTextOpacity(o -> server.updateEntity(this, o)); } } private static final Object textOpacityWatcher = BountifulWrapper.impl.getDataWatcherObject(25, Byte.class); - public void setTextOpacity(byte textOpacity) { - this.textOpacity = textOpacity; - if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(textOpacityWatcher, textOpacity)); - } + private void sendTextOpacity(Consumer packetSink) { + packetSink.accept(getDataWatcherPacket(textOpacityWatcher, textOpacity)); } - private static final Object textStatusWatcher = BountifulWrapper.impl.getDataWatcherObject(26, Byte.class); - public void setShadowed(boolean shadowed) { this.shadowed = shadowed; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(textStatusWatcher, getTextStatus())); + sendTextStatus(o -> server.updateEntity(this, o)); } } public void setSeeThrough(boolean seeThrough) { this.seeThrough = seeThrough; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(textStatusWatcher, getTextStatus())); + sendTextStatus(o -> server.updateEntity(this, o)); } } public void setDefaultBackground(boolean defaultBackground) { this.defaultBackground = defaultBackground; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(textStatusWatcher, getTextStatus())); + sendTextStatus(o -> server.updateEntity(this, o)); } } public void setAlignment(TextDisplay.TextAlignment alignment) { this.alignment = alignment; if (Core.getVersion() >= 20) { - server.updateEntity(this, getDataWatcherPacket(textStatusWatcher, getTextStatus())); + sendTextStatus(o -> server.updateEntity(this, o)); } } - private byte getTextStatus() { + private static final Object textStatusWatcher = BountifulWrapper.impl.getDataWatcherObject(26, Byte.class); + private void sendTextStatus(Consumer packetSink) { byte status = 0; if (shadowed) { @@ -105,6 +127,6 @@ public class RTextDisplay extends RDisplay { status |= 0x0F; } - return status; + packetSink.accept(getDataWatcherPacket(textStatusWatcher, status)); } }