This repository has been archived on 2020-03-24. You can view files and clone it, but cannot push or open issues or pull requests.
ObsidianSpawn/src/main/java/com/thebrokenrail/obsidianspawn/mixin/MixinServerPlayNetworkHandl...

36 lines
1.7 KiB
Java

package com.thebrokenrail.obsidianspawn.mixin;
import com.thebrokenrail.obsidianspawn.DataHolder;
import com.thebrokenrail.obsidianspawn.ObsidianSpawn;
import net.minecraft.block.Block;
import net.minecraft.block.CryingObsidianBlock;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.world.WorldView;
import net.minecraft.world.dimension.DimensionType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
@SuppressWarnings("unused")
@Mixin(ServerPlayNetworkHandler.class)
public class MixinServerPlayNetworkHandler {
@ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;respawnPlayer(Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/world/dimension/DimensionType;Z)Lnet/minecraft/server/network/ServerPlayerEntity;"), method = "onClientStatus", index = 1)
public DimensionType adjustRespawnDimension(ServerPlayerEntity player, DimensionType dimension, boolean alive) {
if (player.getSpawnPosition() != null) {
DimensionType type = ((DataHolder) player).getSpawnDimension();
WorldView world = player.server.getWorld(type);
Block block = world.getBlockState(player.getSpawnPosition()).getBlock();
if (!(block instanceof CryingObsidianBlock)) {
return DimensionType.OVERWORLD;
} else if (!ObsidianSpawn.checkPosition(world, player.getSpawnPosition()).isPresent()) {
return DimensionType.OVERWORLD;
} else {
return type;
}
} else {
return DimensionType.OVERWORLD;
}
}
}