mirror of
https://github.com/LeavesMC/Leaves.git
synced 2026-01-04 15:41:31 +00:00
Support bot change dimension
This commit is contained in:
@@ -188,7 +188,7 @@ index e29dd7c4759319fffea46bca17b65df412eca6f5..b1821dc6bfdda93431e2f43d5de6ecc6
|
||||
}
|
||||
|
||||
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
||||
index 568b6e60482c61363b6052c73fbc26a2ba19d5df..2e85dcfa644e45de14d951edc6c5bf16beb6cd10 100644
|
||||
index 568b6e60482c61363b6052c73fbc26a2ba19d5df..c14ef70b9ea249688f747b44cb0039a12cb2fdaf 100644
|
||||
--- a/net/minecraft/server/level/ServerPlayer.java
|
||||
+++ b/net/minecraft/server/level/ServerPlayer.java
|
||||
@@ -209,7 +209,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||
@@ -200,6 +200,26 @@ index 568b6e60482c61363b6052c73fbc26a2ba19d5df..2e85dcfa644e45de14d951edc6c5bf16
|
||||
private final PlayerAdvancements advancements;
|
||||
private final ServerStatsCounter stats;
|
||||
private float lastRecordedHealthAndAbsorption = Float.MIN_VALUE;
|
||||
@@ -218,8 +218,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||
private int lastRecordedArmor = Integer.MIN_VALUE;
|
||||
private int lastRecordedLevel = Integer.MIN_VALUE;
|
||||
private int lastRecordedExperience = Integer.MIN_VALUE;
|
||||
- private float lastSentHealth = -1.0E8F;
|
||||
- private int lastSentFood = -99999999;
|
||||
+ protected float lastSentHealth = -1.0E8F;
|
||||
+ protected int lastSentFood = -99999999;
|
||||
private boolean lastFoodSaturationZero = true;
|
||||
public int lastSentExp = -99999999;
|
||||
private ChatVisiblity chatVisibility = ChatVisiblity.FULL;
|
||||
@@ -241,7 +241,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||
@Nullable
|
||||
private Vec3 startingToFallPosition;
|
||||
@Nullable
|
||||
- private Vec3 enteredNetherPosition;
|
||||
+ protected Vec3 enteredNetherPosition;
|
||||
@Nullable
|
||||
private Vec3 enteredLavaOnVehiclePosition;
|
||||
private SectionPos lastSectionPos = SectionPos.of(0, 0, 0);
|
||||
@@ -1413,6 +1413,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||
this.lastSentHealth = -1.0F;
|
||||
this.lastSentFood = -1;
|
||||
|
||||
@@ -11,17 +11,24 @@ import net.minecraft.nbt.ListTag;
|
||||
import net.minecraft.nbt.StringTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
import net.minecraft.network.protocol.game.ClientboundChangeDifficultyPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundRespawnPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.level.ChunkMap;
|
||||
import net.minecraft.server.level.ClientInformation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.network.ServerPlayerConnection;
|
||||
import net.minecraft.server.players.PlayerList;
|
||||
import net.minecraft.stats.ServerStatsCounter;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.util.profiling.Profiler;
|
||||
import net.minecraft.util.profiling.ProfilerFiller;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.SimpleMenuProvider;
|
||||
@@ -36,9 +43,11 @@ import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.inventory.ChestMenu;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.GameRules;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.gameevent.GameEvent;
|
||||
import net.minecraft.world.level.portal.TeleportTransition;
|
||||
import net.minecraft.world.level.storage.LevelData;
|
||||
import net.minecraft.world.phys.EntityHitResult;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
@@ -214,26 +223,60 @@ public class ServerBot extends ServerPlayer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ServerBot teleport(@NotNull TeleportTransition teleportTarget) {
|
||||
public @Nullable ServerBot teleport(@NotNull TeleportTransition teleportTransition) {
|
||||
if (this.isSleeping() || this.isRemoved()) {
|
||||
return null;
|
||||
}
|
||||
if (teleportTarget.newLevel().dimension() != this.serverLevel().dimension()) {
|
||||
return null;
|
||||
} else {
|
||||
if (!teleportTarget.asPassenger()) {
|
||||
this.stopRiding();
|
||||
}
|
||||
if (!teleportTransition.asPassenger()) {
|
||||
this.removeVehicle();
|
||||
}
|
||||
|
||||
this.connection.internalTeleport(PositionMoveRotation.of(teleportTarget), teleportTarget.relatives());
|
||||
ServerLevel level = teleportTransition.newLevel();
|
||||
ServerLevel serverLevel = this.serverLevel();
|
||||
|
||||
if (level != null && level.dimension() == serverLevel.dimension()) {
|
||||
this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives());
|
||||
this.connection.resetPosition();
|
||||
teleportTarget.postTeleportTransition().onTransition(this);
|
||||
teleportTransition.postTeleportTransition().onTransition(this);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlePortal() {
|
||||
ResourceKey<net.minecraft.world.level.dimension.LevelStem> resourceKey = serverLevel.getTypeKey();
|
||||
if (level != null && resourceKey == net.minecraft.world.level.dimension.LevelStem.OVERWORLD && level.getTypeKey() == net.minecraft.world.level.dimension.LevelStem.NETHER) { // CraftBukkit - empty to fall through to null to event
|
||||
this.enteredNetherPosition = this.position();
|
||||
}
|
||||
this.isChangingDimension = true;
|
||||
serverLevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION);
|
||||
this.unsetRemoved();
|
||||
this.setServerLevel(level);
|
||||
this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event
|
||||
this.connection.resetPosition();
|
||||
level.addDuringTeleport(this);
|
||||
this.triggerDimensionChangeTriggers(serverLevel);
|
||||
this.stopUsingItem();
|
||||
teleportTransition.postTeleportTransition().onTransition(this);
|
||||
this.isChangingDimension = false;
|
||||
this.lastSentExp = -1;
|
||||
this.lastSentHealth = -1.0F;
|
||||
this.lastSentFood = -1;
|
||||
|
||||
if (org.leavesmc.leaves.LeavesConfig.modify.netherPortalFix) {
|
||||
final ResourceKey<Level> fromDim = serverLevel.dimension();
|
||||
final ResourceKey<Level> toDim = level().dimension();
|
||||
final ResourceKey<Level> OVERWORLD = Level.OVERWORLD;
|
||||
final ResourceKey<Level> THE_NETHER = Level.NETHER;
|
||||
if (!((fromDim != OVERWORLD || toDim != THE_NETHER) && (fromDim != THE_NETHER || toDim != OVERWORLD))) {
|
||||
BlockPos fromPortal = org.leavesmc.leaves.util.ReturnPortalManager.findPortalAt(this, fromDim, lastPos);
|
||||
BlockPos toPos = this.blockPosition();
|
||||
if (fromPortal != null) {
|
||||
org.leavesmc.leaves.util.ReturnPortalManager.storeReturnPortal(this, toDim, toPos, fromPortal);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.isBlocking()) {
|
||||
this.stopUsingItem();
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user