- 35
- 0
Салам фарумчане, сделал собственное измерение и хочу чтобы оно было для каждого игрока уникальным, то есть, у меня есть блок который по нажатию по нему телепортирует в мое измерение, мне нужно сделать так, чтобы, допустим есть игрок 1 и 2, если игрок нажмет на блок портала то для него создается временно новое измерение, и только его туда телепортирует, если игрок 2 нажмет на блок портала то его так же телепортирует в измерение но уже которое создается для него и загружается во второе измерение, это для того, чтобы игроки не встретились и для каждого блока портала было свое временно уникальное измерение, я примерно понимаю как это реализовать, сгенерировать уникальный айди при помощи UUID, и по этому айди сгенерировать изерение, но не до конца понимаю как это исполнить, буду благодарен любой мысли
Метод нажатия в классе блока:
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
if (!world.isRemote) {
if (player instanceof EntityPlayerMP) {
EntityPlayerMP playerMP = (EntityPlayerMP) player;
MinecraftServer server = world.getMinecraftServer();
if (server != null) {
WorldServer destinationWorld = server.getWorld(2);
if (destinationWorld != null) {
Teleporter teleporter = new TeleporterCustomDimension(destinationWorld);
server.getPlayerList().transferPlayerToDimension(playerMP, 2, teleporter);
world.setBlockToAir(pos);
}
}
}
}
return true;
}
Инит измерения:
public class DimensionInit
{
public static final DimensionType DANGE = DimensionType.register("Dange", "_dange", 2, DimensionDange.class, false);
public static void registerDimension()
{
DimensionManager.registerDimension(2, DANGE);
}
}
Класс телепортации:
public class TeleporterCustomDimension extends Teleporter {
private final WorldServer worldServer;
public TeleporterCustomDimension(WorldServer worldServer) {
super(worldServer);
this.worldServer = worldServer;
}
@Override
public void placeInPortal(Entity entity, float rotationYaw) {
entity.setPositionAndRotation(100, 10, 100, entity.rotationYaw, entity.rotationPitch);
}
@Override
public boolean placeInExistingPortal(Entity entity, float rotationYaw) {
return false;
}
@Override
public boolean makePortal(Entity entity) {
return true;
}
}
Провайдер:
public class DimensionDange extends WorldProvider
{
public DimensionDange()
{
this.biomeProvider = new BiomeProviderSingle(BiomeInit.DANGE);
this.hasSkyLight = false;
}
@Override
public DimensionType getDimensionType()
{
return DimensionInit.DANGE;
}
@Override
public IChunkGenerator createChunkGenerator()
{
return new CustomChunkGenerator(world, true, world.getSeed());
}
@Override
public boolean canRespawnHere()
{
return false;
}
@Override
public boolean isSurfaceWorld()
{
return false;
}
}
Последнее редактирование: