Search in sources :

Example 1 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class MyCommandServer method register.

public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {
    LiteralArgumentBuilder<ServerCommandSource> builder = CommandManager.literal("portal").requires(commandSource -> commandSource.hasPermissionLevel(2));
    builder.then(CommandManager.literal("border_set").then(CommandManager.argument("x1", IntegerArgumentType.integer()).then(CommandManager.argument("y1", IntegerArgumentType.integer()).then(CommandManager.argument("x2", IntegerArgumentType.integer()).then(CommandManager.argument("y2", IntegerArgumentType.integer()).executes(context -> {
        BorderPortal.setBorderPortal(context.getSource().getWorld(), IntegerArgumentType.getInteger(context, "x1"), IntegerArgumentType.getInteger(context, "y1"), IntegerArgumentType.getInteger(context, "x2"), IntegerArgumentType.getInteger(context, "y2"));
        return 0;
    }))))));
    builder.then(CommandManager.literal("border_remove").executes(context -> {
        BorderPortal.removeBorderPortal(context.getSource().getWorld());
        return 0;
    }));
    builder.then(CommandManager.literal("view_portal_data").executes(context -> {
        return processPortalTargetedCommand(context, (portal) -> {
            sendPortalInfo(context, portal);
        });
    }));
    builder.then(CommandManager.literal("set_portal_custom_name").then(CommandManager.argument("name", TextArgumentType.text()).executes(context -> {
        return processPortalTargetedCommand(context, portal -> {
            Text name = TextArgumentType.getTextArgument(context, "name");
            portal.setCustomName(name);
        });
    })));
    builder.then(CommandManager.literal("delete_portal").executes(context -> processPortalTargetedCommand(context, portal -> {
        sendMessage(context, "deleted " + portal);
        portal.remove();
    })));
    builder.then(CommandManager.literal("set_portal_nbt").then(CommandManager.argument("nbt", NbtCompoundTagArgumentType.nbtCompound()).executes(context -> processPortalTargetedCommand(context, portal -> {
        CompoundTag newNbt = NbtCompoundTagArgumentType.getCompoundTag(context, "nbt");
        CompoundTag portalNbt = portal.toTag(new CompoundTag());
        newNbt.getKeys().forEach(key -> portalNbt.put(key, newNbt.getTag(key)));
        // portalNbt.copyFrom(newNbt);
        UUID uuid = portal.getUuid();
        portal.fromTag(portalNbt);
        portal.setUuid(uuid);
        reloadPortal(portal);
        sendPortalInfo(context, portal);
    }))));
    builder.then(CommandManager.literal("set_portal_destination").then(CommandManager.argument("dim", DimensionArgumentType.dimension()).then(CommandManager.argument("dest", Vec3ArgumentType.vec3()).executes(context -> processPortalTargetedCommand(context, portal -> {
        try {
            portal.dimensionTo = DimensionArgumentType.getDimensionArgument(context, "dim");
            portal.destination = Vec3ArgumentType.getVec3(context, "dest");
            reloadPortal(portal);
            sendMessage(context, portal.toString());
        } catch (CommandSyntaxException ignored) {
            ignored.printStackTrace();
        }
    })))));
    builder.then(CommandManager.literal("tpme").then(CommandManager.argument("dim", DimensionArgumentType.dimension()).then(CommandManager.argument("dest", Vec3ArgumentType.vec3()).executes(context -> {
        DimensionType dimension = DimensionArgumentType.getDimensionArgument(context, "dim");
        Vec3d pos = Vec3ArgumentType.getVec3(context, "dest");
        ServerPlayerEntity player = context.getSource().getPlayer();
        SGlobal.serverTeleportationManager.invokeTpmeCommand(player, dimension, pos);
        return 0;
    }))));
    builder.then(CommandManager.literal("complete_bi_way_portal").executes(context -> processPortalTargetedCommand(context, portal -> {
        Portal result = completeBiWayPortal(portal, p -> sendMessage(context, "Removed " + p));
        sendMessage(context, "Added " + result);
    })));
    builder.then(CommandManager.literal("complete_bi_faced_portal").executes(context -> processPortalTargetedCommand(context, portal -> {
        Portal result = completeBiFacedPortal(portal, p -> sendMessage(context, "Removed " + p));
        sendMessage(context, "Added " + result);
    })));
    builder.then(CommandManager.literal("complete_bi_way_bi_faced_portal").executes(context -> processPortalTargetedCommand(context, portal -> completeBiWayBiFacedPortal(portal, p -> sendMessage(context, "Removed " + p), p -> sendMessage(context, "Added " + p)))));
    builder.then(CommandManager.literal("remove_connected_portals").executes(context -> processPortalTargetedCommand(context, portal -> {
        Consumer<Portal> removalInformer = p -> sendMessage(context, "Removed " + p);
        removeOverlappedPortals(portal.world, portal.getPos(), portal.getNormal().multiply(-1), removalInformer);
        ServerWorld toWorld = McHelper.getServer().getWorld(portal.dimensionTo);
        removeOverlappedPortals(toWorld, portal.destination, portal.getNormal().multiply(-1), removalInformer);
        removeOverlappedPortals(toWorld, portal.destination, portal.getNormal(), removalInformer);
    })));
    builder.then(CommandManager.literal("connect_floor").then(CommandManager.argument("from", DimensionArgumentType.dimension()).then(CommandManager.argument("to", DimensionArgumentType.dimension()).executes(context -> {
        DimensionType from = DimensionArgumentType.getDimensionArgument(context, "from");
        DimensionType to = DimensionArgumentType.getDimensionArgument(context, "to");
        VerticalConnectingPortal.connect(from, VerticalConnectingPortal.ConnectorType.floor, to);
        return 0;
    }))));
    builder.then(CommandManager.literal("connect_ceil").then(CommandManager.argument("from", DimensionArgumentType.dimension()).then(CommandManager.argument("to", DimensionArgumentType.dimension()).executes(context -> {
        DimensionType from = DimensionArgumentType.getDimensionArgument(context, "from");
        DimensionType to = DimensionArgumentType.getDimensionArgument(context, "to");
        VerticalConnectingPortal.connect(from, VerticalConnectingPortal.ConnectorType.ceil, to);
        return 0;
    }))));
    builder.then(CommandManager.literal("connection_floor_remove").then(CommandManager.argument("dim", DimensionArgumentType.dimension()).executes(context -> {
        DimensionType dim = DimensionArgumentType.getDimensionArgument(context, "dim");
        VerticalConnectingPortal.removeConnectingPortal(VerticalConnectingPortal.ConnectorType.floor, dim);
        return 0;
    })));
    builder.then(CommandManager.literal("connection_ceil_remove").then(CommandManager.argument("dim", DimensionArgumentType.dimension()).executes(context -> {
        DimensionType dim = DimensionArgumentType.getDimensionArgument(context, "dim");
        VerticalConnectingPortal.removeConnectingPortal(VerticalConnectingPortal.ConnectorType.ceil, dim);
        return 0;
    })));
    dispatcher.register(builder);
}
Also used : LiteralText(net.minecraft.text.LiteralText) Vec3ArgumentType(net.minecraft.command.arguments.Vec3ArgumentType) CommandDispatcher(com.mojang.brigadier.CommandDispatcher) ServerCommandSource(net.minecraft.server.command.ServerCommandSource) TextArgumentType(net.minecraft.command.arguments.TextArgumentType) ServerWorld(net.minecraft.server.world.ServerWorld) DimensionArgumentType(net.minecraft.command.arguments.DimensionArgumentType) NbtCompoundTagArgumentType(net.minecraft.command.arguments.NbtCompoundTagArgumentType) SpecialPortalShape(com.qouteall.immersive_portals.portal.SpecialPortalShape) ModMain(com.qouteall.immersive_portals.ModMain) Vec3d(net.minecraft.util.math.Vec3d) SGlobal(com.qouteall.immersive_portals.SGlobal) CommandContext(com.mojang.brigadier.context.CommandContext) World(net.minecraft.world.World) Box(net.minecraft.util.math.Box) UUID(java.util.UUID) Helper(com.qouteall.immersive_portals.Helper) Collectors(java.util.stream.Collectors) LiteralArgumentBuilder(com.mojang.brigadier.builder.LiteralArgumentBuilder) Pair(com.mojang.datafixers.util.Pair) CommandManager(net.minecraft.server.command.CommandManager) Consumer(java.util.function.Consumer) McHelper(com.qouteall.immersive_portals.McHelper) VerticalConnectingPortal(com.qouteall.immersive_portals.portal.global_portals.VerticalConnectingPortal) CompoundTag(net.minecraft.nbt.CompoundTag) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) DimensionType(net.minecraft.world.dimension.DimensionType) Portal(com.qouteall.immersive_portals.portal.Portal) Text(net.minecraft.text.Text) Comparator(java.util.Comparator) IntegerArgumentType(com.mojang.brigadier.arguments.IntegerArgumentType) CommandSyntaxException(com.mojang.brigadier.exceptions.CommandSyntaxException) BorderPortal(com.qouteall.immersive_portals.portal.global_portals.BorderPortal) DimensionType(net.minecraft.world.dimension.DimensionType) LiteralText(net.minecraft.text.LiteralText) Text(net.minecraft.text.Text) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) Vec3d(net.minecraft.util.math.Vec3d) ServerCommandSource(net.minecraft.server.command.ServerCommandSource) ServerWorld(net.minecraft.server.world.ServerWorld) VerticalConnectingPortal(com.qouteall.immersive_portals.portal.global_portals.VerticalConnectingPortal) Portal(com.qouteall.immersive_portals.portal.Portal) BorderPortal(com.qouteall.immersive_portals.portal.global_portals.BorderPortal) UUID(java.util.UUID) CompoundTag(net.minecraft.nbt.CompoundTag) CommandSyntaxException(com.mojang.brigadier.exceptions.CommandSyntaxException)

Example 2 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class MyCommandServer method completeBiFacedPortal.

private static Portal completeBiFacedPortal(Portal portal, Consumer<Portal> removalInformer) {
    ServerWorld world = ((ServerWorld) portal.world);
    removeOverlappedPortals(world, portal.getPos(), portal.getNormal().multiply(-1), removalInformer);
    Portal newPortal = Portal.entityType.create(world);
    newPortal.dimensionTo = portal.dimensionTo;
    newPortal.setPosition(portal.x, portal.y, portal.z);
    newPortal.destination = portal.destination;
    newPortal.loadFewerChunks = portal.loadFewerChunks;
    newPortal.specificPlayer = portal.specificPlayer;
    newPortal.width = portal.width;
    newPortal.height = portal.height;
    newPortal.axisW = portal.axisW;
    newPortal.axisH = portal.axisH.multiply(-1);
    if (portal.specialShape != null) {
        newPortal.specialShape = new SpecialPortalShape();
        initFlippedShape(newPortal, portal.specialShape);
    }
    world.spawnEntity(newPortal);
    return newPortal;
}
Also used : ServerWorld(net.minecraft.server.world.ServerWorld) SpecialPortalShape(com.qouteall.immersive_portals.portal.SpecialPortalShape) VerticalConnectingPortal(com.qouteall.immersive_portals.portal.global_portals.VerticalConnectingPortal) Portal(com.qouteall.immersive_portals.portal.Portal) BorderPortal(com.qouteall.immersive_portals.portal.global_portals.BorderPortal)

Example 3 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class PortalRenderer method renderPortalIfRoughCheckPassed.

private void renderPortalIfRoughCheckPassed(Portal portal) {
    if (!portal.isPortalValid()) {
        Helper.err("rendering invalid portal " + portal);
        return;
    }
    Vec3d thisTickEyePos = getRoughTestCameraPos();
    if (!portal.isInFrontOfPortal(thisTickEyePos)) {
        return;
    }
    if (isRendering()) {
        // avoid rendering reverse portal inside portal
        Portal outerPortal = portalLayers.peek();
        if (!outerPortal.canRenderPortalInsideMe(portal)) {
            return;
        }
    }
    doRenderPortal(portal);
}
Also used : Portal(com.qouteall.immersive_portals.portal.Portal) Vec3d(net.minecraft.util.math.Vec3d)

Example 4 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class ServerTeleportationManager method onPlayerTeleportedInClient.

public void onPlayerTeleportedInClient(ServerPlayerEntity player, DimensionType dimensionBefore, Vec3d posBefore, UUID portalId) {
    ServerWorld originalWorld = McHelper.getServer().getWorld(dimensionBefore);
    Entity portalEntity = originalWorld.getEntity(portalId);
    if (portalEntity == null) {
        portalEntity = GlobalPortalStorage.get(originalWorld).data.stream().filter(p -> p.getUuid().equals(portalId)).findFirst().orElse(null);
    }
    lastTeleportGameTime.put(player, McHelper.getServerGameTime());
    if (canPlayerTeleport(player, dimensionBefore, posBefore, portalEntity)) {
        if (isTeleporting(player)) {
            Helper.err(player.toString() + "is teleporting frequently");
        }
        DimensionType dimensionTo = ((Portal) portalEntity).dimensionTo;
        Vec3d newPos = ((Portal) portalEntity).applyTransformationToPoint(posBefore);
        teleportPlayer(player, dimensionTo, newPos);
        ((Portal) portalEntity).onEntityTeleportedOnServer(player);
    } else {
        Helper.err(String.format("Player cannot teleport through portal %s %s %s %s", player.getName().asString(), player.dimension, player.getPos(), portalEntity));
    }
}
Also used : ServerWorld(net.minecraft.server.world.ServerWorld) MyNetwork(com.qouteall.immersive_portals.MyNetwork) Entity(net.minecraft.entity.Entity) java.util(java.util) IEServerPlayNetworkHandler(com.qouteall.immersive_portals.ducks.IEServerPlayNetworkHandler) GlobalPortalStorage(com.qouteall.immersive_portals.portal.global_portals.GlobalPortalStorage) ServerWorld(net.minecraft.server.world.ServerWorld) BlockPos(net.minecraft.util.math.BlockPos) Helper(com.qouteall.immersive_portals.Helper) McHelper(com.qouteall.immersive_portals.McHelper) ModMain(com.qouteall.immersive_portals.ModMain) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) Stream(java.util.stream.Stream) Vec3d(net.minecraft.util.math.Vec3d) DimensionType(net.minecraft.world.dimension.DimensionType) Portal(com.qouteall.immersive_portals.portal.Portal) CustomPayloadS2CPacket(net.minecraft.client.network.packet.CustomPayloadS2CPacket) IEServerPlayerEntity(com.qouteall.immersive_portals.ducks.IEServerPlayerEntity) Entity(net.minecraft.entity.Entity) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) IEServerPlayerEntity(com.qouteall.immersive_portals.ducks.IEServerPlayerEntity) DimensionType(net.minecraft.world.dimension.DimensionType) Portal(com.qouteall.immersive_portals.portal.Portal) Vec3d(net.minecraft.util.math.Vec3d)

Example 5 with Portal

use of com.qouteall.immersive_portals.portal.Portal in project ImmersivePortalsMod by qouteall.

the class MyRenderHelper method setupTransformationForMirror.

public static void setupTransformationForMirror(Camera camera) {
    if (CGlobal.renderer.isRendering()) {
        Portal renderingPortal = CGlobal.renderer.getRenderingPortal();
        if (renderingPortal instanceof Mirror) {
            Mirror mirror = (Mirror) renderingPortal;
            Vec3d relativePos = mirror.getPos().subtract(camera.getPos());
            GlStateManager.translated(relativePos.x, relativePos.y, relativePos.z);
            float[] arr = getMirrorTransformation(mirror.getNormal());
            multMatrix(arr);
            GlStateManager.translated(-relativePos.x, -relativePos.y, -relativePos.z);
        // GlStateManager.cullFace(GlStateManager.FaceSides.FRONT);
        } else {
        // GlStateManager.cullFace(GlStateManager.FaceSides.BACK);
        }
    } else {
    // GlStateManager.cullFace(GlStateManager.FaceSides.BACK);
    }
}
Also used : Portal(com.qouteall.immersive_portals.portal.Portal) Mirror(com.qouteall.immersive_portals.portal.Mirror) Vec3d(net.minecraft.util.math.Vec3d)

Aggregations

Portal (com.qouteall.immersive_portals.portal.Portal)16 Vec3d (net.minecraft.util.math.Vec3d)9 SpecialPortalShape (com.qouteall.immersive_portals.portal.SpecialPortalShape)6 BorderPortal (com.qouteall.immersive_portals.portal.global_portals.BorderPortal)6 VerticalConnectingPortal (com.qouteall.immersive_portals.portal.global_portals.VerticalConnectingPortal)6 ServerWorld (net.minecraft.server.world.ServerWorld)6 DimensionType (net.minecraft.world.dimension.DimensionType)6 Consumer (java.util.function.Consumer)5 ServerPlayerEntity (net.minecraft.server.network.ServerPlayerEntity)5 Helper (com.qouteall.immersive_portals.Helper)4 McHelper (com.qouteall.immersive_portals.McHelper)4 Mirror (com.qouteall.immersive_portals.portal.Mirror)4 MinecraftClient (net.minecraft.client.MinecraftClient)4 CommandDispatcher (com.mojang.brigadier.CommandDispatcher)3 IntegerArgumentType (com.mojang.brigadier.arguments.IntegerArgumentType)3 LiteralArgumentBuilder (com.mojang.brigadier.builder.LiteralArgumentBuilder)3 CommandContext (com.mojang.brigadier.context.CommandContext)3 CommandSyntaxException (com.mojang.brigadier.exceptions.CommandSyntaxException)3 CGlobal (com.qouteall.immersive_portals.CGlobal)3 ModMain (com.qouteall.immersive_portals.ModMain)3