forked from SteamWar/SteamWar
Update structure
This commit is contained in:
@@ -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<Object> 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<Object> packetSink) {
|
||||
packetSink.accept(getDataWatcherPacket(blockWatcher, getState.invoke(block)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Object> 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<Object> 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<Object> 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<Object> 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<Object> 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<Object> 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<Object> 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<Object> 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<Object> 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<Object> 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<Object> 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<Object> packetSink) {
|
||||
if (brightness == null) {
|
||||
packetSink.accept(getDataWatcherPacket(brightnessWatcher, -1));
|
||||
} else {
|
||||
int brightnessData = brightness.getBlockLight() << 4 | brightness.getSkyLight() << 20;
|
||||
packetSink.accept(getDataWatcherPacket(brightnessWatcher, brightnessData));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Object> 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<Object> 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<Object> packetSink) {
|
||||
packetSink.accept(getDataWatcherPacket(itemDisplayTransformWatcher, (byte) itemDisplayTransform.ordinal()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Object> 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<Object> 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<Object> 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<Object> 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<Object> packetSink) {
|
||||
byte status = 0;
|
||||
|
||||
if (shadowed) {
|
||||
@@ -105,6 +127,6 @@ public class RTextDisplay extends RDisplay {
|
||||
status |= 0x0F;
|
||||
}
|
||||
|
||||
return status;
|
||||
packetSink.accept(getDataWatcherPacket(textStatusWatcher, status));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user