Cleanup things and fix setting back to default

This commit is contained in:
2025-01-08 16:52:24 +01:00
parent e418109ab7
commit bfdf6471d2
4 changed files with 94 additions and 64 deletions
@@ -38,8 +38,9 @@ public class RBlockDisplay extends RDisplay {
private static final Class<?> iBlockDataClass = Reflection.getClass("net.minecraft.world.level.block.state.BlockState");
private static final Reflection.Method getState = Reflection.getTypedMethod(Reflection.getClass("org.bukkit.craftbukkit.block.data.CraftBlockData"), "getState", iBlockDataClass);
private static final Object blockWatcher = BountifulWrapper.impl.getDataWatcherObject(22, iBlockDataClass);
private void getBlock(BiConsumer<Object, Object> packetSink) {
if (block.getAsString(true).equals(DEFAULT_BLOCK.getAsString(true))) return;
packetSink.accept(blockWatcher, getState.invoke(block));
private void getBlock(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || !block.getAsString(true).equals(DEFAULT_BLOCK.getAsString(true))) {
packetSink.accept(blockWatcher, getState.invoke(block));
}
}
}
@@ -69,16 +69,18 @@ public abstract class RDisplay extends REntity {
}
@SafeVarargs
protected final void sendPacket(Consumer<Object> packetSink, Consumer<BiConsumer<Object, Object>>... dataSinkSinks) {
protected final void sendPacket(Consumer<Object> packetSink, BiConsumer<Boolean, BiConsumer<Object, Object>>... dataSinkSinks) {
List<Object> keyValueData = new ArrayList<>();
for (Consumer<BiConsumer<Object, Object>> dataSinkSink : dataSinkSinks) {
dataSinkSink.accept((dataWatcher, value) -> {
boolean ignoreDefault = packetSink == updatePacketSink;
for (BiConsumer<Boolean, BiConsumer<Object, Object>> dataSinkSink : dataSinkSinks) {
dataSinkSink.accept(ignoreDefault, (dataWatcher, value) -> {
keyValueData.add(dataWatcher);
keyValueData.add(value);
});
}
if (keyValueData.isEmpty()) return;
packetSink.accept(getDataWatcherPacket(keyValueData.toArray()));
if (!keyValueData.isEmpty()) {
packetSink.accept(getDataWatcherPacket(keyValueData.toArray()));
}
}
public void setTransform(@NonNull Transformation transform) {
@@ -90,12 +92,14 @@ public abstract class RDisplay extends REntity {
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);
private void getTransformData(BiConsumer<Object, Object> dataSink) {
if (transform.equals(DEFAULT_TRANSFORM)) return;
dataSink.accept(translationWatcher, transform.getTranslation());
dataSink.accept(leftRotationWatcher, transform.getLeftRotation());
dataSink.accept(scaleWatcher, transform.getScale());
dataSink.accept(rightRotationWatcher, transform.getRightRotation());
private void getTransformData(boolean ignoreDefault, BiConsumer<Object, Object> dataSink) {
if (ignoreDefault || !transform.equals(DEFAULT_TRANSFORM)) {
dataSink.accept(translationWatcher, transform.getTranslation());
dataSink.accept(leftRotationWatcher, transform.getLeftRotation());
dataSink.accept(scaleWatcher, transform.getScale());
dataSink.accept(rightRotationWatcher, transform.getRightRotation());
}
}
public void setInterpolationDuration(int interpolationDuration) {
@@ -105,10 +109,12 @@ public abstract class RDisplay extends REntity {
private static final Object transformationInterpolationDurationWatcher = BountifulWrapper.impl.getDataWatcherObject(8, Integer.class);
private static final Object positionOrRotationInterpolationDurationWatcher = BountifulWrapper.impl.getDataWatcherObject(9, Integer.class);
private void getInterpolationDuration(BiConsumer<Object, Object> packetSink) {
if (interpolationDelay == 0) return;
packetSink.accept(transformationInterpolationDurationWatcher, interpolationDuration);
packetSink.accept(positionOrRotationInterpolationDurationWatcher, interpolationDuration);
private void getInterpolationDuration(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || interpolationDelay != 0) {
packetSink.accept(transformationInterpolationDurationWatcher, interpolationDuration);
packetSink.accept(positionOrRotationInterpolationDurationWatcher, interpolationDuration);
}
}
public void setViewRange(float viewRange) {
@@ -117,9 +123,11 @@ public abstract class RDisplay extends REntity {
}
private static final Object viewRangeWatcher = BountifulWrapper.impl.getDataWatcherObject(16, Float.class);
private void getViewRange(BiConsumer<Object, Object> packetSink) {
if (viewRange == 1.0F) return;
packetSink.accept(viewRangeWatcher, viewRange);
private void getViewRange(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || viewRange != 1.0F) {
packetSink.accept(viewRangeWatcher, viewRange);
}
}
public void setShadowRadius(float shadowRadius) {
@@ -128,9 +136,11 @@ public abstract class RDisplay extends REntity {
}
private static final Object shadowRadiusWatcher = BountifulWrapper.impl.getDataWatcherObject(17, Float.class);
private void getShadowRadius(BiConsumer<Object, Object> packetSink) {
if (shadowRadius == 0.0F) return;
packetSink.accept(shadowRadiusWatcher, shadowRadius);
private void getShadowRadius(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || shadowRadius != 0.0F) {
packetSink.accept(shadowRadiusWatcher, shadowRadius);
}
}
public void setShadowStrength(float shadowStrength) {
@@ -139,9 +149,11 @@ public abstract class RDisplay extends REntity {
}
private static final Object shadowStrengthWatcher = BountifulWrapper.impl.getDataWatcherObject(18, Float.class);
private void getShadowStrength(BiConsumer<Object, Object> packetSink) {
if (shadowStrength == 1.0F) return;
packetSink.accept(shadowStrengthWatcher, shadowStrength);
private void getShadowStrength(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || shadowStrength != 1.0F) {
packetSink.accept(shadowStrengthWatcher, shadowStrength);
}
}
public void setDisplayWidth(float displayWidth) {
@@ -150,9 +162,11 @@ public abstract class RDisplay extends REntity {
}
private static final Object displayWidthWatcher = BountifulWrapper.impl.getDataWatcherObject(19, Float.class);
private void getDisplayWidth(BiConsumer<Object, Object> packetSink) {
if (displayWidth == 0.0F) return;
packetSink.accept(displayWidthWatcher, displayWidth);
private void getDisplayWidth(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || displayWidth != 0.0F) {
packetSink.accept(displayWidthWatcher, displayWidth);
}
}
public void setDisplayHeight(float displayHeight) {
@@ -161,9 +175,11 @@ public abstract class RDisplay extends REntity {
}
private static final Object displayHeightWatcher = BountifulWrapper.impl.getDataWatcherObject(20, Float.class);
private void getDisplayHeight(BiConsumer<Object, Object> packetSink) {
if (displayHeight == 0.0F) return;
packetSink.accept(displayHeightWatcher, displayHeight);
private void getDisplayHeight(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || displayHeight != 0.0F) {
packetSink.accept(displayHeightWatcher, displayHeight);
}
}
public void setInterpolationDelay(int interpolationDelay) {
@@ -172,9 +188,11 @@ public abstract class RDisplay extends REntity {
}
private static final Object interpolationDelayWatcher = BountifulWrapper.impl.getDataWatcherObject(7, Integer.class);
private void getInterpolationDelay(BiConsumer<Object, Object> packetSink) {
if (interpolationDelay == 0) return;
packetSink.accept(interpolationDelayWatcher, interpolationDelay);
private void getInterpolationDelay(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || interpolationDelay != 0) {
packetSink.accept(interpolationDelayWatcher, interpolationDelay);
}
}
public void setBillboard(Display.Billboard billboard) {
@@ -183,9 +201,11 @@ public abstract class RDisplay extends REntity {
}
private static final Object billboardWatcher = BountifulWrapper.impl.getDataWatcherObject(14, Byte.class);
private void getBillboard(BiConsumer<Object, Object> packetSink) {
if (billboard == Display.Billboard.FIXED) return;
packetSink.accept(billboardWatcher, (byte) billboard.ordinal());
private void getBillboard(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || billboard != Display.Billboard.FIXED) {
packetSink.accept(billboardWatcher, (byte) billboard.ordinal());
}
}
public void setGlowColorOverride(Color glowColorOverride) {
@@ -194,9 +214,11 @@ public abstract class RDisplay extends REntity {
}
private static final Object glowColorOverrideWatcher = BountifulWrapper.impl.getDataWatcherObject(21, Integer.class);
private void getGlowColorOverride(BiConsumer<Object, Object> packetSink) {
if (glowColorOverride == null) return;
packetSink.accept(glowColorOverrideWatcher, glowColorOverride);
private void getGlowColorOverride(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || glowColorOverride != null) {
packetSink.accept(glowColorOverrideWatcher, glowColorOverride == null ? -1 : glowColorOverride.asARGB());
}
}
public void setBrightness(Display.Brightness brightness) {
@@ -205,9 +227,10 @@ public abstract class RDisplay extends REntity {
}
private static final Object brightnessWatcher = BountifulWrapper.impl.getDataWatcherObject(15, Integer.class);
private void getBrightness(BiConsumer<Object, Object> packetSink) {
if (brightness == null) return;
int brightnessData = brightness.getBlockLight() << 4 | brightness.getSkyLight() << 20;
packetSink.accept(brightnessWatcher, brightnessData);
private void getBrightness(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || brightness != null) {
packetSink.accept(brightnessWatcher, brightness == null ? -1 : brightness.getBlockLight() << 4 | brightness.getSkyLight() << 20);
}
}
}
@@ -39,9 +39,10 @@ public class RItemDisplay extends RDisplay {
}
private static final Object itemStackWatcher = BountifulWrapper.impl.getDataWatcherObject(22, ProtocolWrapper.itemStack);
private void getItemStack(BiConsumer<Object, Object> packetSink) {
if (itemStack.equals(DEFAULT_ITEM_STACK)) return;
packetSink.accept(itemStackWatcher, asNMSCopy.invoke(null, itemStack));
private void getItemStack(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || !itemStack.equals(DEFAULT_ITEM_STACK)) {
packetSink.accept(itemStackWatcher, asNMSCopy.invoke(null, itemStack));
}
}
private static final Object itemDisplayTransformWatcher = BountifulWrapper.impl.getDataWatcherObject(23, Byte.class);
@@ -50,8 +51,9 @@ public class RItemDisplay extends RDisplay {
sendPacket(updatePacketSink, this::getItemDisplayTransform);
}
private void getItemDisplayTransform(BiConsumer<Object, Object> packetSink) {
if (itemDisplayTransform == ItemDisplay.ItemDisplayTransform.NONE) return;
packetSink.accept(itemDisplayTransformWatcher, (byte) itemDisplayTransform.ordinal());
private void getItemDisplayTransform(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || itemDisplayTransform != ItemDisplay.ItemDisplayTransform.NONE) {
packetSink.accept(itemDisplayTransformWatcher, (byte) itemDisplayTransform.ordinal());
}
}
}
@@ -53,9 +53,10 @@ public class RTextDisplay extends RDisplay {
private static final Class<?> iChatBaseComponent = Reflection.getClass("net.minecraft.network.chat.Component");
private static final Object textWatcher = BountifulWrapper.impl.getDataWatcherObject(22, iChatBaseComponent);
private void getText(BiConsumer<Object, Object> packetSink) {
if (text.isEmpty()) return;
packetSink.accept(textWatcher, ChatWrapper.impl.stringToChatComponent(text));
private void getText(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || !text.isEmpty()) {
packetSink.accept(textWatcher, ChatWrapper.impl.stringToChatComponent(text));
}
}
public void setLineWidth(int lineWidth) {
@@ -64,9 +65,10 @@ public class RTextDisplay extends RDisplay {
}
private static final Object lineWidthWatcher = BountifulWrapper.impl.getDataWatcherObject(23, Integer.class);
private void getLineWidth(BiConsumer<Object, Object> packetSink) {
if (lineWidth == 200) return;
packetSink.accept(lineWidthWatcher, lineWidth);
private void getLineWidth(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || lineWidth != 200) {
packetSink.accept(lineWidthWatcher, lineWidth);
}
}
public void setTextOpacity(byte textOpacity) {
@@ -75,9 +77,10 @@ public class RTextDisplay extends RDisplay {
}
private static final Object textOpacityWatcher = BountifulWrapper.impl.getDataWatcherObject(25, Byte.class);
private void getTextOpacity(BiConsumer<Object, Object> packetSink) {
if (textOpacity == (byte) -1) return;
packetSink.accept(textOpacityWatcher, textOpacity);
private void getTextOpacity(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || textOpacity != (byte) -1) {
packetSink.accept(textOpacityWatcher, textOpacity);
}
}
public void setShadowed(boolean shadowed) {
@@ -101,7 +104,7 @@ public class RTextDisplay extends RDisplay {
}
private static final Object textStatusWatcher = BountifulWrapper.impl.getDataWatcherObject(26, Byte.class);
private void getTextStatus(BiConsumer<Object, Object> packetSink) {
private void getTextStatus(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
byte status = 0;
if (shadowed) {
@@ -121,7 +124,8 @@ public class RTextDisplay extends RDisplay {
status |= 0x0F;
}
if (status == 0) return;
packetSink.accept(textStatusWatcher, status);
if (ignoreDefault || status != 0) {
packetSink.accept(textStatusWatcher, status);
}
}
}