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;
}
}
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;
}
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;
}
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");
}
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;
}
}
Aggregations