This commit is contained in:
parent
eb62b6bc77
commit
ab15c7bd3c
@ -8,14 +8,19 @@ import net.minecraft.block.Blocks;
|
|||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
|
import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket;
|
||||||
import net.minecraft.server.command.TeleportCommand;
|
import net.minecraft.server.command.TeleportCommand;
|
||||||
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.server.world.ServerWorld;
|
import net.minecraft.server.world.ServerWorld;
|
||||||
|
import net.minecraft.sound.SoundCategory;
|
||||||
|
import net.minecraft.sound.SoundEvents;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.util.registry.RegistryKey;
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
import net.minecraft.world.Heightmap;
|
import net.minecraft.world.Heightmap;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
class EnergyTeleporter {
|
class EnergyTeleporter {
|
||||||
private static void teleport(Entity entity, ServerWorld to, Vec3d pos) {
|
private static void teleport(Entity entity, ServerWorld to, Vec3d pos) {
|
||||||
@ -29,6 +34,8 @@ class EnergyTeleporter {
|
|||||||
BlockPos center = EnergyPortalBlock.getCenterPos(world, blockPos);
|
BlockPos center = EnergyPortalBlock.getCenterPos(world, blockPos);
|
||||||
Vec3d offset = pos.subtract(Vec3d.ofBottomCenter(center));
|
Vec3d offset = pos.subtract(Vec3d.ofBottomCenter(center));
|
||||||
|
|
||||||
|
UUID uuid = entity.getUuid();
|
||||||
|
|
||||||
RegistryKey<World> worldKey = world.getRegistryKey();
|
RegistryKey<World> worldKey = world.getRegistryKey();
|
||||||
if (worldKey == World.OVERWORLD) {
|
if (worldKey == World.OVERWORLD) {
|
||||||
teleportWithMultiplier(world, entity, center, offset, World.NETHER, 1d / HardcodedConfig.ENERGY_PORTAL_MULTIPLIER);
|
teleportWithMultiplier(world, entity, center, offset, World.NETHER, 1d / HardcodedConfig.ENERGY_PORTAL_MULTIPLIER);
|
||||||
@ -37,6 +44,13 @@ class EnergyTeleporter {
|
|||||||
} else {
|
} else {
|
||||||
teleportToWorldSpawn(world, entity);
|
teleportToWorldSpawn(world, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (entity instanceof ServerPlayerEntity) {
|
||||||
|
ServerPlayerEntity player = world.getServer().getPlayerManager().getPlayer(uuid);
|
||||||
|
if (player != null) {
|
||||||
|
player.playSound(SoundEvents.BLOCK_PORTAL_TRAVEL, SoundCategory.PLAYERS, 0.25f, world.random.nextFloat() * 0.4f + 0.8f);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void teleportWithMultiplier(ServerWorld world, Entity entity, BlockPos center, Vec3d offset, RegistryKey<World> toKey, double multiplier) {
|
private static void teleportWithMultiplier(ServerWorld world, Entity entity, BlockPos center, Vec3d offset, RegistryKey<World> toKey, double multiplier) {
|
||||||
@ -45,6 +59,7 @@ class EnergyTeleporter {
|
|||||||
|
|
||||||
float yMultiplier = (float) to.getDimensionHeight() / (float) world.getDimensionHeight();
|
float yMultiplier = (float) to.getDimensionHeight() / (float) world.getDimensionHeight();
|
||||||
int y = (int) (center.getY() * yMultiplier);
|
int y = (int) (center.getY() * yMultiplier);
|
||||||
|
y = MathHelper.clamp(y, HardcodedConfig.ENERGY_PORTAL_Y_PADDING, to.getDimensionHeight() - HardcodedConfig.ENERGY_PORTAL_Y_PADDING - HardcodedConfig.ENERGY_PORTAL_Y_PADDING_EXTRA_TOP);
|
||||||
|
|
||||||
int x = (int) (center.getX() * multiplier);
|
int x = (int) (center.getX() * multiplier);
|
||||||
int z = (int) (center.getZ() * multiplier);
|
int z = (int) (center.getZ() * multiplier);
|
||||||
@ -66,8 +81,8 @@ class EnergyTeleporter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
offset = new Vec3d(offset.getX(), Math.max(0, offset.getY()), offset.getZ());
|
||||||
Vec3d target = Vec3d.ofBottomCenter(targetBlock).add(offset);
|
Vec3d target = Vec3d.ofBottomCenter(targetBlock).add(offset);
|
||||||
target = new Vec3d(target.getX(), Math.max(0, target.getY()), target.getZ());
|
|
||||||
|
|
||||||
teleport(entity, to, target);
|
teleport(entity, to, target);
|
||||||
}
|
}
|
||||||
|
@ -47,5 +47,7 @@ public class HardcodedConfig {
|
|||||||
|
|
||||||
public static final long ENERGY_PROJECTOR_ENERGY_REQUIRED = 37;
|
public static final long ENERGY_PROJECTOR_ENERGY_REQUIRED = 37;
|
||||||
public static final int ENERGY_PORTAL_COOLDOWN = 28;
|
public static final int ENERGY_PORTAL_COOLDOWN = 28;
|
||||||
public static final int ENERGY_PORTAL_MULTIPLIER = 32;
|
public static final int ENERGY_PORTAL_MULTIPLIER = 16;
|
||||||
|
public static final int ENERGY_PORTAL_Y_PADDING = 4;
|
||||||
|
public static final int ENERGY_PORTAL_Y_PADDING_EXTRA_TOP = 3;
|
||||||
}
|
}
|
Reference in New Issue
Block a user