diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 91a6212..7920108 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,6 +1,8 @@ + + diff --git a/.idea/misc.xml b/.idea/misc.xml index 187706b..b0c36e8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,10 +1,11 @@ - + + @@ -15,6 +16,7 @@ diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java index 9be687f..7abe8e4 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java @@ -21,5 +21,7 @@ public class SetInstruction implements Instruction { @Nullable private Pos facing; private CameraPreset preset; + @Nullable + private FadeInstruction fade; protected SetInstruction() {} } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraLockCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraLockCustomPayloadPacket.java new file mode 100644 index 0000000..48ff27f --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraLockCustomPayloadPacket.java @@ -0,0 +1,13 @@ +package me.zimzaza4.geyserutils.common.packet; + + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class CameraLockCustomPayloadPacket extends CustomPayloadPacket { + boolean lock; +} diff --git a/geyser/pom.xml b/geyser/pom.xml index c4f8967..d1f1b3e 100644 --- a/geyser/pom.xml +++ b/geyser/pom.xml @@ -53,7 +53,7 @@ true - false + true @@ -79,13 +79,13 @@ org.geysermc.geyser api - 2.1.2-SNAPSHOT + 2.2.2-SNAPSHOT provided org.geysermc.geyser core - 2.2.0-SNAPSHOT + 2.2.2-SNAPSHOT provided diff --git a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java index 00173a8..3be3689 100644 --- a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java +++ b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java @@ -27,6 +27,7 @@ import org.cloudburstmc.protocol.common.DefinitionRegistry; import org.cloudburstmc.protocol.common.NamedDefinition; import org.geysermc.event.subscribe.Subscribe; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.bedrock.camera.CameraPerspective; import org.geysermc.geyser.api.bedrock.camera.CameraShake; import org.geysermc.geyser.api.event.bedrock.SessionJoinEvent; import org.geysermc.geyser.api.event.lifecycle.GeyserPostInitializeEvent; @@ -55,23 +56,19 @@ public class GeyserUtils implements Extension { CameraPreset.load(); Registries.BEDROCK_PACKET_TRANSLATORS.register(NpcRequestPacket.class, new NPCFormResponseTranslator()); - Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> { - - for (GeyserSession session : GeyserImpl.getInstance().onlineConnections()) { - sendCameraPresets(session); - } - - }, 10, 10, TimeUnit.SECONDS); } @Subscribe public void onSessionJoin(SessionJoinEvent event) { + System.out.println("JOINED"); if (event.connection() instanceof GeyserSession session) { - sendCameraPresets(session); + // sendCameraPresets(session); + System.out.println("2"); session.getDownstream().getSession().addListener(new SessionAdapter() { @Override public void packetReceived(Session tcpSession, Packet packet) { + if (packet instanceof ClientboundCustomPayloadPacket payloadPacket) { if (payloadPacket.getChannel().equals(GeyserUtilsChannels.MAIN)) {; CustomPayloadPacket customPacket = packetManager.decodePacket(payloadPacket.getData()); @@ -138,15 +135,16 @@ public class GeyserUtils implements Extension { } session.sendUpstreamPacket(animateEntityPacket); } else if (customPacket instanceof CameraInstructionCustomPayloadPacket cameraInstructionPacket) { - CameraInstructionPacket bedrockPacket = new CameraInstructionPacket(); if (cameraInstructionPacket.getInstruction() instanceof SetInstruction instruction) { - bedrockPacket.setSetInstruction(Converter.serializeSetInstruction(instruction)); + session.camera().sendCameraPosition(Converter.serializeSetInstruction(instruction)); + session.getCameraData().forceCameraPerspective(Converter.serializeCameraPerspective(instruction.getPreset())); + } else if (cameraInstructionPacket.getInstruction() instanceof FadeInstruction instruction) { - bedrockPacket.setFadeInstruction(Converter.serializeFadeInstruction(instruction)); + session.camera().sendCameraFade(Converter.serializeFadeInstruction(instruction)); } else if (cameraInstructionPacket.getInstruction() instanceof ClearInstruction){ - bedrockPacket.setClear(true); + session.camera().clearCameraInstructions(); } - session.sendUpstreamPacket(bedrockPacket); + } else if (customPacket instanceof CustomParticleEffectPayloadPacket customParticleEffectPacket) { SpawnParticleEffectPacket spawnParticleEffectPacket = new SpawnParticleEffectPacket(); spawnParticleEffectPacket.setDimensionId(DimensionUtils.javaToBedrock(session.getDimension())); diff --git a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/util/Converter.java b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/util/Converter.java index bf7db1c..b095cfe 100644 --- a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/util/Converter.java +++ b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/util/Converter.java @@ -12,6 +12,7 @@ import org.cloudburstmc.protocol.bedrock.data.camera.CameraEase; import org.cloudburstmc.protocol.bedrock.data.camera.CameraFadeInstruction; import org.cloudburstmc.protocol.bedrock.data.camera.CameraSetInstruction; import org.cloudburstmc.protocol.common.util.OptionalBoolean; +import org.geysermc.geyser.api.bedrock.camera.*; public class Converter { @@ -60,41 +61,56 @@ public class Converter { } - public static CameraFadeInstruction serializeFadeInstruction(FadeInstruction instruction) { + public static CameraFade serializeFadeInstruction(FadeInstruction instruction) { CameraFadeInstruction cbInstruction = new CameraFadeInstruction(); - + CameraFade.Builder builder = CameraFade.builder(); if (instruction.getColor() != null) { - cbInstruction.setColor(serializeColor(instruction.getColor())); + builder.color(serializeColor(instruction.getColor())); } if (instruction.getTime() != null) { - cbInstruction.setTimeData(serializeTime(instruction.getTime())); + + builder.fadeOutSeconds(instruction.getTime().fadeOut()); + builder.fadeInSeconds(instruction.getTime().fadeIn()); + + builder.fadeHoldSeconds(instruction.getTime().hold()); } - return cbInstruction; + return builder.build(); } - public static CameraSetInstruction serializeSetInstruction(SetInstruction instruction) { + public static CameraPerspective serializeCameraPerspective(CameraPreset preset) { + for (CameraPerspective value : CameraPerspective.values()) { + if (value.id().equals(preset.getIdentifier())) { + return value; + } + } + return CameraPerspective.FREE; + } + public static CameraPosition serializeSetInstruction(SetInstruction instruction) { + CameraPosition.Builder builder = CameraPosition.builder(); CameraSetInstruction cbInstruction = new CameraSetInstruction(); if (instruction.getEase() != null) { - cbInstruction.setEase(serializeEase(instruction.getEase())); + builder.easeType(CameraEaseType.values()[instruction.getEase().easeType()]); + builder.easeSeconds(instruction.getEase().time()); } if (instruction.getPos() != null) { - cbInstruction.setPos(serializePos(instruction.getPos())); + builder.position(serializePos(instruction.getPos())); } if (instruction.getRot() != null) { - cbInstruction.setRot(serializeRot(instruction.getRot())); + builder.rotationX((int) instruction.getRot().x()); + builder.rotationY((int) instruction.getRot().y()); + } if (instruction.getFacing() != null) { - cbInstruction.setFacing(serializePos(instruction.getFacing())); + builder.facingPosition(serializePos(instruction.getFacing())); } - - - cbInstruction.setDefaultPreset(OptionalBoolean.of(false)); - cbInstruction.setPreset(new CameraPresetDefinition(instruction.getPreset().getIdentifier(), instruction.getPreset().getId())); - return cbInstruction; + if (instruction.getFade() != null) { + builder.cameraFade(serializeFadeInstruction(instruction.getFade())); + } + return builder.build(); } diff --git a/pom.xml b/pom.xml index e7ae60d..5f59def 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,7 @@ geyser spigot velocity + bungee diff --git a/spigot/src/main/java/me/zimzaza4/geyserutils/spigot/GeyserUtils.java b/spigot/src/main/java/me/zimzaza4/geyserutils/spigot/GeyserUtils.java index a926a4e..56ade78 100644 --- a/spigot/src/main/java/me/zimzaza4/geyserutils/spigot/GeyserUtils.java +++ b/spigot/src/main/java/me/zimzaza4/geyserutils/spigot/GeyserUtils.java @@ -1,6 +1,7 @@ package me.zimzaza4.geyserutils.spigot; import lombok.Getter; +import me.zimzaza4.geyserutils.common.camera.data.CameraPreset; import me.zimzaza4.geyserutils.common.channel.GeyserUtilsChannels; import me.zimzaza4.geyserutils.common.manager.PacketManager; import me.zimzaza4.geyserutils.common.packet.NpcFormResponseCustomPayloadPacket; @@ -25,6 +26,8 @@ public final class GeyserUtils extends JavaPlugin { instance = this; packetManager = new PacketManager(); Messenger messenger = this.getServer().getMessenger(); + + CameraPreset.load(); messenger.registerOutgoingPluginChannel(this, GeyserUtilsChannels.MAIN); messenger.registerIncomingPluginChannel(this, GeyserUtilsChannels.MAIN, (channel, player, message) -> { if (channel.equals(GeyserUtilsChannels.MAIN)) {