9
0
mirror of https://github.com/GeyserExtensionists/GeyserUtils.git synced 2025-12-19 15:09:24 +00:00

bungee support & update

This commit is contained in:
zimzaza4
2024-03-02 16:29:49 +08:00
parent de2c5a4230
commit 4a605fda5c
9 changed files with 69 additions and 32 deletions

2
.idea/encodings.xml generated
View File

@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/bungee/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/bungee/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/common/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/common/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/geyser/src/main/java" charset="UTF-8" />

4
.idea/misc.xml generated
View File

@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<list size="3">
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.bukkit.event.EventHandler" />
<item index="1" class="java.lang.String" itemvalue="com.velocitypowered.api.event.Subscribe" />
<item index="2" class="java.lang.String" itemvalue="com.velocitypowered.api.plugin.Plugin" />
<item index="3" class="java.lang.String" itemvalue="net.md_5.bungee.event.EventHandler" />
</list>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" />
@@ -15,6 +16,7 @@
<option value="$PROJECT_DIR$/GeyserUtils-spigot/pom.xml" />
<option value="$PROJECT_DIR$/spigot/pom.xml" />
<option value="$PROJECT_DIR$/velocity/pom.xml" />
<option value="$PROJECT_DIR$/bungee/pom.xml" />
</list>
</option>
</component>

View File

@@ -21,5 +21,7 @@ public class SetInstruction implements Instruction {
@Nullable
private Pos facing;
private CameraPreset preset;
@Nullable
private FadeInstruction fade;
protected SetInstruction() {}
}

View File

@@ -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;
}

View File

@@ -53,7 +53,7 @@
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
@@ -79,13 +79,13 @@
<dependency>
<groupId>org.geysermc.geyser</groupId>
<artifactId>api</artifactId>
<version>2.1.2-SNAPSHOT</version>
<version>2.2.2-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.geysermc.geyser</groupId>
<artifactId>core</artifactId>
<version>2.2.0-SNAPSHOT</version>
<version>2.2.2-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>

View File

@@ -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()));

View File

@@ -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();
}

View File

@@ -13,6 +13,7 @@
<module>geyser</module>
<module>spigot</module>
<module>velocity</module>
<module>bungee</module>
</modules>
<properties>

View File

@@ -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)) {