import { useRouter } from "expo-router"; import { useCallback, useState } from "react"; import { ImageBackground, KeyboardAvoidingView, Platform, ScrollView, Text, TextInput, TouchableOpacity, View, } from "react-native"; import { SafeAreaView } from "react-native-safe-area-context"; import { styles } from "./styles"; const converterBgImage = require("../assets/images/nether.png"); export default function CoordinateConverter() { const router = useRouter(); const [overworldX, setOverworldX] = useState(""); const [overworldZ, setOverworldZ] = useState(""); const [netherX, setNetherX] = useState(""); const [netherZ, setNetherZ] = useState(""); const safeParseFloat = (value: string) => { const num = parseFloat(value); return isNaN(num) ? undefined : num; }; const convertOWToNether = useCallback( (xStr: string, zStr: string) => { const x = safeParseFloat(xStr); const z = safeParseFloat(zStr); if (x !== undefined && z !== undefined) { setNetherX(Math.floor(x / 8).toString()); setNetherZ(Math.floor(z / 8).toString()); } else { setNetherX(""); setNetherZ(""); } }, [] ); const convertNetherToOW = useCallback( (xStr: string, zStr: string) => { const x = safeParseFloat(xStr); const z = safeParseFloat(zStr); if (x !== undefined && z !== undefined) { setOverworldX(Math.floor(x * 8).toString()); setOverworldZ(Math.floor(z * 8).toString()); } else { setOverworldX(""); setOverworldZ(""); } }, [] ); const handleOverworldXChange = useCallback( (text: string) => { setOverworldX(text); convertOWToNether(text, overworldZ); }, [overworldZ, convertOWToNether] ); const handleOverworldZChange = useCallback( (text: string) => { setOverworldZ(text); convertOWToNether(overworldX, text); }, [overworldX, convertOWToNether] ); const handleNetherXChange = useCallback( (text: string) => { setNetherX(text); convertNetherToOW(text, netherZ); }, [netherZ, convertNetherToOW] ); const handleNetherZChange = useCallback( (text: string) => { setNetherZ(text); convertNetherToOW(netherX, text); }, [netherX, convertNetherToOW] ); const handleClear = useCallback(() => { setOverworldX(""); setOverworldZ(""); setNetherX(""); setNetherZ(""); }, []); return ( {/* Custom Back Button */} router.back()} style={styles.backButton} > ← Go Back Nether Portal Calculator {/* Overworld Row */} Overworld X: Z: {/* Nether Row */} Nether X: Z: Clear All ); }