9
0
mirror of https://github.com/GeyserExtensionists/GeyserUtils.git synced 2026-01-04 15:41:45 +00:00

Animation

This commit is contained in:
zimzaza4
2023-09-16 19:34:38 +08:00
parent d8c3feaacf
commit ec8318b7c5
13 changed files with 176 additions and 51 deletions

View File

@@ -5,22 +5,24 @@ import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundCu
import com.github.steveice10.packetlib.Session;
import com.github.steveice10.packetlib.event.session.SessionAdapter;
import com.github.steveice10.packetlib.packet.Packet;
import lombok.Getter;
import me.zimzaza4.geyserutils.common.channel.GeyserUtilsChannels;
import me.zimzaza4.geyserutils.common.form.element.NpcDialogueButton;
import me.zimzaza4.geyserutils.common.packet.CameraShakePacket;
import me.zimzaza4.geyserutils.common.packet.NpcDialogueFormDataPacket;
import me.zimzaza4.geyserutils.common.packet.NpcFormResponsePacket;
import me.zimzaza4.geyserutils.common.manager.PacketManager;
import me.zimzaza4.geyserutils.common.packet.*;
import me.zimzaza4.geyserutils.common.util.CustomPayloadPacketUtils;
import me.zimzaza4.geyserutils.geyser.form.NpcDialogueForm;
import me.zimzaza4.geyserutils.geyser.form.NpcDialogueForms;
import me.zimzaza4.geyserutils.geyser.form.element.Button;
import me.zimzaza4.geyserutils.geyser.translator.NPCFormResponseTranslator;
import org.cloudburstmc.protocol.bedrock.packet.AnimateEntityPacket;
import org.cloudburstmc.protocol.bedrock.packet.NpcRequestPacket;
import org.geysermc.event.subscribe.Subscribe;
import org.geysermc.geyser.api.bedrock.camera.CameraShake;
import org.geysermc.geyser.api.event.bedrock.SessionJoinEvent;
import org.geysermc.geyser.api.event.lifecycle.GeyserPostInitializeEvent;
import org.geysermc.geyser.api.extension.Extension;
import org.geysermc.geyser.entity.type.Entity;
import org.geysermc.geyser.registry.Registries;
import org.geysermc.geyser.session.GeyserSession;
@@ -29,8 +31,12 @@ import java.util.List;
public class GeyserUtils implements Extension {
@Getter
public static PacketManager packetManager;
@Subscribe
public void onLoad(GeyserPostInitializeEvent event) {
packetManager = new PacketManager();
Registries.BEDROCK_PACKET_TRANSLATORS.register(NpcRequestPacket.class, new NPCFormResponseTranslator());
}
@Subscribe
@@ -44,12 +50,12 @@ public class GeyserUtils implements Extension {
System.out.println(payloadPacket.getChannel());
if (payloadPacket.getChannel().equals(GeyserUtilsChannels.MAIN)) {
System.out.println("Received packet");
me.zimzaza4.geyserutils.common.packet.Packet customPacket = CustomPayloadPacketUtils.decodePacket(payloadPacket.getData());
CustomPayloadPacket customPacket = packetManager.decodePacket(payloadPacket.getData());
System.out.println(1);
if (customPacket instanceof CameraShakePacket cameraShakePacket) {
if (customPacket instanceof CameraShakeCustomPayloadPacket cameraShakePacket) {
System.out.println(2);
event.connection().shakeCamera(cameraShakePacket.getIntensity(), cameraShakePacket.getDuration(), CameraShake.values()[cameraShakePacket.getType()]);
} else if (customPacket instanceof NpcDialogueFormDataPacket formData) {
} else if (customPacket instanceof NpcDialogueFormDataCustomPayloadPacket formData) {
if (formData.action().equals("CLOSE")) {
NpcDialogueForm openForm = NpcDialogueForms.getOpenNpcDialogueForms(session);
@@ -82,7 +88,7 @@ public class GeyserUtils implements Extension {
buttons.add(new Button(button.text(), button.commands(),
button.mode(), () -> {
if (button.mode() == NpcDialogueButton.ButtonMode.BUTTON_MODE) {
session.sendDownstreamPacket(new ServerboundCustomPayloadPacket(GeyserUtilsChannels.MAIN, CustomPayloadPacketUtils.encodePacket(new NpcFormResponsePacket(formData.formId(), finalI))));
session.sendDownstreamPacket(new ServerboundCustomPayloadPacket(GeyserUtilsChannels.MAIN, packetManager.encodePacket(new NpcFormResponseCustomPayloadPacket(formData.formId(), finalI))));
}
}
));
@@ -90,11 +96,26 @@ public class GeyserUtils implements Extension {
}
}
form.closeHandler(() -> session.sendDownstreamPacket(new ServerboundCustomPayloadPacket(GeyserUtilsChannels.MAIN, CustomPayloadPacketUtils.encodePacket(new NpcFormResponsePacket(formData.formId(), -1)))));
form.closeHandler(() -> session.sendDownstreamPacket(new ServerboundCustomPayloadPacket(GeyserUtilsChannels.MAIN, packetManager.encodePacket(new NpcFormResponseCustomPayloadPacket(formData.formId(), -1)))));
form.buttons(buttons);
form.createAndSend(session);
} else if (customPacket instanceof AnimateEntityCustomPayloadPacket animateEntityCustomPayloadPacket) {
AnimateEntityPacket animateEntityPacket = new AnimateEntityPacket();
animateEntityPacket.setAnimation(animateEntityCustomPayloadPacket.getAnimation());
animateEntityPacket.setController(animateEntityCustomPayloadPacket.getController());
animateEntityPacket.setBlendOutTime(animateEntityCustomPayloadPacket.getBlendOutTime());
animateEntityPacket.setNextState(animateEntityCustomPayloadPacket.getNextState());
animateEntityPacket.setStopExpressionVersion(animateEntityCustomPayloadPacket.getStopExpressionVersion());
animateEntityPacket.setStopExpression(animateEntityCustomPayloadPacket.getStopExpression());
for (int id : animateEntityCustomPayloadPacket.getEntityJavaIds()) {
Entity entity = session.getEntityCache().getEntityByJavaId(id);
if (entity != null) {
animateEntityPacket.getRuntimeEntityIds().add(entity.getGeyserId());
}
}
session.sendUpstreamPacket(animateEntityPacket);
}
}
}