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