Search in sources :

Example 11 with Portal

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

the class MyCommandServer method getPlayerPointingPortal.

private static Portal getPlayerPointingPortal(ServerPlayerEntity player) {
    Vec3d from = player.getCameraPosVec(1);
    Vec3d to = from.add(player.getRotationVector().multiply(100));
    Pair<Portal, Vec3d> result = McHelper.getEntitiesNearby(player, Portal.class, 100).map(portal -> new Pair<Portal, Vec3d>(portal, portal.rayTrace(from, to))).filter(portalAndHitPos -> portalAndHitPos.getSecond() != null).min(Comparator.comparingDouble(portalAndHitPos -> portalAndHitPos.getSecond().squaredDistanceTo(from))).orElse(null);
    if (result != null) {
        return result.getFirst();
    } else {
        return null;
    }
}
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) 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) Vec3d(net.minecraft.util.math.Vec3d) Pair(com.mojang.datafixers.util.Pair)

Example 12 with Portal

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

the class MyCommandServer method completeBiWayPortal.

private static Portal completeBiWayPortal(Portal portal, Consumer<Portal> removalInformer) {
    ServerWorld toWorld = McHelper.getServer().getWorld(portal.dimensionTo);
    removeOverlappedPortals(toWorld, portal.destination, portal.getNormal().multiply(-1), removalInformer);
    Portal newPortal = Portal.entityType.create(toWorld);
    newPortal.dimensionTo = portal.dimension;
    newPortal.setPosition(portal.destination.x, portal.destination.y, portal.destination.z);
    newPortal.destination = portal.getPos();
    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);
    }
    toWorld.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 13 with Portal

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

the class MyCommandServer method processPortalTargetedCommand.

public static int processPortalTargetedCommand(CommandContext<ServerCommandSource> context, Consumer<Portal> processCommand) throws CommandSyntaxException {
    ServerCommandSource source = context.getSource();
    ServerPlayerEntity player = source.getPlayer();
    if (player == null) {
        source.sendFeedback(new LiteralText("Only player can use this command"), true);
        return 0;
    }
    Portal portal = getPlayerPointingPortal(player);
    if (portal == null) {
        source.sendFeedback(new LiteralText("You are not pointing to any portal"), true);
        return 0;
    } else {
        processCommand.accept(portal);
    }
    return 0;
}
Also used : 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) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) ServerCommandSource(net.minecraft.server.command.ServerCommandSource) LiteralText(net.minecraft.text.LiteralText)

Example 14 with Portal

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

the class MyCommandClient method register.

public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {
    // for composite command arguments, put into then() 's bracket
    // for parallel command arguments, put behind then()
    LiteralArgumentBuilder<ServerCommandSource> builder = CommandManager.literal("immersive_portals_debug").requires(commandSource -> true).then(CommandManager.literal("set_max_portal_layer").then(CommandManager.argument("argMaxPortalLayer", IntegerArgumentType.integer()).executes(context -> setMaxPortalLayer(IntegerArgumentType.getInteger(context, "argMaxPortalLayer")))));
    builder = builder.then(CommandManager.literal("list_nearby_portals").executes(context -> listNearbyPortals(context)));
    builder = builder.then(CommandManager.literal("is_client_chunk_loaded").then(CommandManager.argument("chunkX", IntegerArgumentType.integer()).then(CommandManager.argument("chunkZ", IntegerArgumentType.integer()).executes(MyCommandClient::isClientChunkLoaded))));
    builder = builder.then(CommandManager.literal("is_server_chunk_loaded").then(CommandManager.argument("chunkX", IntegerArgumentType.integer()).then(CommandManager.argument("chunkZ", IntegerArgumentType.integer()).executes(context -> {
        int chunkX = IntegerArgumentType.getInteger(context, "chunkX");
        int chunkZ = IntegerArgumentType.getInteger(context, "chunkZ");
        ServerPlayerEntity player = context.getSource().getPlayer();
        Chunk chunk = McHelper.getServer().getWorld(player.dimension).getChunk(chunkX, chunkZ, ChunkStatus.FULL, false);
        McHelper.serverLog(player, chunk != null && !(chunk instanceof EmptyChunk) ? "yes" : "no");
        return 0;
    }))));
    builder = builder.then(CommandManager.literal("add_portal").executes(context -> addPortal(context)));
    builder = builder.then(CommandManager.literal("report_player_status").executes(context -> reportPlayerStatus(context)));
    builder = builder.then(CommandManager.literal("client_remote_ticking_enable").executes(context -> {
        CGlobal.isClientRemoteTickingEnabled = true;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("client_remote_ticking_disable").executes(context -> {
        CGlobal.isClientRemoteTickingEnabled = false;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("advanced_frustum_culling_enable").executes(context -> {
        CGlobal.doUseAdvancedFrustumCulling = true;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("advanced_frustum_culling_disable").executes(context -> {
        CGlobal.doUseAdvancedFrustumCulling = false;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("multithreaded_chunk_loading_enable").executes(context -> {
        SGlobal.isChunkLoadingMultiThreaded = true;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("multithreaded_chunk_loading_disable").executes(context -> {
        SGlobal.isChunkLoadingMultiThreaded = false;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("hacked_chunk_render_dispatcher_enable").executes(context -> {
        CGlobal.useHackedChunkRenderDispatcher = true;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("hacked_chunk_render_dispatcher_disable").executes(context -> {
        CGlobal.useHackedChunkRenderDispatcher = false;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("front_culling_enable").executes(context -> {
        CGlobal.useFrontCulling = true;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("front_culling_disable").executes(context -> {
        CGlobal.useFrontCulling = false;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("switch_to_normal_renderer").executes(context -> {
        MinecraftClient.getInstance().execute(() -> {
            CGlobal.useCompatibilityRenderer = false;
        });
        return 0;
    }));
    builder = builder.then(CommandManager.literal("switch_to_compatibility_renderer").executes(context -> {
        MinecraftClient.getInstance().execute(() -> {
            CGlobal.useCompatibilityRenderer = true;
        });
        return 0;
    }));
    builder = builder.then(CommandManager.literal("report_server_entities").executes(context -> {
        ServerPlayerEntity player = context.getSource().getPlayer();
        List<Entity> entities = player.world.getEntities(Entity.class, new Box(player.getBlockPos()).expand(32));
        McHelper.serverLog(player, entities.toString());
        return 0;
    }));
    builder = builder.then(CommandManager.literal("report_resource_consumption").executes(MyCommandClient::reportResourceConsumption));
    builder = builder.then(CommandManager.literal("report_render_info_num").executes(context -> {
        String str = Helper.myToString(CGlobal.renderInfoNumMap.entrySet().stream());
        context.getSource().getPlayer().sendMessage(new LiteralText(str));
        return 0;
    }));
    builder = builder.then(CommandManager.literal("rebuild_all").executes(context -> {
        MinecraftClient.getInstance().execute(() -> {
            ((IEChunkRenderDispatcher) ((IEWorldRenderer) MinecraftClient.getInstance().worldRenderer).getChunkRenderDispatcher()).rebuildAll();
        });
        return 0;
    }));
    builder = builder.then(CommandManager.literal("shader_debug_enable").executes(context -> {
        CGlobal.isRenderDebugMode = true;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("shader_debug_disable").executes(context -> {
        CGlobal.isRenderDebugMode = false;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("get_player_colliding_portal_client").executes(context -> {
        Portal collidingPortal = ((IEEntity) MinecraftClient.getInstance().player).getCollidingPortal();
        McHelper.serverLog(context.getSource().getPlayer(), collidingPortal.toString());
        return 0;
    }));
    builder = builder.then(CommandManager.literal("report_rendering").executes(context -> {
        String str = MyRenderHelper.lastPortalRenderInfos.stream().map(list -> list.stream().map(Reference::get).collect(Collectors.toList())).collect(Collectors.toList()).toString();
        McHelper.serverLog(context.getSource().getPlayer(), str);
        return 0;
    }));
    builder = builder.then(CommandManager.literal("debug_mirror_mode_enable").executes(context -> {
        CGlobal.debugMirrorMode = true;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("debug_mirror_mode_disable").executes(context -> {
        CGlobal.debugMirrorMode = false;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("test_riding").executes(context -> {
        ServerPlayerEntity player = context.getSource().getPlayer();
        MinecartEntity minecart = EntityType.MINECART.create(player.world);
        minecart.setPosition(player.x + 1, player.y, player.z);
        player.world.spawnEntity(minecart);
        player.startRiding(minecart, true);
        return 0;
    }));
    builder = builder.then(CommandManager.literal("report_fog_color").executes(MyCommandClient::reportFogColor));
    builder = builder.then(CommandManager.literal("uniform_report_hand").executes(context -> {
        OFGlobal.debugFunc = program -> {
            String name = program.getName();
            if (name.equals("gbuffers_hand") || name.equals("gbuffers_hand_water")) {
                try {
                    ServerPlayerEntity player = context.getSource().getPlayer();
                    UniformReport.reportUniforms(program.getId(), s -> McHelper.serverLog(player, s));
                    OFGlobal.debugFunc = p -> {
                    };
                } catch (CommandSyntaxException e) {
                    e.printStackTrace();
                    return;
                }
            }
        };
        return 0;
    }));
    builder = builder.then(CommandManager.literal("teleport_on_rendering_enable").executes(context -> {
        CGlobal.teleportOnRendering = true;
        return 0;
    }));
    builder = builder.then(CommandManager.literal("teleport_on_rendering_disable").executes(context -> {
        CGlobal.teleportOnRendering = false;
        return 0;
    }));
    builder.then(CommandManager.literal("report_chunk_loaders").executes(context -> {
        ServerPlayerEntity player = context.getSource().getPlayer();
        ChunkVisibilityManager.getChunkLoaders(player).forEach(loader -> McHelper.serverLog(player, loader.toString()));
        return 0;
    }));
    dispatcher.register(builder);
    Helper.log("Successfully initialized command /immersive_portals_debug");
}
Also used : EntityType(net.minecraft.entity.EntityType) LiteralText(net.minecraft.text.LiteralText) CommandDispatcher(com.mojang.brigadier.CommandDispatcher) ServerCommandSource(net.minecraft.server.command.ServerCommandSource) BackgroundRenderer(net.minecraft.client.render.BackgroundRenderer) ServerWorld(net.minecraft.server.world.ServerWorld) Environment(net.fabricmc.api.Environment) CGlobal(com.qouteall.immersive_portals.CGlobal) Vec3d(net.minecraft.util.math.Vec3d) MinecartEntity(net.minecraft.entity.vehicle.MinecartEntity) EmptyChunk(net.minecraft.world.chunk.EmptyChunk) EnvType(net.fabricmc.api.EnvType) Chunk(net.minecraft.world.chunk.Chunk) SGlobal(com.qouteall.immersive_portals.SGlobal) MyRenderHelper(com.qouteall.immersive_portals.render.MyRenderHelper) Entity(net.minecraft.entity.Entity) MyClientChunkManager(com.qouteall.immersive_portals.chunk_loading.MyClientChunkManager) CommandContext(com.mojang.brigadier.context.CommandContext) OFGlobal(com.qouteall.immersive_portals.optifine_compatibility.OFGlobal) Box(net.minecraft.util.math.Box) UniformReport(com.qouteall.immersive_portals.optifine_compatibility.UniformReport) Helper(com.qouteall.immersive_portals.Helper) ChunkVisibilityManager(com.qouteall.immersive_portals.chunk_loading.ChunkVisibilityManager) Collectors(java.util.stream.Collectors) LiteralArgumentBuilder(com.mojang.brigadier.builder.LiteralArgumentBuilder) CommandManager(net.minecraft.server.command.CommandManager) Reference(java.lang.ref.Reference) Consumer(java.util.function.Consumer) McHelper(com.qouteall.immersive_portals.McHelper) List(java.util.List) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) com.qouteall.immersive_portals.ducks(com.qouteall.immersive_portals.ducks) DimensionType(net.minecraft.world.dimension.DimensionType) Portal(com.qouteall.immersive_portals.portal.Portal) ChunkStatus(net.minecraft.world.chunk.ChunkStatus) MinecraftClient(net.minecraft.client.MinecraftClient) ClientPlayerEntity(net.minecraft.client.network.ClientPlayerEntity) IntegerArgumentType(com.mojang.brigadier.arguments.IntegerArgumentType) CommandSyntaxException(com.mojang.brigadier.exceptions.CommandSyntaxException) DimensionRenderHelper(com.qouteall.immersive_portals.render.DimensionRenderHelper) EmptyChunk(net.minecraft.world.chunk.EmptyChunk) MinecartEntity(net.minecraft.entity.vehicle.MinecartEntity) Entity(net.minecraft.entity.Entity) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) ClientPlayerEntity(net.minecraft.client.network.ClientPlayerEntity) MinecartEntity(net.minecraft.entity.vehicle.MinecartEntity) Reference(java.lang.ref.Reference) ServerPlayerEntity(net.minecraft.server.network.ServerPlayerEntity) Box(net.minecraft.util.math.Box) EmptyChunk(net.minecraft.world.chunk.EmptyChunk) Chunk(net.minecraft.world.chunk.Chunk) ServerCommandSource(net.minecraft.server.command.ServerCommandSource) Portal(com.qouteall.immersive_portals.portal.Portal) CommandSyntaxException(com.mojang.brigadier.exceptions.CommandSyntaxException) LiteralText(net.minecraft.text.LiteralText)

Example 15 with Portal

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

the class MixinEntity method onTicking.

// maintain collidingPortal field
@Inject(method = "tick", at = @At("HEAD"))
private void onTicking(CallbackInfo ci) {
    if (collidingPortal != null) {
        if (collidingPortal.dimension != dimension) {
            collidingPortal = null;
        }
    }
    Portal nowCollidingPortal = CollisionHelper.getCollidingPortalUnreliable((Entity) (Object) this);
    if (nowCollidingPortal == null) {
        if (stopCollidingPortalCounter > 0) {
            stopCollidingPortalCounter--;
        } else {
            collidingPortal = null;
        }
    } else {
        collidingPortal = nowCollidingPortal;
        stopCollidingPortalCounter = 1;
    }
}
Also used : Portal(com.qouteall.immersive_portals.portal.Portal) Inject(org.spongepowered.asm.mixin.injection.Inject)

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