Skip to content

Commit 28440c8

Browse files
committed
feat: ServerPlayer
1 parent 7f69459 commit 28440c8

10 files changed

Lines changed: 1131 additions & 754 deletions

File tree

nms-patches/net/minecraft/server/level/EntityPlayer.patch

Lines changed: 2 additions & 623 deletions
Large diffs are not rendered by default.

nms-patches/net/minecraft/world/level/portal/DimensionTransition.patch

Lines changed: 0 additions & 47 deletions
This file was deleted.

patches/net/minecraft/server/level/ServerPlayer.java.patch

Lines changed: 802 additions & 57 deletions
Large diffs are not rendered by default.
Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,70 @@
11
--- a/net/minecraft/world/level/portal/DimensionTransition.java
22
+++ b/net/minecraft/world/level/portal/DimensionTransition.java
3-
@@ -6,6 +_,7 @@
3+
@@ -6,29 +_,46 @@
44
import net.minecraft.server.level.ServerPlayer;
55
import net.minecraft.world.entity.Entity;
66
import net.minecraft.world.phys.Vec3;
7+
+import org.bukkit.event.player.PlayerTeleportEvent;
78
+import org.teneted.neotenet.injection.world.level.portal.InjectionDimensionTransition;
89

910
public record DimensionTransition(
10-
ServerLevel newLevel,
11-
@@ -15,7 +_,7 @@
12-
float xRot,
13-
boolean missingRespawnBlock,
14-
DimensionTransition.PostDimensionTransition postDimensionTransition
11+
- ServerLevel newLevel,
12+
- Vec3 pos,
13+
- Vec3 speed,
14+
- float yRot,
15+
- float xRot,
16+
- boolean missingRespawnBlock,
17+
- DimensionTransition.PostDimensionTransition postDimensionTransition
1518
-) {
19+
+ ServerLevel newLevel,
20+
+ Vec3 pos,
21+
+ Vec3 speed,
22+
+ float yRot,
23+
+ float xRot,
24+
+ boolean missingRespawnBlock,
25+
+ DimensionTransition.PostDimensionTransition postDimensionTransition,
26+
+ PlayerTeleportEvent.TeleportCause cause
1627
+) implements InjectionDimensionTransition {
1728
public static final DimensionTransition.PostDimensionTransition DO_NOTHING = p_352417_ -> {
1829
};
1930
public static final DimensionTransition.PostDimensionTransition PLAY_PORTAL_SOUND = DimensionTransition::playPortalSound;
31+
public static final DimensionTransition.PostDimensionTransition PLACE_PORTAL_TICKET = DimensionTransition::placePortalTicket;
32+
33+
public DimensionTransition(
34+
- ServerLevel p_348637_, Vec3 p_348645_, Vec3 p_348472_, float p_348548_, float p_348664_, DimensionTransition.PostDimensionTransition p_352139_
35+
+ ServerLevel p_348637_, Vec3 p_348645_, Vec3 p_348472_, float p_348548_, float p_348664_, DimensionTransition.PostDimensionTransition p_352139_
36+
) {
37+
- this(p_348637_, p_348645_, p_348472_, p_348548_, p_348664_, false, p_352139_);
38+
- }
39+
+ this(p_348637_, p_348645_, p_348472_, p_348548_, p_348664_, false, p_352139_, PlayerTeleportEvent.TeleportCause.UNKNOWN);
40+
+ }
41+
+
42+
+ public DimensionTransition(ServerLevel newLevel, Vec3 pos, Vec3 speed, float yRot, float xRot, boolean missingRespawnBlock, DimensionTransition.PostDimensionTransition postDimensionTransition) {
43+
+ this(newLevel, pos, speed, yRot, xRot, missingRespawnBlock, postDimensionTransition, PlayerTeleportEvent.TeleportCause.UNKNOWN);
44+
+ }
45+
+
46+
+ public DimensionTransition(PlayerTeleportEvent.TeleportCause cause) {
47+
+ this(null, Vec3.ZERO, Vec3.ZERO, 0.0F, 0.0F, false, DO_NOTHING, cause);
48+
+ }
49+
+
50+
51+
public DimensionTransition(ServerLevel p_348609_, Entity p_352432_, DimensionTransition.PostDimensionTransition p_352373_) {
52+
- this(p_348609_, findAdjustedSharedSpawnPos(p_348609_, p_352432_), Vec3.ZERO, 0.0F, 0.0F, false, p_352373_);
53+
+ this(p_348609_, findAdjustedSharedSpawnPos(p_348609_, p_352432_), Vec3.ZERO, 0.0F, 0.0F, false, p_352373_, PlayerTeleportEvent.TeleportCause.UNKNOWN);
54+
+ }
55+
+
56+
+ public DimensionTransition(ServerLevel p_348609_, Entity p_352432_, DimensionTransition.PostDimensionTransition p_352373_, PlayerTeleportEvent.TeleportCause cause) {
57+
+ this(p_348609_, findAdjustedSharedSpawnPos(p_348609_, p_352432_), Vec3.ZERO, 0.0F, 0.0F, false, p_352373_, cause);
58+
+ // CraftBukkit end
59+
}
60+
61+
private static void playPortalSound(Entity p_352075_) {
62+
@@ -42,7 +_,7 @@
63+
}
64+
65+
public static DimensionTransition missingRespawnBlock(ServerLevel p_348517_, Entity p_352420_, DimensionTransition.PostDimensionTransition p_352305_) {
66+
- return new DimensionTransition(p_348517_, findAdjustedSharedSpawnPos(p_348517_, p_352420_), Vec3.ZERO, 0.0F, 0.0F, true, p_352305_);
67+
+ return new DimensionTransition(p_348517_, findAdjustedSharedSpawnPos(p_348517_, p_352420_), Vec3.ZERO, 0.0F, 0.0F, true, p_352305_, PlayerTeleportEvent.TeleportCause.UNKNOWN);
68+
}
69+
70+
private static Vec3 findAdjustedSharedSpawnPos(ServerLevel p_352080_, Entity p_352400_) {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.teneted.neotenet.injection.server.level;
2+
3+
public interface InjectionRespawnPosAngle {
4+
5+
default boolean isBedSpawn() {
6+
throw new IllegalStateException("Not implemented");
7+
}
8+
9+
default boolean isAnchorSpawn() {
10+
throw new IllegalStateException("Not implemented");
11+
}
12+
}

src/main/java/org/teneted/neotenet/injection/server/level/InjectionServerPlayer.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package org.teneted.neotenet.injection.server.level;
22

3+
import net.minecraft.world.level.portal.DimensionTransition;
4+
import org.bukkit.Location;
5+
import org.bukkit.craftbukkit.event.CraftPortalEvent;
36
import org.bukkit.event.player.PlayerRespawnEvent;
47
import org.teneted.neotenet.injection.world.entity.player.InjectionPlayer;
58
import com.mojang.datafixers.util.Either;
9+
610
import java.util.Optional;
11+
712
import net.minecraft.BlockUtil;
813
import net.minecraft.core.BlockPos;
914
import net.minecraft.core.Direction;
@@ -106,4 +111,12 @@ default void pushRespawnCause(PlayerRespawnEvent.RespawnReason reason) {
106111
default void resendItemInHands() {
107112
throw new IllegalStateException("Not implemented");
108113
}
114+
115+
default DimensionTransition findRespawnPositionAndUseSpawnBlock(boolean p_348590_, DimensionTransition.PostDimensionTransition p_352261_, PlayerRespawnEvent.RespawnReason reason) {
116+
throw new IllegalStateException("Not implemented");
117+
}
118+
119+
default CraftPortalEvent callPortalEvent(Entity entity, Location exit, PlayerTeleportEvent.TeleportCause cause, int searchRadius, int creationRadius) {
120+
throw new IllegalStateException("Not implemented");
121+
}
109122
}

src/main/java/org/teneted/neotenet/injection/world/level/portal/InjectionDimensionTransition.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
public interface InjectionDimensionTransition {
66

7+
8+
79
default void setTeleportCause(PlayerTeleportEvent.TeleportCause cause) {
810
throw new RuntimeException("Not implemented");
911
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.teneted.neotenet.mixin.server.level;
2+
3+
import net.minecraft.server.level.*;
4+
import org.spongepowered.asm.mixin.Final;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Shadow;
7+
import org.teneted.neotenet.injection.server.level.InjectionRespawnPosAngle;
8+
9+
@Mixin(ServerPlayer.RespawnPosAngle.class)
10+
public abstract class MixinRespawnPosAngle implements InjectionRespawnPosAngle {
11+
12+
@Shadow
13+
@Final
14+
private boolean isBedSpawn;
15+
@Shadow
16+
@Final
17+
private boolean isAnchorSpawn;
18+
19+
20+
@Override
21+
public boolean isBedSpawn() {
22+
return this.isBedSpawn;
23+
}
24+
25+
@Override
26+
public boolean isAnchorSpawn() {
27+
return this.isAnchorSpawn;
28+
}
29+
}

0 commit comments

Comments
 (0)