9
0
mirror of https://github.com/GeyserExtensionists/GeyserUtils.git synced 2026-01-04 15:41:45 +00:00
This commit is contained in:
zimzaza4
2023-09-24 02:54:39 +08:00
parent d46e40456e
commit 6d32e654bb
21 changed files with 529 additions and 3 deletions

View File

@@ -71,6 +71,18 @@
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>24.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>24.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,83 @@
package me.zimzaza4.geyserutils.common.camera.data;
import lombok.Builder;
import lombok.Getter;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
import java.util.TreeMap;
@Getter
public class CameraPreset {
private static final Map<String, CameraPreset> PRESETS = new TreeMap<>();
public static Map<String, CameraPreset> getPresets() {
return PRESETS;
}
public static CameraPreset getPreset(String identifier) {
return getPresets().get(identifier);
}
public static void registerCameraPresets(CameraPreset... presets) {
for (var preset : presets) {
if (PRESETS.containsKey(preset.getIdentifier()))
throw new IllegalArgumentException("Camera preset " + preset.getIdentifier() + " already exists!");
PRESETS.put(preset.getIdentifier(), preset);
}
int id = 0;
//重新分配id
for (var preset : presets) {
preset.id = id++;
}
}
public static CameraPreset FIRST_PERSON;
public static CameraPreset FREE;
public static CameraPreset THIRD_PERSON;
public static CameraPreset THIRD_PERSON_FRONT;
public static void load() {
FIRST_PERSON = CameraPreset.builder()
.identifier("minecraft:first_person")
.build();
FREE = CameraPreset.builder()
.identifier("minecraft:free")
.pos(new Pos(0, 0, 0))
.rot(new Rot(0, 0))
.build();
THIRD_PERSON = CameraPreset.builder()
.identifier("minecraft:third_person")
.build();
THIRD_PERSON_FRONT = CameraPreset.builder()
.identifier("minecraft:third_person_front")
.build();
registerCameraPresets(FIRST_PERSON, FREE, THIRD_PERSON, THIRD_PERSON_FRONT);
}
private String identifier;
@Getter
private String inheritFrom;
@Getter
@Nullable
private Pos pos;
@Getter
@Nullable
private Rot rot;
@Getter
private int id;
@Builder
public CameraPreset(String identifier, String inheritFrom, @Nullable Pos pos, @Nullable Rot rot) {
this.identifier = identifier;
this.inheritFrom = inheritFrom != null ? inheritFrom : "";
this.pos = pos;
this.rot = rot;
}
protected CameraPreset() {
}
}

View File

@@ -0,0 +1,16 @@
package me.zimzaza4.geyserutils.common.camera.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@AllArgsConstructor
@NoArgsConstructor
@Accessors(fluent = true)
@Data
public class Color {
float r;
float g;
float b;
}

View File

@@ -0,0 +1,26 @@
package me.zimzaza4.geyserutils.common.camera.data;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@NoArgsConstructor
@Accessors(fluent = true)
@Data
public class Ease {
float time;
int easeType;
public Ease(float time, EaseType easeType) {
this.time = time;
this.easeType = easeType.getIndex();
}
public Ease easeType(EaseType easeType) {
this.easeType = easeType.getIndex();
return this;
}
}

View File

@@ -0,0 +1,48 @@
package me.zimzaza4.geyserutils.common.camera.data;
import lombok.Getter;
@Getter
public enum EaseType {
LINEAR("linear",0),
SPRING("spring",1),
EASE_IN_SINE("in_sine",2),
EASE_OUT_SINE("out_sine",3),
EASE_IN_OUT_SINE("in_out_sine",4),
EASE_IN_QUAD("in_quad",5),
EASE_OUT_QUAD("out_quad",6),
EASE_IN_OUT_QUAD("in_out_quad",7),
EASE_IN_CUBIC("in_cubic",8),
EASE_OUT_CUBIC("out_cubic",9),
EASE_IN_OUT_CUBIC("in_out_cubic",10),
EASE_IN_QUART("in_quart",11),
EASE_OUT_QUART("out_quart",12),
EASE_IN_OUT_QUART("in_out_quart",13),
EASE_IN_QUINT("in_quint",14),
EASE_OUT_QUINT("out_quint",15),
EASE_IN_OUT_QUINT("in_out_quint",16),
EASE_IN_EXPO("in_expo",17),
EASE_OUT_EXPO("out_expo",18),
EASE_IN_OUT_EXPO("in_out_expo",19),
EASE_IN_CIRC("in_circ",20),
EASE_OUT_CIRC("out_circ",21),
EASE_IN_OUT_CIRC("in_out_circ",22),
EASE_IN_BACK("in_back",23),
EASE_OUT_BACK("out_back",24),
EASE_IN_OUT_BACK("in_out_back",25),
EASE_IN_ELASTIC("in_elastic",26),
EASE_OUT_ELASTIC("out_elastic",27),
EASE_IN_OUT_ELASTIC("in_out_elastic",28),
EASE_IN_BOUNCE("in_bounce",29),
EASE_OUT_BOUNCE("out_bounce",30),
EASE_IN_OUT_BOUNCE("in_out_bounce",31);
private final String type;
private final int index;
EaseType(String type, int index) {
this.type = type;
this.index = index;
}
}

View File

@@ -0,0 +1,16 @@
package me.zimzaza4.geyserutils.common.camera.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@AllArgsConstructor
@NoArgsConstructor
@Accessors(fluent = true)
@Data
public class Pos {
float x;
float y;
float z;
}

View File

@@ -0,0 +1,15 @@
package me.zimzaza4.geyserutils.common.camera.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@AllArgsConstructor
@NoArgsConstructor
@Accessors(fluent = true)
@Data
public class Rot {
float x;
float y;
}

View File

@@ -0,0 +1,16 @@
package me.zimzaza4.geyserutils.common.camera.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@AllArgsConstructor
@NoArgsConstructor
@Accessors(fluent = true)
@Data
public class Time {
float fadeIn;
float hold;
float fadeOut;
}

View File

@@ -0,0 +1,17 @@
package me.zimzaza4.geyserutils.common.camera.instruction;
import lombok.Getter;
@Getter
public class ClearInstruction implements Instruction {
private static final ClearInstruction INSTANCE = new ClearInstruction();
private final int clear = 1;
private ClearInstruction() {}
public static ClearInstruction instance() {
return INSTANCE;
}
}

View File

@@ -0,0 +1,20 @@
package me.zimzaza4.geyserutils.common.camera.instruction;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import me.zimzaza4.geyserutils.common.camera.data.Color;
import me.zimzaza4.geyserutils.common.camera.data.Time;
import org.jetbrains.annotations.Nullable;
@Builder
@AllArgsConstructor
@Getter
public class FadeInstruction implements Instruction {
@Nullable
private Color color;
@Nullable
private Time time;
protected FadeInstruction() {}
}

View File

@@ -0,0 +1,7 @@
package me.zimzaza4.geyserutils.common.camera.instruction;
import java.io.Serializable;
public interface Instruction extends Serializable {
}

View File

@@ -0,0 +1,25 @@
package me.zimzaza4.geyserutils.common.camera.instruction;
import lombok.*;
import me.zimzaza4.geyserutils.common.camera.data.CameraPreset;
import me.zimzaza4.geyserutils.common.camera.data.Ease;
import me.zimzaza4.geyserutils.common.camera.data.Pos;
import me.zimzaza4.geyserutils.common.camera.data.Rot;
import org.jetbrains.annotations.Nullable;
@AllArgsConstructor
@Builder
@Getter
public class SetInstruction implements Instruction {
@Nullable
private Ease ease;
@Nullable
private Pos pos;
@Nullable
private Rot rot;
@Nullable
private Pos facing;
private CameraPreset preset;
protected SetInstruction() {}
}

View File

@@ -1,9 +1,13 @@
package me.zimzaza4.geyserutils.common.manager;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket;
@@ -18,6 +22,7 @@ public class PacketManager {
public PacketManager() {
objectMapper = new ObjectMapper();
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.EVERYTHING, JsonTypeInfo.As.PROPERTY);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
}

View File

@@ -0,0 +1,11 @@
package me.zimzaza4.geyserutils.common.packet;
import lombok.Getter;
import lombok.Setter;
import me.zimzaza4.geyserutils.common.camera.instruction.Instruction;
@Setter
@Getter
public class CameraInstructionCustomPayloadPacket extends CustomPayloadPacket {
private Instruction instruction;
}